编写EJB描述符文件
为了将该Session
Bean发布到Weblogic9中,我们还需要提供两个配置文件:ejb-jar.xml和weblogic-ejb-jar.xml,作者提供的演示实例中,这两个文件的内容如下,开发者可以根据自己的实际环境进行调整。
ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"
version="2.1">
<display-name>Sample Kodo EJB</display-name>
<enterprise-beans>
<session>
<ejb-name>BookEJB</ejb-name>
<home>org.vivianj.kodo.examples.ejb.stateless.BookHome</home>
<remote>org.vivianj.kodo.examples.ejb.stateless.BookRemote</remote>
<ejb-class>org.vivianj.kodo.examples.ejb.stateless.BookBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>BookEJB</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
weblogic-ejb-jar.xml<?xml version="1.0"?>
<weblogic-ejb-jar
xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:j2ee="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90
http://www.bea.com/ns/weblogic/90/weblogic-ejb-jar.xsd">
<weblogic-enterprise-bean>
<ejb-name>BookEJB</ejb-name>
<jndi-name>ejb/kodo/book</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
打包部署
基于Kodo
EJB开发的EJB打包和通常的EJB打包没有什么特别,部署过程也没有什么特别,比较简单的方式是使用配置工具创建新的域后,将打包好的EJB
jar文件直接拷贝到域目录下的autodeploy目录下。
完整地打包部署过程这里不再赘述,如果大家还不是十分熟悉,请大家参考Weblogic
Server的在线帮助文档http://edocs.bea.com/wls/docs91/index.html。
在这里要给大家介绍的是创建Weblogic9域后如何配置Kodo的两部分内容:
- 安装Kodo
Windows平台下创建Weblogic9域后,可以在该域所在目录下找到bin目录下的setDomainEnv.cmd文件。打开该文件,在其中找到set
PRE_CLASSPATH=这一行,这里假如地jar文件将被加入Weblogic9服务器的启动CLASSPATH中,因此我们把%KODO_HOME%/lib目录下所有jar文件增加到PRE_CLASSPATH中。下面是作者的设置情况(没有全部填写完整,请开发者根据实际情况填写完整)。
set
PRE_CLASSPATH= F:/OpenSource/kodo-4.0.0EA4/lib/kodo.jar;
F:/OpenSource/kodo-4.0.0EA4/lib/jta-spec1_0_1.jar;F:/OpenSource/kodo-4.0.0EA4/lib/jca1.0.jar;F:/OpenSource/kodo-4.0.0EA4/lib/jdo-2.0.jar;
可选择的,你可以将数据库服务器的驱动jar和其他应用中需要的jar文件放在这个变量下。
- 提供Kodo的license
Kodo使用时需要提供License文件,在《Kodo
EJB:符合EJB3规范的持久层框架》一文中,我们知道Kodo的License信息保存在应用的META-INF目录中的kodo.xml文件中,和应用一起使用,可是在JAVA
EE环境下,我们是将kodo.persistence.EntityManagerFactoryImpl的实例绑定到JNDI服务上,这个过程是服务器完成的,将License放在EJB包中并不能让服务器获取License的信息,查看Kodo的帮助文档,也没有看到相应的实施指南,不过作者经过测试后发现下面的方法可以完成这部分工作。
- 准备一个license.jar文件
license.jar中包含META-INF目录,该目录下包含有提供Kodo
License的kodo.xml文件。license.jar文件的结构如下:

- 将该jar文件加入到Weblogic域的CLASSPATH中
请参考前面一步“安装Kodo”的步骤将license.jar文件加入Weblogic域的CLASSPATH中。
测试
现在,启动服务器,编写段简单的测试代码,看看EJB是否能够正常开始工作,下面这段代码可以用于测试从EJB中查找符合要求的Book对象并打印它的name属性。
/* 提供Weblogic服务器的信息 */
Hashtable<String,String> h = new Hashtable<String,String>();
h.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, "t3://localhost:7001");
/* 获取指定服务器的上下文路径 */
Context ctx = new InitialContext(h);
/* 从JNDI中获取Session Bean的home接口 */
Object o = ctx.lookup("ejb/kodo/book");
BookHome home = (BookHome) PortableRemoteObject.narrow(o,BookHome.class);
/* 获得Session Bean的remote接口 */
BookRemote remote = home.create();
/* 调用业务方法 */
System.out.println(remote.getBookById(1).name);
执行客户端的时候,请将%KODO_HOME%/lib目录下的jar文件和Weblogic服务器安装目录下的server/lib/weblogic.jar文件都放在CLASSPATH中。
总结
在EJB3的标准中,EJB3应用既可以用于Java SE环境中,同时还可以用于Java EE环境下使用。Kodo
EJB中提供了两种不同的方式支持在Java
EE环境下使用:JCA和JNDI,其中JCA方式比较简单,而JNDI方式则能够提供更好的灵活性。
在本文中,作者以一个简单的例子说明了在Weblogic9中如何将Kodo
EJB中kodo.persistence.EntityManagerFactoryImpl的实例绑定到JNDI上,通过JNDI访问Kodo
EJB应用中的持久化类。
参考资源:
EJB3规范:http://jcp.org/aboutJava/communityprocess/pfd/jsr220/index.html JDO2规范:http://jcp.org/aboutJava/communityprocess/pfd/jsr243/index.html Kodo在线文档:http://solarmetric.com/kodo/Documentation/4.0.0EA4/docs/full/html/index.html Weblogic9在线文档:http://edocs.bea.com/wls/docs91/index.html
下载资源:kodoejb-JavaEE.jar
133
|