请问如何开发bean组件?(200分)

  • 主题发起人 主题发起人 bluepeach
  • 开始时间 开始时间
B

bluepeach

Unregistered / Unconfirmed
GUEST, unregistred user!
听了jjams_king和eguy等大侠的课,很想了解并实践一下javabean。
欢迎大家踊跃发言。
 
下面的是一些介绍[从网上抓的]:)
javaBean被定义为“一种可在开发工具中可视化操作的可复用的软件构件。”这种很吸
引人的定义实际上没有说出什么。这句话中的一丝线索是“可在开发工具中可视化操作”
简而言之,JavaBean是一个软件构件。
由于现存构件模型的种种问题,JavaBeans的部分目标相当明显。以下便是其中的一部分
(1)便携性:由Java编写,没有与平台相关的代码。
(2)轻量:实现小至一个按钮或大至一个完整的表单或文字处理器。
(3)易于创建:使创建Java构件更容易,不必实现无数的方法。有或没有开发工具都能
够创建构件。从简单的applet向Java构件的移植要简单。
(4)能嵌入其它构件模型:JavaBean可作为如 ActiveX、 OpenDoc或其它构件一样的构件,
且能嵌入 ActiveX或 OpenDoc的容器中,如文字处理器,并且与本地构件有一样的表现。
一个嵌入文字处理器的Java图表构件能与同一个文档中的其它构件交互。
(5)能访问远程数据:一Java构件可使用任何标准的分布对象(JavaIDL或远程方法唤醒)
或分布数据(JDBC)机制来访问远程数据。实事上,bean可使用任何标准的环境设施。
下面是javabean的一些属性:
(1)持续性
持续性允许一个构件保存它的状态,因此它还能被重新创建。利用持续性机制,
表单构件可存为一个文件,并在其它时间被打开,使以前的数据、公式和设置
完好无损。 JavaBeans持续性使用Java 环境对象序列化机制产生I/O 流并
在以后恢复。构件创建者只需实现可序列化的接口以使构件保持持续。持续的
流可能为一个Java 文件、一网络连接或更有趣一些,一个由其它构件模型提供
的流。若 JavaBean构件嵌入一个 ActiveX或 OpenDoc 构件中, bean通过相关
的“桥”提供持续的流。
(2)制定
制定是JavaBean 构件的新特性之一。简而言之,bean 的创建者不仅创建运行
状态的构件,而且还通过扩展java.awt.Component 类创建了UI工具箱的类。这
个 UI工具箱可被用来制定 bean的一个实例。利用其它的构件模型,开发环境、
可视化开发工具或任何其它的都必须提供所有对该构件的制定逻辑。 JavaBean
构件可随同自己的UI 工具箱类发布,智能的制定该构件。开发环境可制定任何
在别人创建的构件。开发工具只是寻找相关的制定器类并在其窗口中创建一个
它的实例,而不必需要其它的。
(3)自查
对于能在开发环境中复用的 Java构件,需要有查询一个 bean能做些什么和产生
和监听事件的类型。在JavaBeans 规范中,这被称为规范并且是Java提供的
基本的反映机制的扩展。 反映机制允许运行状态进行查询以得到对象的类并由此
得到其公开的方法和变量。bean 的自查机制进行了扩展,查找指定的设计方式的
使用。通过BeanInfo 类,bean 作者可以暴露要暴露的公共方法和变量。 当作为
构件复用现存 Java代码时, BeanInfo类也是很有用的。编程人员可用创建一个
BeanInfo类,具体指定要用到的得到和设置属性的方法名,由此覆盖缺省的自查。
(4)打包
JavaBean构件常被打包为JAR 文件。JAR 的格式允许构件作为一个单独的实体,
随同其支持类 (如制定编辑器、 BeanInfo和其它资源文件 )被打包。开发环境必须
了解 JAR的格式并使用其 manifest文件一个 JAR中所包括的 bean。 包含一个JavaBean
构件的JAR 还可能包括该构件的序列化版本。若这个持续的实例存在,便使用它。这样
提供商就可以发布该构件的可用的或制定好的版本。
 
如果不考虑事件,定制等。
一个java class就是一个javabean.如:
public class BeanSample{
private String name;//属性名为name,类型为字符串
/* "set"属性*/
public void setName(String name) {
this.name=name;
}
/* "get"属性 */
public String getName() {
return this.name;
}
}
这个javabean就可以在JSP中调用。
 
JavaBean和Enterprise JavaBean(EJB)不是一个东西。JavaBean主要优点体现在
它的设计期可视化。EJB则是另外一个东西,主要突出的是在3层中如何包装业务逻
辑和业务数据。现在更热门的应该是EJB,所以我想你也可以看点EJB。
 
那么EJB有什么资料?还需要什么别的工具么?
 
开发EJB需要j2sdkee,这时你要用notepad等来写代码。
如果你安装了JBUILDER3.5E+j2ee.jar或JBUILDER4E+IAS就可以在图形界面开发EJB了。
EJB的资料基本上是英文的,最权威的是SUN的EJB1.1规范。此外,JBUILDER和相应的
应用服务器里也会有一些。
 
eguy : 您好象是个JAVA高手啊? 有空多教我,我正在刻苦学习JAVA,OICQ:3099231
 
吴剑明:>>您好象是个JAVA高手啊?
不是不是。不敢不敢。
教可不敢说,交流交流还可以。
我不太玩OICQ,有事发妹儿吧。
 
老吴:你真是有眼不识泰山,eguy可是java论坛的摊主啊。我也正在学java ,
你也可以和我聊聊。我的oicq7712725。
再问jjams_king 一个小问题。你说过的在jbuilder3的classpath中加入visibroker的路径。
我在project下的default properties里面删除了visibroker3.4的,新建并加入了visibroker4.1
的库,并将visibroker/lib下面的所有jar文件写入路径。这样我用visibroker4写的corba程序
有部分可以被识别,但还是有一些不行。比如Bank.Accout等。
而且这时对idl文件的编译也不可以在IDE下进行。难道一定要在visibroker下用批处理么?
我不知道是我做错了,还是只能这样:编译和调试都不能在IDE下进行?
 
bluepeach,
加入路径时一般只要加入vjborb.jar就行,所以你能不能详细点说说
你碰到的情况(怎么不被识别,编译错还是运行错等等等等)。
在JBuilder3下编译IDL也是用的外挂的VisiBroker的编译器,可以想想办法。
不过我觉得做一个batch并不是很麻烦,况且现在用JBuilder4,直接支持VisiBroker4.1
至于调试,的确是把麻烦事。首先要把vbj加到环境中的参数手工加到JBuilder的
环境中。这样就可以在IDE中运行了,不过调试有时候还是有问题。JBuilder4已经可以
在IDE中进行调试了,但是调试的时候恶慢。
 
JJams_King:
我用visibroker3.4的话,POA等都是红字显示,不能识别。而如果用4.1,基本上都可以了。
但是比如一个bank的例子。bank.Account不能被识别。
我好像用过一个jbuilder的,在IDE界面下build bank.idl就可以将编译产生的类加在idl文件
的下面。不记得是什么版本的了,而现在不行。
我宿舍的机器破烂,于是用的vj6+visibroker,但是vj不需要设置什么路径,就可以使用visibroker,
而且只要用idl2java编译idl文件后,如Bank.Account它可以自动提示出来。
我只希望打程序时方便些,至于编译,只是我记得好像用过一个。想着这样省事。
调试我也没有想奢求在IDE下进行。我就用命令行得了。
你现在用jb4,速度比jb3如何?jb4直接就是visibroker 4.1么?
还有一个问题。我在idl文件中自定义一个异常,但是始终调试不通过。你知道怎么回事么?
 
1。VisiBroker3.4是CORBA2.0兼容的,没有POA。
2。你说的bank.Account不能被识别,我想可能有两种情况:
第一种情况是你的IDL没有编译。这时候当然就没有bank.Account这个类了
第二种情况就是你的路径没设好。应该检查一下你的project的Source和
Output的路径,在IDL编译时的输出路径等。例如有这么个IDL:
==============================================================
// Bank.idl
module Bank {
interface Account {
float balance();
};
interface AccountManager {
Account open(in string name);
};
};
==============================================================
那么一要保证IDL2Java得到的Java文件在<Source>/Bank/Account中
3。如果你用的VisiBroker的版本和JBuilder支持的版本不一样的话,最好不要
用JBuilder编译你的IDL文件。
4。大部分调试工作还是可以在IDE下面进行的。但是我更喜欢在适当的地方插入
输出语句,用这种方法调试。必要的时候,我还会把VisiBroker的文件反编译
加入调试用的语句。在IDE中运行程序需要设置好参数。下面是我设置的参数,
可以参考参考。
===================================================================
-Dorg.omg.CORBA.ORBClass=com.inprise.vbroker.orb.ORB
-Dorg.omg.CORBA.ORBSingletonClass=com.inprise.vbroker.orb.ORB
-Dvbroker.agent.port=14000
-Djavax.rmi.PortableRemoteObjectClass=com.inprise.vbroker.rmi.PortableRemoteObjectImpl
-Djavax.rmi.CORBA.UtilClass=com.inprise.vbroker.rmi.CORBA.UtilImpl
-Dvbroker.orb.admDir=C:/Inprise/vbroker/adm -Denv.class.path=.;c:/Inprise/vbroker/lib/vbjorb.jar
-Dvbroker.orb.procId=280
===================================================================
5。至于异常,我不知道你具体遇到什么错误。如果按照CORBA规范和VisiBroker编程
手册去做,应该没问题的。
6。JBuilder4不慢,除了调试。
 
在我写的例子中:
<SourcePath> = e:/JJams/Source
<OutputPath> = e:/JJams/Lib
<Package> = JC.RnD.Soft.TestBed.UsingCORBA1
为了不麻烦,我不在IDL文件里写module,而是在IDL编译时指定package。下面
我的MakeSnS.bat。注意里面的package和root_dir。
=====================================================================
idl2java -package JC.RnD.Soft.TestBed.UsingCORBA1 -root_dir e:/JJams/Source IMyObject.idl
=====================================================================
运行完后,stub和skeleton文件会被放在
e:/JJams/Source/JC/RnD/Soft/TestBed/UsingCORBA1
目录中。
 
你的batch文件是怎么写的?来个全貌吧。
是不是也是
idl2java idl2java -package JC.RnD.Soft.TestBed.UsingCORBA1 -root_dir e:/JJams/Source IMyObject.idl
vbjc Server.java
vbjc Client.java 还有什么参数?
唉,如果jb4不慢的话,我准备装jb4了。我刚搞了128的条子。省的麻烦。
 
全貌在这:<p align="center"><a href="/delphibbs/DispQ.asp?LID=361651">http://www.delphibbs.com/delphibbs/DispQ.asp?LID=361651</a></p>
我的批处理只是编译IDL,其他的都在JBuilder里完成。IDL接口不是经常变,
变了才需要重新执行批处理。所以,其实很方便的。
 
请问jb4的serial和key是多少?
 
>>请问jb4的serial和key是多少?
看已答问题
 
一个下午都没有搞定。我烦死了。真的烦死了。……
这个破jbuilder,我真的搞不明白了。怎么也搞不明白。也许真是我太笨了。
真不明白,这么笨还去编什么程序??????????!!!我烦死了!
我都不想活了!
为什么我用vj就一点问题都没有,而jbuilder就这么多问题???
连个路径也设置不好,难道只有vj这种傻瓜东西才配我用么?
jb3搞不定,试了一下jb4,结果发现我的jb4里面就没有corba呀。连个idl文件都不能编译,
更不要说调试了。整个目录下就没有一点关于corba的东西,如idl2java等!
我真的这么笨么?难道我只能去打命令行么?
 
还是要先谢谢jjams_king耐心的给我讲了这么多,但我真的是太笨。
装入visibroker4.1的库之后,我写的corba程序的语法之类的都没有问题了。
但就是如bank.account之类的不能认出。我也知道是路径的问题。但是就是搞不定。
于是我将你在http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=361651上的例子试图做一遍,
但发现了很多我不太理解的东西。
1.你的那些参数如 -Dorg.omg.CORBA.ORBClass=com.inprise.vbroker.orb.ORB 之类的我没有添加。
我想那些是调试用的。我先不用,应该不影响后面吧。
2.你的idl文件中有这两句:
#root_dir e:/JJams/Source
#package JC.RnD.Soft.TestBed.UsingCORBA1
而我无论如何无法编译通过。只有当我去掉这两句,才可以。
3.你的编译语句是
idl2java -package JC.RnD.Soft.TestBed.UsingCORBA1 -root_dir e:/JJams/Source IMyObject.idl
当我们在idl文件中不设置模块的化(module),这时编译产生的文件就是放在你的idl文件的目录下。
但是我们实际只用idl2java IMyObject.idl文件也是一样的效果。

 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部