EJB2.0有状态SessionBean
2010-03-31 16:31
253 查看
[align=center]EJB2.0有状态SessionBean[/align]
环境:
JBoss 4.0.2
JDK1.5
IDEA8.1.4
一、EJB开发
package lavasoft.testejb20yzt;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
/**
* Bean类
* 所有具体的业务逻辑都在此类里面,此类不抛出远程异常
*
* @author leizhimin 2010-3-31 15:26:53
*/
public class HelloStatefulBean implements SessionBean {
private SessionContext context;
private String someOne;
/**
* 业务方法
*
* @return Hello的消息
*/
public String sayHello() {
System.out.println("HelloStatefulBean: sayHello() is called!");
return "Hello, " + someOne + "!";
}
/**
* 必须有这个方法,这是EJB的一条原则,这个方法不是来自SessionBean接口的
* 这只能是一个有状态的bean,因为无状态的bean除了无参数的create方法外,不能有其他的创建方法
*/
public void ejbCreate(String someOne) {
System.out.println("HelloStatefulBean: ejbCreate(String someOne) is called!");
this.someOne = someOne;
}
//-------下面四个方法是来自SessionBean的,必须写出来,但没啥用-------
public void ejbActivate() {
System.out.println("HelloStatefulBean: ejbActivate() is called!");
}
public void ejbPassivate() {
System.out.println("HelloStatefulBean: ejbPassivate() is called!");
}
public void ejbRemove() {
System.out.println("HelloStatefulBean: ejbRemove() is called!");
}
public void setSessionContext(SessionContext sessionContext) {
System.out.println("HelloStatefulBean: setSessionContext() is called!");
context = sessionContext;
}
}
package lavasoft.testejb20yzt;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
/**
* 组件接口
* 所有的业务方法都要在此接口中声明
*
* @author leizhimin 2010-3-31 15:31:10
*/
public interface HelloStateful extends EJBObject {
/**
* 业务方法,组件接口中的业务方法必须抛出RemoteException
*
* @return
* @throws java.rmi.RemoteException
*/
public String sayHello() throws RemoteException;
}
package lavasoft.testejb20yzt;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
import java.rmi.RemoteException;
/**
* Home接口
* Home接口必须扩展EJBHome或者EJBLocalHome接口
* 客户使用Home接口来请求组件接口的一个引用
* 可以将Home接口看做是一个工厂,它能制造Bean的引用个,而且能向客户分配bean引用
*
* @author leizhimin 2010-3-31 15:32:06
*/
public interface HelloStatefulHome extends EJBHome {
public HelloStateful create(String someOne) throws CreateException, RemoteException;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN'
'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
<display-name>Hello Stateful EJB</display-name>
<enterprise-beans>
<session>
<display-name>helloStatefulEJB</display-name>
<ejb-name>helloStatefulEJB</ejb-name>
<home>lavasoft.testejb20yzt.HelloStatefulHome</home>
<remote>lavasoft.testejb20yzt.HelloStateful</remote>
<ejb-class>lavasoft.testejb20yzt.HelloStatefulBean</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Bean</transaction-type>
<security-identity>
<description></description>
<use-caller-identity></use-caller-identity>
</security-identity>
</session>
</enterprise-beans>
</ejb-jar>
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>helloStatefulEJB</ejb-name>
<jndi-name>ejb/helloStatefulEJB</jndi-name>
</session>
</enterprise-beans>
</jboss>
二、客户端开发
package lavasoft.client;
import lavasoft.testejb20yzt.HelloStateful;
import lavasoft.testejb20yzt.HelloStatefulHome;
import javax.ejb.CreateException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import java.rmi.RemoteException;
import java.util.Properties;
/**
* 客户端代码
* 客户端会依赖组件接口和Home接口
*
* @author leizhimin 2010-3-31 15:54:20
*/
public class TestStatefulSessionBeanClient {
public static void main(String[] args) throws NamingException, CreateException, RemoteException {
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
//初始化JNDI上下文环境,因为客户端不知道JBOSS的环境
InitialContext ctx = new InitialContext(props);
//检索指定的对象
Object objref = ctx.lookup("ejb/helloStatefulEJB");
//强制转换为所需类型的对象
HelloStatefulHome home = (HelloStatefulHome) PortableRemoteObject.narrow(objref, HelloStatefulHome.class);
//通过home对象创建一个组件接口对象
HelloStateful hello = home.create("StatefulEJB");
//通过组件接口对象调用业务方法
String msg = hello.sayHello();
System.out.println(msg);
}
}
客户端调用结果:
jboss控制台输出:
在此,没有使用本地接口,本地接口规则如下:
本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/290058
环境:
JBoss 4.0.2
JDK1.5
IDEA8.1.4
一、EJB开发
package lavasoft.testejb20yzt;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
/**
* Bean类
* 所有具体的业务逻辑都在此类里面,此类不抛出远程异常
*
* @author leizhimin 2010-3-31 15:26:53
*/
public class HelloStatefulBean implements SessionBean {
private SessionContext context;
private String someOne;
/**
* 业务方法
*
* @return Hello的消息
*/
public String sayHello() {
System.out.println("HelloStatefulBean: sayHello() is called!");
return "Hello, " + someOne + "!";
}
/**
* 必须有这个方法,这是EJB的一条原则,这个方法不是来自SessionBean接口的
* 这只能是一个有状态的bean,因为无状态的bean除了无参数的create方法外,不能有其他的创建方法
*/
public void ejbCreate(String someOne) {
System.out.println("HelloStatefulBean: ejbCreate(String someOne) is called!");
this.someOne = someOne;
}
//-------下面四个方法是来自SessionBean的,必须写出来,但没啥用-------
public void ejbActivate() {
System.out.println("HelloStatefulBean: ejbActivate() is called!");
}
public void ejbPassivate() {
System.out.println("HelloStatefulBean: ejbPassivate() is called!");
}
public void ejbRemove() {
System.out.println("HelloStatefulBean: ejbRemove() is called!");
}
public void setSessionContext(SessionContext sessionContext) {
System.out.println("HelloStatefulBean: setSessionContext() is called!");
context = sessionContext;
}
}
package lavasoft.testejb20yzt;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
/**
* 组件接口
* 所有的业务方法都要在此接口中声明
*
* @author leizhimin 2010-3-31 15:31:10
*/
public interface HelloStateful extends EJBObject {
/**
* 业务方法,组件接口中的业务方法必须抛出RemoteException
*
* @return
* @throws java.rmi.RemoteException
*/
public String sayHello() throws RemoteException;
}
package lavasoft.testejb20yzt;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
import java.rmi.RemoteException;
/**
* Home接口
* Home接口必须扩展EJBHome或者EJBLocalHome接口
* 客户使用Home接口来请求组件接口的一个引用
* 可以将Home接口看做是一个工厂,它能制造Bean的引用个,而且能向客户分配bean引用
*
* @author leizhimin 2010-3-31 15:32:06
*/
public interface HelloStatefulHome extends EJBHome {
public HelloStateful create(String someOne) throws CreateException, RemoteException;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN'
'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
<display-name>Hello Stateful EJB</display-name>
<enterprise-beans>
<session>
<display-name>helloStatefulEJB</display-name>
<ejb-name>helloStatefulEJB</ejb-name>
<home>lavasoft.testejb20yzt.HelloStatefulHome</home>
<remote>lavasoft.testejb20yzt.HelloStateful</remote>
<ejb-class>lavasoft.testejb20yzt.HelloStatefulBean</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Bean</transaction-type>
<security-identity>
<description></description>
<use-caller-identity></use-caller-identity>
</security-identity>
</session>
</enterprise-beans>
</ejb-jar>
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>helloStatefulEJB</ejb-name>
<jndi-name>ejb/helloStatefulEJB</jndi-name>
</session>
</enterprise-beans>
</jboss>
二、客户端开发
package lavasoft.client;
import lavasoft.testejb20yzt.HelloStateful;
import lavasoft.testejb20yzt.HelloStatefulHome;
import javax.ejb.CreateException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import java.rmi.RemoteException;
import java.util.Properties;
/**
* 客户端代码
* 客户端会依赖组件接口和Home接口
*
* @author leizhimin 2010-3-31 15:54:20
*/
public class TestStatefulSessionBeanClient {
public static void main(String[] args) throws NamingException, CreateException, RemoteException {
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
//初始化JNDI上下文环境,因为客户端不知道JBOSS的环境
InitialContext ctx = new InitialContext(props);
//检索指定的对象
Object objref = ctx.lookup("ejb/helloStatefulEJB");
//强制转换为所需类型的对象
HelloStatefulHome home = (HelloStatefulHome) PortableRemoteObject.narrow(objref, HelloStatefulHome.class);
//通过home对象创建一个组件接口对象
HelloStateful hello = home.create("StatefulEJB");
//通过组件接口对象调用业务方法
String msg = hello.sayHello();
System.out.println(msg);
}
}
客户端调用结果:
jboss控制台输出:
在此,没有使用本地接口,本地接口规则如下:
本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/290058
相关文章推荐
- ejb2.0---无状态会话bean
- EJB - 无状态SessionBean简单示例
- Ejb-有状态&无状态SessionBean
- EJB2.0的JMS
- 有状态的EJB对象和无状态的EJB对象
- Spring和EJB的竞争发展历史(2007),Spring1.2/2.0移植到Spring2.5 zt
- EJB---->改变sessionbean的JNDI名称
- (1)EJB3.0 简介以及开发第一个无状态的会话bean 以及 客户端【关于JNDI】
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- [导入]Ajax 实现在WebForm中拖动控件并即时在服务端保存状态数据 (Asp.net 2.0)(示例代码下载)
- 如何定义无状态会话类型EJB组件
- Ajax 实现在WebForm中拖动控件并即时在服务端保存状态数据 (Asp.net 2.0)(示例代码下载)
- Hadoop 2.0 – HA功能中ZKFC对NN状态的控制
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- Weblogic 连接池 + Oracle + Servlet" 的无状态SessionBean 全攻略
- DiscuzX!1.5/2.0 新版状态字段解释
- EJB 2.0:“本地”接口和“远程”接口
- EJB学习笔记五(SessionBean的生命周期)
- ASP.NET 2.0的视图状态持久性机制
- 按要求进行决定是否有状态的EJB(图)