1、在应用中调用EJB,而不同的JDK结果却是不同的。机器环境的path是SUN的JDK.
在cmd中: java -classpath "F:\jbuid_project\test\classes;E:\WebSphere\AppServer\lib\namingclient.jar;E:\WebSphere\AppServer\properties;" test.STestEJBTestClient1
会发生异常:
javax.naming.NamingException: Failed to initialize the ORB [Rootxception is org.omg.CORBA.INITIALIZE: can't instantiate default ORB implementation com.ibm.CORBA.iiop.ORB vmcid: 0x0 minor code: 0 completed: No]
2、IBM支持的ORB与SUN的不一致,导致用SUN的JRE运行App不能正常init ORB对象。如果用IBM的JRE就会没有问题。
E:\WebSphere\AppServer\java\bin\java -classpath "F:\jbuid_project\test\classes;E:\WebSphere\AppServer\lib\namingclient.jar;E:\WebSphere\AppServer\properties;" test.STestEJBTestClient1
3、namingclient.jar 依赖的包基本上涵盖了E:\WebSphere\AppServer\lib下的所有的包。
4、在IBM的JRE中,jre\lib下有文件:orb.properties,其中有一项:com.ibm.CORBA.LocalHost = XueYb.Astrum.NETS.com(本机名)不太明白是什么意思?但是如果安装WS后,发生过机器名的更改,而这一项没有改的话,App就不能从JNDI的lookup中得到返回,应用会总是等待。可能是因为返回的位置是由这个属性决定的。如果不正确,JNDI返回的对象发送到一个不存在的主机为止,而App却总是在等待返回的结果。
5、应用中的关键代码 :
Hashtable environment = new Hashtable();
environment.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
environment.put(Context.PROVIDER_URL, "corbaloc:iiop:localhost:2809");
//environment.put(Context.PROVIDER_URL, "iiop://localhost:2809"); //可选,同“corbaloc:iiop:localhost:2809”的效果一样。
environment.put(Context.URL_PKG_PREFIXES, "com.ibm.ws.naming"); //可选
//environment.put("com.ibm.CORBA.LocalHost","P-XueYb.Astrum.NETS.com"); //可以不设,如果orb.properties属性正确。
Context context= new InitialContext(environment);
log("get naming context:" + context.toString());
Object ref = context.lookup("STestEJB"); //“STestEJB”发布到WebSphere的EJB的JNDI
log("look up jndi name");
sTestEJBHome = (STestEJBHome) PortableRemoteObject.narrow(ref,STestEJBHome.class);
log("cast to Home interface");
STestEJB ejb = sTestEJBHome.create(); //调用EJB方法
log(ejb.getDate());
正文
java应用调用EJB2005-07-27 16:38:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/xueyb/3267.html
阅读(6403) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论