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());

评论