EJB 2.1 Session Bean实例

最近一次去中软进行项目集成的时候,对方要求我方提供一个简单的EJB例子,并利用编写的分布式部署工具,将其部署到三家国产中间件平台中,测试是否能正确的运行。

首先就是为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中,方便项目的最后验收测试。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值