EJB 2.1 Session Bean实例
2011-11-04 18:05
330 查看
最近一次去中软进行项目集成的时候,对方要求我方提供一个简单的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中,方便项目的最后验收测试。
首先就是为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实例
- JBossIDE Eclispe 开发EJB2.1实例[原创]
- JBossIDE Eclispe 开发EJB2.1实例
- 一个简单的EJB-Session Bean实例
- EJB2.1开发实例
- EJB3+JBoss5+Myeclipse9创建HelloWorld实例
- 实例解析Struts 2.1与Sping、Hibernate集成
- EJB---->Session Bean 的生命周期
- EJB的编程规则之Session Bean
- 小试牛刀:Eclipse3.1.1中开发EJB 3.0 Project下的Session Bean
- Eclipse For Java EE + JBoss开发 EJB 实例
- EJB系列(一)——Session Bean基础介绍
- EJB3+JBoss5+Myeclipse9创建HelloWorld实例
- java EJB3.0组件开发实例模型参考
- 【EJB】会话Bean(Session Bean)
- akka 定时任务实例for play2.1
- EJB的编程规则(1)之Session Bean
- 《智能设备艺术、科技、文化作品实例开发与设计》android开发系列介绍---2.1棋类作品:华容道
- EJB3 session bean(会话bean)
- 小试牛刀:Eclipse3.2.1中开发EJB 3.0 Project下的Session Bean