|
2.2 EJB开发
在开发这个HelloWorleEJB之前,首先在工作目录C:\work中为这个实例创建一个子目录。本章的实例目录是C:\work\hello。 如图2-1所示的EJB应用开发过程图。这个图是笔者多年开发经验的结晶,希望聪明的读者不要错过。EJB开发基本上都遵循这个过程,从总体上说,可以分成
五个步骤: (1)EJB程序代码编写 (2)EJB程序代码编译 (3)EJB部署描述文件编写 (4)打包 (5)编译生成容器代码 每个步骤使用的工具不同,生成相应的阶段产品。关于开发过程的理解和掌握读者随着后面讨论的深入逐渐加深。
 图2-1
EJB开发过程示意图
2.2.1 EJB代码编写
HelloWorld EJB程序代码包括的接口和类名,如表2-1所示。
表2-1 HelloWorld
EJB程序文件说明 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
接口或类名 类型 文件名 功能 所在路径 ─────────────────────────────── HelloHome 主接口 HelloHome.java 定义创建方法 c:\work\hello Hello 远程接口 Hello.java 定义业务逻辑方法 c:\work\hello HelloBean Bean类 HelloBean.java 实现业务逻辑 c:\work\hello HelloClient客户端类 HelloClientjava 测试程序 c:\work\hello
─────────────────────────────── 1.编写主接口程序 在文本编辑器中编辑HelloHome.java文件,并保存在C:\work\hello目录下,其代码为:
//本接口需要引入的类或接口 import
java.rmi.RemoteException; import
javax.ejb.CreateException; import javax.ejb.EJBHome;
//定义主接口,必须继承EJBHome public interface HelloHome extends
EJBHome { //定义EJB创建方法 Hello create() throws
CreateException, RemoteException; }
2.编写远程接口程序 在文本编辑器中编辑Hello.java文件,并保存在C:\work\hello目录下。Hello.java文件的代码为:
//本接口需要引入的类或接口 import javax.ejb.EJBObject; import
java.rmi.RemoteException;
//定义远程接口,必须继承EJBObject public interface Hello extends
EJBObject { //定义业务逻辑方法 public String
sayHello() throws RemoteException; }
3.编写Bean类实现程序 在文件编辑器中编辑HelloBean.java文件,并保存在C:\work\hello目录下。HellloBean.java文件的代码为:
//本类需要引入的类或接口 import
javax.ejb.CreateException; import
javax.ejb.SessionBean; import javax.ejb.SessionContext;
//实现业务逻辑,必须实现SessionBean接口 public class HelloBean
implements SessionBean { //这是个会话EJB,声明会话上下文 private
SessionContext ctx; //声明字符串 private String
words; //接口SessionBean中定义的方法,必须实现 public void
setSessionContext(SessionContext ctx) { this.ctx =
ctx; } //接口SessionBean中定义的方法,必须实现 public void
ejbActivate()
{ } //接口SessionBean中定义的方法,必须实现 public void
ejbPassivate()
{ } //接口SessionBean中定义的方法,必须实现 public void
ejbRemove() { } //和主接口定义对应的方法,必须实现 public void
ejbCreate() throws CreateException { words = "Hello
World"; } //供客户端调用的业务逻辑方法,这里只简单的打印字符串,并把字符串返回到客户端 public
String sayHello() { System.out.println("I am in an EJB
of Server ."+words); return words; } }
2.2.2 EJB代码编译
首先打开命令窗口,进入C:\work\hello目录,运行环境变量脚本程序: c:\work\hello>c:\work\setEnv 建立build目录: c:\work\hello>md
build 执行编译命令: c:\work\hello>java -d build Hello.java
HelloHome.java HelloBean.java 其中:-d build
表示编译生成的class文件放在build目录中。
2.2.3 EJB部署文件编写
部署文件是EJB的重要组成部分。简单地说,部署文件就是EJB的说明文件,这个文件由服务器容器使用,服务器根据部署文件的说明来管理EJB。 EJB部署文件是标准的XML文件,必须遵守XML的语法规则。此外,还要遵守相关的DTD规则。 部署文件到少有两个文件ejb-jar.xml和weblogic-ejb-jar.xml。前者为EJB自身的一些特征,如名称、组成等:后者是和EJB部署相关的描述。 编写部署文件: (1)在文件编辑器中编辑ejb-jar.xml文件,并保存在C:\work\hello目录下。ejb-jar.xml文件的内容为:
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD
Enterprise JavaBeans 1.1//EN'
'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'> <!--EJB说明文件--> <ejb-jar> <small-icon>images/green-cube.gif</small-icon> <enterprise-beans> <!--定义会话EJB--> <session> <small-icon>images/orange-cube.gif</small-icon> <!--定义会话EJB名--> <ejb-name>MyFirstEJB</ejb-name> <!--定义会话EJB主接口名--> <home>HelloHome</home> <!--定义会话EJB远程接口名--> <remote>Hello</remote> <!--定义会话EJB实现类名--> <ejb-class>HelloBean</ejb-class> <!--定义会话EJB类型--> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> <!--定义会话EJB装配描述--> <assembly-descriptor> <container-transaction> <method> <ejb-name>MyFirstEJB</ejb-name> <method-intf>Remote</method-intf> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>
(2)在文件编辑器中编辑weblogic-ejb-jar.xml文件,并保存在C:\work\hello目录下。weblogic-ejb-jar.xml文件的内容为:
<?xml version="1.0"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD
WebLogic 5.1.0 EJB//EN'
'http://www.bea.com/servers/wls510/dtd/weblogic-ejb-jar.dtd'> <!--EJB部署说明文件--> <weblogic-ejb-jar> <weblogic-enterprise-bean> <!--EJB名--> <ejb-name>MyFirstEJB</ejb-name> <!--定义EJB最大缓冲池--> <caching-descriptor> <max-beans-in-free-pool>100</max-beans-in-free-pool> </caching-descriptor> <!--定义EJB
jndi名称--> <jndi-name>HelloHome</jndi-name> </weblogic-enterprise-bean> </weblogic-ejb-jar>
2.2.4 打包
把上面开发的所有文件打成jar文件包。这些文件包括一三个类文件:Hello.class、HelloHome.class、HelloBean.class和部署文件:ejb-jar.xml,weblogic-ejb-jar.xml。打包时,文件放置的位置是严格要求的。具体为:*.class文件放在当前目录(即C:\work\hello\build目录下),部署文件必须入在下一级目录Meta-inf中(即C:\work\hello\build\Meta-inf目录下)。如果EJB包含图像文件,则图像文件必须在build目录的下一级目录images中(即C:\work\hello\build\images目录下)。 具体操作步骤为: (1)在build目录中创建Meta-inf目录,当前路径为C:\work\hello,执行: c:\work\hello>md
build\Meta-inf (2)把部署文件拷贝到hello\Meta-inf目录下: c:\work\hello>copy
*.xml build\Meta-inf (3)执行: c:\work\hello>md
build\images c:\work\hello>copy *.gif
build\images 当然,本例中没有使用图像文件,所以可以免去此步骤。 (4)用jar命令在build目录下打包。当前路径是c:\work\hello,运行: c:\work\hello>cd
build c:\work\hello\bulid>jar cv0f std_myfirstejb_hello.jar
META-INF *.class
images c:\work\hello\build>cd.. 其中:jar是Jdk中的打包命令:cv0f是命令参数;std_myfirstejb_hello.jar是生成的文件名,由用户指定。 命令执行完后,在目录build中应该生成文件std_myfirstejb_hello.jar。 至此,打包完成。
2.2.5 编译生成窗口代码
Weblogic Server提供了编译生成容器代码的工具,它是一个java程序weblogic.ejbc。在命令行窗口中执行:
c:\work\hello>java weblogic.ejbc -compiler javac build\std_myfirstejb_hello.jar
build\myfirstejb_hello.jar
可以看出ejbc把std_myfirstejb_hello.jar文件编译成myfirstejb_hello.jar,它包括了Weblogic
Server平台可以识别的ejb容器代码。
如果运行成功,则在build目录下产生myfirstejb_hello.jar文件。
|