商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

websphere ejb远程/本地调用总结

作者:佚名  2007-08-16

【IT168 技术文档】

    1:本地调用
    前提:
    (1)被调用者实现了LOCAL接口
    (2)调用者和被调用者应该在同一EJB模块打包文件(ear)內,由于是本地调用,也就是说调用者和被调用者应运行于同一个ejb容器内,所以,想用类似main函数调用的企图都是不能成功的(因为main函数不可能运行于ejb容器)。
    (3)调用者的部署描述(ejb-jar.xml)中有关于被调用者的Local ref的描述。

    示例如下:

    比如我有一个无状态sessionBean(被访问者):MapSessionBean,一个访问用的sessionBean:AccessBean

    其中AccessBean的ejb-jar.xml应有被调用者的Local ref描述,否则,不能进行本地调用:

<!--sp-->xml version="1.0" encoding="UTF-8"?> <!--sp-->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 id="ejb-jar_ID"> <display-name>TestEJBdisplay-name> <enterprise-beans> <session id="MapSession"> <ejb-name>MapSessionejb-name> <home>co.test.bean.MapSessionHomehome> <remote>co.test.bean.MapSessionremote> <local-home>co.test.bean.MapSessionLocalHomelocal-home> <local>co.test.bean.MapSessionLocallocal> <ejb-class>co.test.bean.MapSessionBeanejb-class> <session-type>Statelesssession-type> <transaction-type>Containertransaction-type> <ejb-local-ref id="EJBLocalRef_1165387097531"> <ejb-ref-name>ejb/MapSessionejb-ref-name> <ejb-ref-type>Sessionejb-ref-type> <local-home>co.test.bean.MapSessionLocalHomelocal-home> <local>co.test.bean.MapSessionLocallocal> <ejb-link>MapSessionejb-link> ejb-local-ref> session> <session id="AccessBean"> <ejb-name>AccessBeanejb-name> <home>co.test.bean.AccessBeanHomehome> <remote>co.test.bean.AccessBeanremote> <local-home>co.test.bean.AccessBeanLocalHomelocal-home> <local>co.test.bean.AccessBeanLocallocal> <ejb-class>co.test.bean.AccessBeanBeanejb-class> <session-type>Statelesssession-type> <transaction-type>Containertransaction-type> <ejb-local-ref id="EJBLocalRef_1165393609046"> <ejb-ref-name>ejb/MapSessionejb-ref-name> <ejb-ref-type>Sessionejb-ref-type> <local-home>co.test.bean.MapSessionLocalHomelocal-home> <local>co.test.bean.MapSessionLocallocal> <ejb-link>MapSessionejb-link> ejb-local-ref> session> enterprise-beans> ejb-jar>

    本地调用代码如下:

public void invoke() ...{ MapSessionLocalHome mapSessionLocalHome = null; MapSessionLocal mapSessionLocal = null; InitialContext initContext = null; final String JNDIName = "java:comp/env/ejb/MapSession"; try ...{ System.out.println("in invoke()!!!!!!!"); initContext = new InitialContext(); Object obj = initContext.lookup(JNDIName); mapSessionLocalHome = (MapSessionLocalHome)obj; mapSessionLocal = mapSessionLocalHome.create(); Person person = new Person("lcl",555); mapSessionLocal.setMapValue("key1", person); Person tempPerson = (Person)mapSessionLocal.getMapValue("key1"); tempPerson.setName("wangwu"); tempPerson .setAge(88); Person changedPerson = (Person)mapSessionLocal.getMapValue("key1"); System.out.println("after changed: " + changedPerson.getName() + "---" + changedPerson.getAge()); } catch(Exception e) ...{ e.printStackTrace(); } }

    值得一提的是,在本地调用中,对一个object的操作,是在同一内存块中进行的。具体到上面的代码,tempPerson的改变,已经影响到了changedPerson的值。

1 2
【内容导航】
第1页: 本地调用 第2页: 远程方法
©版权所有。未经许可,不得转载。
[责任编辑:振宇]