EJB学习(-)(Stateless Session Bean)

类别:Java 点击:0 评论:0 推荐:

最近时间比较空闲,打算研究一下EJB,我是用Eclipse+Lomboz+Jboss3.2.1学习的,所以不是最新的EJB规范,但应该也可以明白一些道理。

文档在http://www.tusc.com.au/tutorial/html/index.html,这是一个非常好好的文档,非常详细,

SessionBean的描述文件大致如下
         <home>au.com.tusc.session.StoreAccessHome</home>
         <remote>au.com.tusc.session.StoreAccess</remote>
         <local-home>au.com.tusc.session.StoreAccessLocalHome</local-home>
         <local>au.com.tusc.session.StoreAccessLocal</local>
         <ejb-class>au.com.tusc.session.StoreAccessSession</ejb-class>
         <session-type>Stateless</session-type>
         <transaction-type>Container</transaction-type>
简单分析如下
       Home接口为au.com.tusc.session.StoreAccessHome
       远程接口为au.com.tusc.session.StoreAccess
      本地Home接口为au.com.tusc.session.StoreAccessLocalHome  (概念上和Home接口类似,只是为了加快本机调用EJB的速度才加上的)
      本地接口为au.com.tusc.session.StoreAccessLocal
      EJB的类为au.com.tusc.session.StoreAccessSes,EJB的主要实现都在这个类里,
      本SessionBean是无状态的SessionBean
      事务类型是容器控制
最简单的EJB如下
      服务器上部署:一个Home接口,一个远程接口,一个Bean类,即
                                 au.com.tusc.session.StoreAccessHome
                                 au.com.tusc.session.StoreAccess
                                au.com.tusc.session.StoreAccessSes
      客户端部署:一个Home接口,一个远程接口,一个客户类,即
                                 au.com.tusc.session.StoreAccessHome
                                 au.com.tusc.session.StoreAccess
                                 客户类,用来访问远程的EJB
下面简单说一下调用过程
     客户端通过JNDI找到远程的Home接口,然后调用Home的create方法得到远程接口,
     然后调用此接口的方法就可以了,客户端调用的只是远程接口的方法,但服务器
     实际上是调用了EJB类的方法,就是<ejb-class></ejb-class>中的类的方法,因此
    Ejb类必须实现所有的远程接口中需要调用的方法,基本如下
              client->jndi->home->remote
              client->remote.method->bean.method
补充说明  

1、  JNDI:Java Naming and Directory Interface(Java命名以及目录接口),JNDI API被用于执行名字和目录服务,它提供了一致的模型来存取和操作企业级的资源如DNS、LDAP、本地文件系统或者应用服务器中的对象
 Jndi的好处是你无论调用的是什么资源,你的API实际上是一样的,大致形式如下
    1)创建一个InitialContext对象,其实感觉上和创建一个Socket连接类似,就是挂到一个资源上:如
        InitialContext ctx = new InitialContext();   //本机
      或
        props.put(InitialContext.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
        props.put(InitialContext.PROVIDER_URL, "jnp://127.0.0.1:1099");

           InitialContext initialContext = new InitialContext(props);
   2)查找对象
        查找数据源:DataSource ds = (DataSource)ctx.lookup(“java:comp/env/java/jdbc“);
        查找Home接口:Home home = (Home)ctx.lookup(“java:comp/env/ejb/StoreAccess“)
        
       

本文地址:http://com.8s8s.com/it/it12227.htm