EJB2.0有状态SessionBean

环境:

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;}

         Hello Stateful EJB                                                  helloStatefulEJB                        helloStatefulEJB                         lavasoft.testejb20yzt.HelloStatefulHome                          lavasoft.testejb20yzt.HelloStateful                         lavasoft.testejb20yzt.HelloStatefulBean                        Stateful                         Bean                                                                                                                                                                                             helloStatefulEJB                         ejb/helloStatefulEJB                         

二、客户端开发

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 bjref = 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有状态SessionBean

相关文章:

你感兴趣的文章:

标签云: