|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2007-02-12 关键字: ejb调用总结
示例如下: 比如我有一个无状态sessionBean(被访问者):MapSessionBean,一个访问用的sessionBean:AccessBean 其中AccessBean的ejb-jar.xml应有被调用者的Local ref描述,否则,不能进行本地调用: 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 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的值。 2:远程方法调用:
public static void main(String[] args)![]() ...{ MapSessionHome mapSessionHome = null; MapSession mapSession = null; InitialContext initContext = null;![]() final String JNDIName = "ejb/co/test/bean/MapSessionHome"; ![]() try ...{ System.out.println("in MapSessionClient!!!!!!!"); initContext = new InitialContext(); Object obj = initContext.lookup(JNDIName); mapSessionHome = (MapSessionHome) PortableRemoteObject.narrow( obj, MapSessionHome.class); mapSession = mapSessionHome.create(); Person person1 = new Person("zhangsan", 100);![]() mapSession.setMapValue("key1",person1); Person tempPerson = (Person)mapSession.getMapValue("key1"); tempPerson.setName("lisi"); tempPerson.setAge(500); System.out.println("before changed: " + tempPerson.getName() + "---" + tempPerson.getAge()); Person changedPerson = (Person)mapSession.getMapValue("key1"); System.out.println("after changed: " + changedPerson.getName() + "---" + changedPerson.getAge());![]() ![]() } catch (Exception e) ...{ e.printStackTrace(); System.exit(0); } }值得一提的是,在远程调用中,对一个object的操作,经过了corba处理,是不在同一内存块中进行的。具体到上面的代码,tempPerson的改变,不影响changedPerson的值(其实理所当然,一个是远程的对象,你个是本地内存对象)。 3:远程调用:适用于不在同一机器的远程调用: Initial Factory: (INITIAL_CONTEXT_FACTORY): com.ibm.websphere.naming.WsnInitialContextFactory Provider URL: (PROVIDER_URL): iiop://server ip:2809/ 其中:server ip为ejb容器ip地址.必须注意:在websphere服务器的配置中,有一项orb bootstrap setting的配置,它的默认配置如下: public static void main(String[] args)![]() ...{ System.out.println("in MapSessionRemoteTest"); MapSessionHome mapSessionHome = null; MapSession mapSession = null; String JNDIName = "ejb/co/test/bean/MapSessionHome"; Properties p = new Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory"); p.put(Context.PROVIDER_URL,"iiop://192.168.0.81:2809/"); InitialContext initContext; try![]() ...{ initContext = new InitialContext(p); Object obj = initContext.lookup(JNDIName); mapSessionHome = (MapSessionHome) PortableRemoteObject.narrow( obj, MapSessionHome.class); mapSession = mapSessionHome.create(); Person person1 = new Person("zhangsan", 100); mapSession.setMapValue("key1",person1); Person tempPerson = (Person)mapSession.getMapValue("key1"); tempPerson.setName("lisi"); tempPerson.setAge(500); System.out.println("before changed: " + tempPerson.getName() + "---" + tempPerson.getAge()); Person changedPerson = (Person)mapSession.getMapValue("key1"); System.out.println("after changed: " + changedPerson.getName() + "---" + changedPerson.getAge()); } catch (Exception e)![]() ...{ // TODO Auto-generated catch block e.printStackTrace(); } }
p 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。 |
|
| 返回顶楼 | |
|
时间:2007-03-27
终于找到ejb远程(两台计算机之间的访问)调用方法.
谢谢你了,顶一下!! |
|
| 返回顶楼 | |
浏览 1652 次





MapSessionLocalHome mapSessionLocalHome 
}
}