⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ejb内部资参1.htm

📁 写给JSP初级程序员的书
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<BODY bgColor=#ffffff text=#000000>

  <table><tbody>
  <TR>
    <TD height=21>
      <DIV align=center><B><FONT size=3>EJB内部资参1 <BR><FONT 
      size=2> 
      </FONT></FONT></FONT>
      <HR align=center color=#cccccc noShade SIZE=1>
      </DIV></TD></TR>
  <TR>
    <TD class=line><FONT 
      color=#333300>EJB内部资参1<BR><BR><BR><BR>enterpriseJavaBean&nbsp;入门&nbsp;<BR><BR>一&nbsp;基本知识&nbsp;<BR><BR>1.&nbsp;背景&nbsp;<BR><BR>Java由于其良好的跨平台行而成为服务器端的理想语言,为了利用Java实现服务&nbsp;<BR>器端的计算,SUN推出了一个完整的开发平台J2EE,其目的是为基于Java的服务器&nbsp;<BR>端配置提供一个独立于平台的可携带的多用户企业级的安全平台,而J2EE的基石&nbsp;<BR>就是Enterprise&nbsp;JavaBeans(EJB),EJB是建立基于JAVA的服务器端组件的标准,它&nbsp;<BR>定义了如何编写服务器端组件,提供了组件与管理组件的应用服务器之间的标准&nbsp;<BR>约定,EJB是一种组件架构,使得开发人员能够快速开发出具有伸缩性的企业级应&nbsp;<BR>用。&nbsp;<BR><BR>2.&nbsp;EJB简介&nbsp;<BR><BR>1)JavaBeans和Enterprise&nbsp;JavaBeans&nbsp;<BR>JavaBeans是Java的组件模型。在JavaBeans规范中定义了事件和属性等特征。En&nbsp;<BR>terprise&nbsp;JavaBeans也定义了一个Java组件模型,但是Enterprise&nbsp;JavaBeans组&nbsp;<BR>件模型和JavaBeans组件模型是不同的。&nbsp;JavaBeans重点是允许开发者在开发工具&nbsp;<BR>中可视化的操纵组件。JavaBeans规范详细地解释了组件间事件登记、传递、识别&nbsp;<BR>和属性使用、定制和持久化的应用编程接口和语意。&nbsp;Enterprise&nbsp;JavaBeans的侧&nbsp;<BR>重点是详细地定义了一个可以portably地部署Java组件的服务框架模型。因此,&nbsp;<BR>其中并没提及事件,因为enterprise&nbsp;bean通常不发送和接受事件。同样也没有提&nbsp;<BR>及属性------属性定制并不是在开发时进行,而是在运行时(实际上在部署时)&nbsp;<BR>通过一个部署描述符来描述。&nbsp;<BR>不要寻找JavaBeans和Enterprise&nbsp;JavaBeans之间的相似性。他们都是组件模型规&nbsp;<BR>范,但是前者说明了开发工具中应用程序组装的问题,而后者则侧重于部署组件&nbsp;<BR>的服务框架的细节。不要错误地认为JavaBeans是用于客户端的开发,Enterpris&nbsp;<BR>e&nbsp;JavaBeans是用于服务器端的开发。JavaBeans也可作为进行非图形化服务器端&nbsp;<BR>Java应用开发的组件模型。区别是当你使用JavaBeans创建服务器应用时,你还得&nbsp;<BR>设计整个的服务框架。用Enterprise&nbsp;Javabeans框架是现成的,你只需遵守它的&nbsp;<BR>APIs.对于复杂的服务器端应用程序,显然使用Enterprise&nbsp;JavaBeans比重新开发&nbsp;<BR>更简单&nbsp;<BR>2)EJB体系结构&nbsp;<BR>EJB是一种组件架构,它采用分而制之的方法实现服务器端的计算。&nbsp;<BR>EJB规范定义了六种不同的角色来完成其任务,&nbsp;包括:&nbsp;<BR>?&nbsp;Bean&nbsp;provider:&nbsp;提供可重用的商业组件&nbsp;<BR>?&nbsp;Container&nbsp;provider:&nbsp;为ejb&nbsp;应用提供低层次的运行环境&nbsp;<BR>?&nbsp;Server&nbsp;provider:提供应用程序服务器用以包含,管理和配置ejb组件,目前E&nbsp;<BR>JB规范没有提供EJB&nbsp;Container和EJB&nbsp;Server之间的接口,故二者的提供商是合一&nbsp;<BR>的,有:BEA的Weblogic&nbsp;server,SUN的NetDynamics,IBM的WebSphere,Oracle的8&nbsp;<BR>i等。&nbsp;<BR>?&nbsp;Application&nbsp;assembler:负责将不同的组件组织起来构成能够运行的应用程序&nbsp;<BR><BR>?&nbsp;Deployer:&nbsp;负责将要使用的组件安装到应用服务器中并加以配置&nbsp;<BR>?&nbsp;System&nbsp;Administrator:&nbsp;负责配置好的系统的管理等&nbsp;<BR>这六种角色的流程图如下:&nbsp;<BR><BR>Enterprise&nbsp;JavaBean&nbsp;驻留在EJB&nbsp;Container中,通过EJB&nbsp;Container对ejb进行管&nbsp;<BR>理。EJB规范定义了二者之间的接口。&nbsp;<BR>Javax.ejb.EJBHome接口列出了所有定位、创建、删除EJB&nbsp;类实例的方法。Home对&nbsp;<BR>象是home接口的实现。EJB类开发者必须定义home接口。EJB&nbsp;Container&nbsp;Provide&nbsp;<BR>r应该提供从home接口中产生home对象实现的方法。&nbsp;<BR>远程接口(remote&nbsp;interface)列出了EJB类中的商业方法。Javax.ejb.EJBObje&nbsp;<BR>ct实现远程接口,并且客户端通过它访问EJB实例的商业方法。EJB开发者定义远&nbsp;<BR>程接口,EJB&nbsp;Container&nbsp;Provider提供产生相应的EJBObject的方法。客户端不能&nbsp;<BR>得到EJB实例的引用,只能得到它的EJBObject实例的引用。当客户端调用一个方&nbsp;<BR>法,EJBObject接受请求并把它传给EJB实例,同时提供进程中必要的包装功能。&nbsp;<BR>客户端应用程序通过home对象来定位、创建、删除EJB类的实例,通过EJBObject&nbsp;<BR>来调用实例中的商业方法。客户端可以用Java来编程,通过Java&nbsp;RMI来访问访问&nbsp;<BR>home对象和EJBObject,或用其他语言编程并通过CORBA/IIOP访问,使得部署的服&nbsp;<BR>务器端组件可以通过CORBA接口来访问。&nbsp;<BR><BR>Enterprise&nbsp;javaBean规范将Enterprise&nbsp;Beans&nbsp;分为两种:session&nbsp;bean和enti&nbsp;<BR>ty&nbsp;bean.&nbsp;<BR><BR>I.&nbsp;session&nbsp;bean表示的是调用它的客户端代码索要完成的工作,是一种商业处理&nbsp;<BR>过程对象,它实现商业逻辑,商业规则以及工作流程,例如:报价,订单处理,&nbsp;<BR>视频压缩,股票交易等。session&nbsp;bean之所以叫session&nbsp;bean是因为其生命周期&nbsp;<BR>与调用它的客户端相同。&nbsp;<BR>session&nbsp;bean又分为两种:stateless和stateful,&nbsp;stateful&nbsp;session&nbsp;bean用于&nbsp;<BR>贯穿多个方法请求和事务的商业过程,例如:网上商店,用户进入商店后,可以&nbsp;<BR>将商品加入再现的购物车,组件必须跟踪用户的状态(如:购物车);而statel&nbsp;<BR>ess&nbsp;session&nbsp;bean用于客户调用方法期间不用维护任何状态信息,例如:解决复&nbsp;<BR>杂数学运算的视频压缩/解压缩。&nbsp;<BR><BR>II.&nbsp;entity&nbsp;bean用来代表商业过程中处理的永久性的数据,例如:银行出纳员组&nbsp;<BR>件完成储蓄等商业过程,其中涉及的数据时银行账户数据&nbsp;<BR>entity&nbsp;bean用来代表底层的对象。最常用的是用entity&nbsp;bean代表关系库中的数&nbsp;<BR>据。一个简单的entity&nbsp;bean&nbsp;可以定义成代表数据库表的一个记录,也就是每一&nbsp;<BR>个实例代表一个特殊的记录。更复杂的entity&nbsp;bean可以代表数据库表间关联视图&nbsp;<BR>。在entity&nbsp;bean中还可以考虑包含厂商的增强功能,如对象--关系映射的集成。&nbsp;<BR><BR>通常用entity类代表一个数据库表比代表多个相关联的表更简单且更有效。反过&nbsp;<BR>来可以轻易地向entity类的定义中增加关联,这样可以最大地复用cache并减小旧&nbsp;<BR>数据的表现。&nbsp;<BR><BR>III.&nbsp;entity&nbsp;bean和session&nbsp;bean的比较&nbsp;<BR>看起来session&nbsp;bean好象没什么用处,尤其对于数据驱动的应用程序。当然事实&nbsp;<BR>并不是这样。因为entity&nbsp;bean(譬如说)代表底层数据库的一行,则entity&nbsp;be&nbsp;<BR>an实例和数据库记录间就是一对一的关系。因为多个客户端必须访问底层记录,&nbsp;<BR>这意味着,不同于session&nbsp;bean,客户端必须共享entity&nbsp;bean。因为是共享的,&nbsp;<BR>所以entity&nbsp;bean不允许保存每个客户端的信息。session&nbsp;bean允许保存客户端的&nbsp;<BR>状态信息,客户端和session&nbsp;bean实例间是一对一的。entity&nbsp;bean允许保存记录&nbsp;<BR>的信息,entity&nbsp;bean实例和记录间是一对一的。一个理想的情况是客户端通过s&nbsp;<BR>ession&nbsp;bean连接服务器,然后session&nbsp;bean通过entity&nbsp;bean访问数据库。这使&nbsp;<BR>得既可以保存客户端的信息又可以保存数据库记录的信息。 &nbsp;<BR>同时session&nbsp;bean也不能提供在相同或不同的EJB类调用间进行全局的事务控制。&nbsp;<BR>没有session&nbsp;bean,应用程序开发者(客户端开发者)就必须理解EJB类的事务要&nbsp;<BR>求,并使用客户端的事务划分来提供事务控制。EJB的主要好处就是应用开发者不&nbsp;<BR>需知道EJB类的事务需求。一个session&nbsp;bean可以代表一个商业操作,进行事务控&nbsp;<BR>制,不需要客户端进行事务划分。&nbsp;<BR>以下我们作为EJB&nbsp;provider的角色来讨论Enterprise&nbsp;javaBean的开发。&nbsp;<BR><BR>3,EJB&nbsp;开发&nbsp;<BR><BR>A)&nbsp;Enterprise&nbsp;JavaBean的由如下部分构成&nbsp;<BR>Enterprise&nbsp;Bean&nbsp;类:&nbsp;包含ejb&nbsp;组件的详细实现,对于session&nbsp;Bean它代表了&nbsp;<BR>与业务处理相关的逻辑的实现,而对于entity&nbsp;Bean&nbsp;它代表了与数据逻辑相关的&nbsp;<BR>实现&nbsp;<BR>EJB&nbsp;Object&nbsp;:是由EJB&nbsp;Container来实现的远程接口,它是客户端和bean&nbsp;实例之&nbsp;<BR>间的中介,传递客户端调用到bean&nbsp;实例;&nbsp;<BR>Home&nbsp;接口:充当EJB&nbsp;Object工厂的java接口,创建EJB&nbsp;Object,Home接口的实现&nbsp;<BR>由EJB&nbsp;Container负责。&nbsp;<BR>Deploy&nbsp;descriptor:描述你的ejb&nbsp;中间件的相关要求,包括:通知EJB&nbsp;Containe&nbsp;<BR>r如何管理你的bean,事务的需要,安全需要等等。&nbsp;<BR>特定于bean&nbsp;的属性:&nbsp;利用该属性,bean可以在运行时读取并调整自己的功能&nbsp;<BR>Ejb-jar&nbsp;文件:将生成的bean&nbsp;类,home接口,Ejb&nbsp;object,deployment&nbsp;descrip&nbsp;<BR>tor和bean&nbsp;的properties&nbsp;打包进ejb&nbsp;jar&nbsp;文件,这样就可以deploy了。&nbsp;<BR><BR>B)&nbsp;Enterprise&nbsp;JavaBean编程的具体步骤&nbsp;<BR>实现javax.ejb.EnterpriseBean接口:&nbsp;<BR>对于session&nbsp;bean&nbsp;可以直接实现javax.ejb.SessionBean接口,对于entity&nbsp;bea&nbsp;<BR>n&nbsp;可以直接实现javax.ejb.EntityBean接口,而后实现本bean特有的功能。&nbsp;<BR>扩展javax.ejb.EJBObject接口:&nbsp;<BR>增加在Enterprise&nbsp;Bean实现类中供客户调用的方法的相应的方法,必须相同&nbsp;<BR>扩展javax.ejb.EJBHome接口:&nbsp;<BR>增加创建上述扩展的javax.ejb.EJBObject接口的相应的create()方法。&nbsp;<BR>编写deploy&nbsp;descriptor文件:&nbsp;<BR>目前EJB&nbsp;1.1规范规定了用XML文件来描述它,并提供了相应的DTD.&nbsp;<BR>生成EJB&nbsp;jar&nbsp;文件:&nbsp;<BR>利用jar命令将上述生成的相应文件进行打包。&nbsp;<BR><BR><BR>在第二部分给出了ejb开发的详细说明及相关注意事项&nbsp;<BR>二&nbsp;例子程序&nbsp;<BR><BR>以下的例子程序是以weblogic&nbsp;server(ver5.1)作为EJB&nbsp;Server(EJB&nbsp;Container)&nbsp;<BR>的,&nbsp;不同的EJB&nbsp;Server&nbsp;在一些方面有所不同&nbsp;(不同的地方另加注释)&nbsp;<BR><BR>例子一.&nbsp;Hello,&nbsp;world&nbsp;(Stateless&nbsp;Session&nbsp;Bean)&nbsp;<BR>包括EJB相应接口的扩展和实现、deploy&nbsp;descriptor文件的生成以及.jar文件生&nbsp;<BR>成;&nbsp;<BR><BR>服务器端EJB开发&nbsp;<BR><BR>EJB相应接口的扩展和实现:(与EJB&nbsp;Server无关)&nbsp;<BR>第一步:&nbsp;实现javax.ejb.SessionBean&nbsp;接口,并提供该Bean的特定功能,&nbsp;"Hel&nbsp;<BR>lo,&nbsp;world"&nbsp;Stateless&nbsp;SessionBean&nbsp;仅仅向客户端返回“Hello,world!”字符串&nbsp;<BR><BR><BR>注意:除了要实现javax.ejb.SessionBean接口外(ejbActivate(),ejbPassivat&nbsp;<BR>e(),&nbsp;ejbRemove(),&nbsp;setSessionContext()),必须:&nbsp;<BR>1).实现公共方法ejbCreate(),该方法对于stateless&nbsp;SessionBean&nbsp;无需带任何&nbsp;<BR>参数而对stateful&nbsp;SessionBean则根据需要自定;&nbsp;<BR>2)提供给客户调用的方法,&nbsp;如:本例的hello()方法&nbsp;<BR><BR>package&nbsp;com.jsper.ejbexample.session.helloworld;&nbsp;<BR><BR>import&nbsp;javax.ejb.*;&nbsp;<BR>import&nbsp;java.rmi.RemoteException;&nbsp;<BR><BR>public&nbsp;class&nbsp;HelloBean&nbsp;implements&nbsp;SessionBean&nbsp;{&nbsp;<BR>public&nbsp;HelloBean()&nbsp;{&nbsp;<BR>super();&nbsp;<BR>}&nbsp;<BR>/**&nbsp;<BR>*由EJB&nbsp;Server(EJB&nbsp;Container)&nbsp;调用,用于激活SessionBean的实例&nbsp;<BR>*/&nbsp;<BR>public&nbsp;void&nbsp;ejbActivate()&nbsp;throws&nbsp;EJBException,&nbsp;java.rmi.RemoteExceptio&nbsp;<BR>n&nbsp;<BR>{&nbsp;<BR>System.out.println("ejbActivate()");&nbsp;<BR>}&nbsp;<BR>/**&nbsp;<BR>*由EJB&nbsp;Server(EJB&nbsp;Container)&nbsp;调用,用于创建本SessionBean的实例&nbsp;<BR>*&nbsp;创建日期:(2000-8-1&nbsp;16:00:45)&nbsp;<BR>*/&nbsp;<BR>public&nbsp;void&nbsp;ejbCreate()&nbsp;throws&nbsp;javax.ejb.CreateException&nbsp;<BR>{&nbsp;<BR>System.out.println("ejbCreate()");&nbsp;<BR>}&nbsp;<BR>/**&nbsp;<BR>*&nbsp;由EJB&nbsp;Server(EJB&nbsp;Container)&nbsp;调用,用于惰化SessionBean的实例&nbsp;<BR>*/&nbsp;<BR>public&nbsp;void&nbsp;ejbPassivate()&nbsp;throws&nbsp;EJBException,&nbsp;java.rmi.RemoteExcepti&nbsp;<BR>on&nbsp;<BR>{&nbsp;<BR>System.out.println("ejbPassivate()");&nbsp;<BR>}&nbsp;<BR>/**&nbsp;<BR>*&nbsp;由EJB&nbsp;Server(EJB&nbsp;Container)&nbsp;调用,用于删除SessionBean的实例&nbsp;<BR>*/&nbsp;<BR>public&nbsp;void&nbsp;ejbRemove()&nbsp;throws&nbsp;EJBException,&nbsp;java.rmi.RemoteException&nbsp;<BR><BR>{&nbsp;<BR>System.out.println("ejbRemove()");&nbsp;<BR>}&nbsp;<BR>/**&nbsp;<BR>*&nbsp;本SessionBean提供给客户调用的方法,但不能由客户直接调用,而是通过Ejb&nbsp;<BR>Object远程接口调用&nbsp;<BR>*&nbsp;创建日期:(2000-8-1&nbsp;16:04:58)&nbsp;<BR>*&nbsp;@return&nbsp;java.lang.String&nbsp;<BR>*/&nbsp;<BR>public&nbsp;String&nbsp;hello()&nbsp;{&nbsp;<BR>return&nbsp;"Hello,&nbsp;World!";&nbsp;<BR>}&nbsp;<BR>/**&nbsp;<BR>*&nbsp;由EJB&nbsp;Server(EJB&nbsp;Container)&nbsp;调用,用于设置SessionBean的上下文&nbsp;<BR>*/&nbsp;<BR>public&nbsp;void&nbsp;setSessionContext(SessionContext&nbsp;arg1)&nbsp;throws&nbsp;EJBException&nbsp;<BR>,&nbsp;java.rmi.RemoteException&nbsp;<BR>{&nbsp;<BR>System.out.println("setSessionContext()");&nbsp;<BR>}&nbsp;<BR>}&nbsp;<BR>第二步:扩展javax.ejb.EJBObject接口,增加在第一步SessionBean&nbsp;接口实现中&nbsp;<BR>提供给客户调用&nbsp;的方法,&nbsp;如本例的hello()方法&nbsp;<BR>注意:1)增加的方法名称必须与相应的SessionBean实现中方法相同(case-sen&nbsp;<BR>sitive);&nbsp;<BR>2)&nbsp;增加的方法必须抛出java.rmi.RemoteException异常&nbsp;<BR><BR>package&nbsp;com.jsper.ejbexample.session.helloworld;&nbsp;<BR><BR>import&nbsp;java.rmi.*;&nbsp;<BR>import&nbsp;javax.ejb.*;&nbsp;<BR>public&nbsp;interface&nbsp;Hello&nbsp;extends&nbsp;EJBObject&nbsp;{&nbsp;<BR>/**&nbsp;<BR>*&nbsp;由客户端直接调用,返回“hello,world!”,实现由相应的SessionBean完成&nbsp;<BR>*&nbsp;创建日期:(2000-8-1&nbsp;15:56:25)&nbsp;<BR>*&nbsp;@return&nbsp;java.lang.String&nbsp;<BR>*&nbsp;@exception&nbsp;java.rmi.RemoteException&nbsp;异常说明。&nbsp;<BR>*/&nbsp;<BR>String&nbsp;hello()&nbsp;throws&nbsp;java.rmi.RemoteException;&nbsp;<BR>}&nbsp;<BR>第三步:扩展javax.ejb.EJBHome接口,增加创建EJBHome接口对象的create()方法&nbsp;<BR><BR><BR>注意:&nbsp;1)create()方法中参数的有无无关紧要,但必须与SessionBean接口实现&nbsp;<BR>类中ejbCreate()方法相对应,包括从方法的个数上和参数上;例如:若SessionB&nbsp;<BR>ean接口实现类中有ejbCreate(),ejbCreate(int&nbsp;nVal)方法,则该接口扩展中必&nbsp;<BR>须增加create(),create(int&nbsp;nVal)方法&nbsp;<BR>2)create()方法必须抛出javax.ejb.CreateException&nbsp;和java.rmi.RemoteExce&nbsp;<BR>ption&nbsp;异常&nbsp;<BR><BR>package&nbsp;com.jsper.ejbexample.session.helloworld;&nbsp;<BR><BR>import&nbsp;java.rmi.*;&nbsp;<BR>import&nbsp;javax.ejb.*;&nbsp;<BR>public&nbsp;interface&nbsp;HelloHome&nbsp;extends&nbsp;EJBHome&nbsp;{&nbsp;<BR>/**&nbsp;<BR>*&nbsp;创建EJBObject扩展对象Hello&nbsp;<BR>*&nbsp;创建日期:(2000-8-1&nbsp;16:13:53)&nbsp;<BR>*&nbsp;@return&nbsp;com.jsper.ejbexample.session.helloworld.Hello&nbsp;<BR>*&nbsp;@exception&nbsp;javax.ejb.CreateException&nbsp;异常说明。&nbsp;<BR>*&nbsp;@exception&nbsp;java.rmi.RemoteException&nbsp;异常说明。&nbsp;<BR>*/&nbsp;<BR>Hello&nbsp;create()&nbsp;throws&nbsp;javax.ejb.CreateException,&nbsp;java.rmi.RemoteExcept&nbsp;<BR>ion;&nbsp;<BR>}&nbsp;<BR><BR>?&nbsp;deploy&nbsp;descriptor文件的生成&nbsp;<BR><BR>EJB1.1规范规定了必须利用xml文件构造deploy&nbsp;descriptor文件,并给出了相应&nbsp;<BR>的DTD。本例的ejb-jar.xml文件如下:&nbsp;<BR><BR><BR><BR><BR>images/green-cube.gif&nbsp;<BR>  &nbsp;<BR>   &nbsp;<BR>images/orange-cube.gif&nbsp;<BR>helloworld&nbsp;<BR>com.jsper.ejbexample.session.helloworld.HelloHome&nbsp;<BR>com.jsper.ejbexample.session.helloworld.Hello&nbsp;<BR>com.jsper.ejbexample.session.helloworld.HelloBean&nbsp;<BR>Stateless&nbsp;<BR>Container&nbsp;<BR><BR> BEAS&nbsp;<BR> java.lang.Double&nbsp;<BR> 100.0&nbsp;<BR><BR><BR> MSFT&nbsp;<BR> java.lang.Double&nbsp;<BR> 150.0&nbsp;<BR><BR>   &nbsp;<BR>  &nbsp;<BR>  &nbsp;<BR>   &nbsp;<BR><BR> helloworld&nbsp;<BR> Remote&nbsp;<BR> *&nbsp;<BR><BR>Required&nbsp;<BR>   &nbsp;<BR>  &nbsp;<BR> &nbsp;<BR><BR>对于weblogic&nbsp;Server还必须构造一个名为weblogic-ejb-jar.xml的文件,BEA公&nbsp;<BR>司给出了相应的DTD.它描述了相应的EJB的名称以及JNDI的名称(**该部分与EJB&nbsp;<BR>Server有关,ejb开发人员可省去,而由DEPLOYER来完成**)&nbsp;<BR><BR><BR><BR>  &nbsp;<BR>   helloworld&nbsp;<BR>   &nbsp;<BR>100&nbsp;<BR>   &nbsp;<BR>   hello.HelloHome&nbsp;<BR>  &nbsp;<BR> &nbsp;<BR>?&nbsp;提供用于标示本EJB的大小图标(icon),注意:图像的格式必须是JPEG&nbsp;或&nbsp;GI&nbsp;<BR>F。&nbsp;<BR>本例提供了图像文件:orange-cube.gif和green-cube.gif(见附件)&nbsp;<BR>?&nbsp;构造.jar文件&nbsp;<BR>第一步:编译相应的.java文件&nbsp;<BR>本例中包括:Hello.java,HelloBean.java,HelloHome.java&nbsp;,位于包com.jsper&nbsp;<BR>.ejbexample.session.helloworld中。编译后相应的.class文件放在相对目录co&nbsp;<BR>m\jsper\ejbexample\session\helloworld&nbsp;中。&nbsp;<BR>第二步:创建与com的同级目录META-INF,将相应的.xml文件拷贝到该目录下;将相&nbsp;<BR>应的图标文件拷贝到相对目录(相对于该.xml文件父目录)中(本例为与com的同&nbsp;<BR>级目录images)&nbsp;<BR>第三步:利用JAR命令将目录com,images,META-INF中的内容做成.jar文件&nbsp;<BR>本例JAR文件名成为std_hello.jar&nbsp;<BR>jar&nbsp;cv0f&nbsp;std_hello.jar&nbsp;META-INF&nbsp;com&nbsp;images&nbsp;<BR><BR>至此,&nbsp;对于EJB&nbsp;Provider的工作已经完成。&nbsp;<BR>但是由于我们的开发人员在开发ejb的时候需要进行本地调试等工作,因此其既充&nbsp;<BR>当ejb&nbsp;provider的角色,又充当其他的脚色,&nbsp;因此,其可能需要作如下工作(仅&nbsp;<BR>供参考,接上述工作):&nbsp;<BR>?&nbsp;生成可deployable的jar文件&nbsp;<BR>前边生成的jar文件(若不含weblogic-ejb-jar.xml文件)是不依赖于ejb&nbsp;serve&nbsp;<BR>r(ejb&nbsp;container)的,而如前所述,不同的ejb&nbsp;server对于ejb的配置是不同的&nbsp;<BR>,因此需要加上特定的信息&nbsp;<BR>对于weblogic&nbsp;server则是通过相应的ejbc命令或deploy&nbsp;utility在原.jar文件的&nbsp;<BR>基础上生成新的可deployable的.jar文件。(关于ejbc的详细使用请参见有关资料&nbsp;<BR>):&nbsp;<BR>java&nbsp;–classpath&nbsp;e:\weblogic\classes;e:\weblogic\lib\weblogicaux.jar&nbsp;<BR>-Dweblogic.home=e:\weblogic&nbsp;weblogic.ejbc&nbsp;-compiler&nbsp;javac&nbsp;std_hello.ja&nbsp;<BR>r&nbsp;ejb_helloworld.jar&nbsp;<BR>?&nbsp;设定weblogic的环境&nbsp;<BR>将最终的jar文件(本例ejb_helloworld.jar)放在weblogic的某一子目录下(例如&nbsp;<BR>:myserver),而后将.jar文件所在的路径(&nbsp;e:/weblogic/myserver/&nbsp;ejb_hel&nbsp;<BR>loworld.jar)添加到weblogic.properties文件的入口weblogic.ejb.deploy中(&nbsp;<BR>weblogic.ejb.deploy=e:/weblogic/myserver/ejb_helloworld.jar)&nbsp;<BR>?&nbsp;启动weblogic&nbsp;server,&nbsp;在其启动的控制台中可以见到相应的ejb的装载成功的&nbsp;<BR>信息。&nbsp;<BR><BR><BR>?&nbsp;客户端调用 &nbsp;<BR><BR><BR></FONT></TD></TR>
  <TR>
    <TD height=5>
      <HR align=center color=#cccccc noShade SIZE=1>
    </TD></TR></TBODY></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -