EJB 2.1 Session Bean实例
2010-11-15 16:41
302 查看
最近一次去中软进行项目集成的时候,对方要求我方提供一个简单的EJB例子,并利用编写的分布式部署工具,将其部署到三家国产中间件平台中,测试是否能正确的运行。
首先就是为OnceAS编写一个基于EJB 2.1的Session Bean实例,并用JBOSS做实验来测试EJB例子的正确性,采用的JBoss版本为5.1.0GA。
编写的EJB例子名为Fibonacci,它主要包括一个返回输入整数的fibonacci数的函数,并最终通过远程的客户端程序进行调用。
一、EJB实例本身主要分为4个部分:
1、远程接口Fibonacci.java
2、本地接口FibonacciHome.java
这里必须要抛出这两个异常,否则会导致EJB无法被JBoss识别。
3、Session Bean的实现FibonacciBean.java
4、部署描述文件ejb-jar.xml
二、完成上述4个部分之后,就需要为JBoss编写其专有的部署描述文件jboss.xml,主要是为这个Sesion Bean指明jndi,如下所示:
这样JBoss在运行这个实例后,远程就可以通过jndi-name,即FibonacciHome来查找到这个EJB实例。
三、将第一第二部分在一起打包成EJBSample.jar,并放到JBoss的部署目录\server\default\deploy下,顺利的话,启动JBoss,并访问控制台,就可以发现这个EJB实例已经部署上了,如下图所示:
四、测试的最后一部分工作,就是编写一个客户端程序,来测试这个EJB的函数是否能被正常访问。测试程序如下:
运行结果为:
对于测试程序,需要注意以下几点,首先你需要配置JBoss的命名服务的端口,默认为1099,然后通过jndi来查找到这个EJB实例。然后引入EJB的本地和远程端口,并通过RMI来访问这个EJB实例的函数。
五、实验证明,这个EJB实例编写是正确的,它可以运行在JBoss中,下一步就需要将其移植到OnceAS中,方便项目的最后验收测试。
首先就是为OnceAS编写一个基于EJB 2.1的Session Bean实例,并用JBOSS做实验来测试EJB例子的正确性,采用的JBoss版本为5.1.0GA。
编写的EJB例子名为Fibonacci,它主要包括一个返回输入整数的fibonacci数的函数,并最终通过远程的客户端程序进行调用。
一、EJB实例本身主要分为4个部分:
1、远程接口Fibonacci.java
package com.once.ejbsample; import java.rmi.RemoteException; import javax.ejb.EJBObject; /** * Remote interface of this EJB sample * * @author hehai */ public interface Fibonacci extends EJBObject{ public long getFibonacci(int n) throws RemoteException; }
2、本地接口FibonacciHome.java
package com.once.ejbsample; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; /** * Home interface of this EJB sample * * @author hehai */ public interface FibonacciHome extends EJBHome{ Fibonacci create() throws RemoteException, CreateException; }
这里必须要抛出这两个异常,否则会导致EJB无法被JBoss识别。
3、Session Bean的实现FibonacciBean.java
package com.once.ejbsample; import javax.ejb.SessionBean; import javax.ejb.SessionContext; /** * Bean implementation of this EJB sample * * @author hehai */ public class FibonacciBean implements SessionBean{ public long getFibonacci(int n) { if (n < 0) { return -1; } else if (n == 0) { return 1; } else if (n == 1) { return 1; } else { return getFibonacci(n - 1) + getFibonacci(n - 2); } } public void ejbCreate() { System.out.println("Fibonacci Bean Created"); } public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {} public void setSessionContext(SessionContext ctx) {} }
4、部署描述文件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"> <enterprise-beans> <session> <ejb-name>Fibonacci</ejb-name> <home>com.once.ejbsample.FibonacciHome</home> <remote>com.once.ejbsample.Fibonacci</remote> <ejb-class>com.once.ejbsample.FibonacciBean</ejb-class> <session-type>Stateful</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> </ejb-jar>
二、完成上述4个部分之后,就需要为JBoss编写其专有的部署描述文件jboss.xml,主要是为这个Sesion Bean指明jndi,如下所示:
<?xml version="1.0" encoding="UTF-8"?> <jboss> <enterprise-beans> <session> <ejb-name>Fibonacci</ejb-name> <jndi-name>FibonacciHome</jndi-name> </session> </enterprise-beans> </jboss>
这样JBoss在运行这个实例后,远程就可以通过jndi-name,即FibonacciHome来查找到这个EJB实例。
三、将第一第二部分在一起打包成EJBSample.jar,并放到JBoss的部署目录\server\default\deploy下,顺利的话,启动JBoss,并访问控制台,就可以发现这个EJB实例已经部署上了,如下图所示:
四、测试的最后一部分工作,就是编写一个客户端程序,来测试这个EJB的函数是否能被正常访问。测试程序如下:
import javax.naming.Context; import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; import com.once.ejbsample.Fibonacci; import com.once.ejbsample.FibonacciHome; /** * Test program of this EJB sample * * @author hehai */ public class FibonacciClient { public static void main(String[] args) { try { java.util.Properties p = new java.util.Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); p.put(Context.URL_PKG_PREFIXES, "jboss.naming:org.jnp.interfaces"); p.put(Context.PROVIDER_URL, "localhost:1099"); Context jndiContext = new InitialContext(p); Object ref = jndiContext.lookup("FibonacciHome"); FibonacciHome home = (FibonacciHome) PortableRemoteObject.narrow( ref, FibonacciHome.class); Fibonacci ff = home.create(); long result; for (int i = 10; i >= -1; i--) { result = ff.getFibonacci(i); System.out.println("Fibonacci of [" + i + "] is [" + result + "]"); } } catch (java.rmi.RemoteException re) { re.printStackTrace(); } catch (javax.ejb.CreateException ce) { ce.printStackTrace(); } catch (Throwable t) { t.printStackTrace(); } } }
运行结果为:
Fibonacci of [10] is [89] Fibonacci of [9] is [55] Fibonacci of [8] is [34] Fibonacci of [7] is [21] Fibonacci of [6] is [13] Fibonacci of [5] is [8] Fibonacci of [4] is [5] Fibonacci of [3] is [3] Fibonacci of [2] is [2] Fibonacci of [1] is [1] Fibonacci of [0] is [1] Fibonacci of [-1] is [-1]
对于测试程序,需要注意以下几点,首先你需要配置JBoss的命名服务的端口,默认为1099,然后通过jndi来查找到这个EJB实例。然后引入EJB的本地和远程端口,并通过RMI来访问这个EJB实例的函数。
五、实验证明,这个EJB实例编写是正确的,它可以运行在JBoss中,下一步就需要将其移植到OnceAS中,方便项目的最后验收测试。
相关文章推荐
- EJB 2.1 Session Bean实例
- 一个简单的EJB-Session Bean实例
- EJB2.1开发实例
- JBossIDE Eclispe 开发EJB2.1实例[原创]
- JBossIDE Eclispe 开发EJB2.1实例
- ejb Session Bean 类中调用普通类中方法报错
- SeesionBean work with EntityBean of EJB2.1
- SenchaTouch2.1调用百度地图实例
- JSP+STRUTS+EJB+DAO+HIBERNATE实例
- ejb 学习笔记--HelloWorld入门实例
- 实例解析Struts 2.1与Sping、Hibernate集成
- EJB开发实例CoursesOnline 1st Edition
- 用 eclipse wtp 新建 ejb (2.1) 的问题。
- Java EE 远程客户的访问EJB实现实例(Jboss wildfly)
- EJB2.1学习系列二:session beans
- ejb3(session bean)会话bean的使用!!!
- EJB---->Session Bean 的生命周期
- EJB中映射关系实例
- EJB3.0实例教程多对多映射
- java网络编程实例2.1——用阻塞+线程池实现的文件传输客户端