从远程应用程序查找 WebLogic 12c EJB3 bean 时出现问题
Problems looking up a WebLogic 12c EJB3 beans from a remote application
我是
- 使用 Java 7
- 使用 WebLogic Server 版本:12.1.3.0.0 (12c)
- 有一组 EJB3 bean 作为部署的 EAR 文件的一部分
- 只是在我的 bean 上使用 @Stateless 注释
- 能够在 JNDI 视图中看到 bean(例如 java:global.ifactory.ifactory-ejb-4.0.0.BomServiceBean!com.icumed.ifactory3.service.BomServiceRemote)
- 运行 试图访问这些 EJB 的命令行应用程序
- 正在使用 wlthint3client.jar
- 已禁用 IIOP
但是,当我有 "java:global" 时我无法访问该 bean(我得到 NameNotFoundException: remaining name...),如果没有它我只会稍微走得更远。查找仍然失败,出现以下异常:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
at weblogic.rmi.internal.StubInfo.getEnvQueriedJNDITimeout(StubInfo.java:256)
...
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:426)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
我错过了什么或错了什么?
问题出在wlthint3client.jar (StubInfo.java) 的代码中。如果您在 jndi.properties 文件中指定以下两个属性,则它们无法从 String 正确转换为 Long。
Long o = (Long)props.get("weblogic.jndi.responseReadTimeout");
if (o == null) {
o = (Long)props.get("weblogic.rmi.clientTimeout");
}
如果您需要设置这些属性,则必须在您的代码中创建一个哈希表并将其传递给 InitialContext。
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put("weblogic.jndi.responseReadTimeout", 15000L);
env.put("weblogic.rmi.clientTimeout", 15000L);
我是
- 使用 Java 7
- 使用 WebLogic Server 版本:12.1.3.0.0 (12c)
- 有一组 EJB3 bean 作为部署的 EAR 文件的一部分
- 只是在我的 bean 上使用 @Stateless 注释
- 能够在 JNDI 视图中看到 bean(例如 java:global.ifactory.ifactory-ejb-4.0.0.BomServiceBean!com.icumed.ifactory3.service.BomServiceRemote)
- 运行 试图访问这些 EJB 的命令行应用程序
- 正在使用 wlthint3client.jar
- 已禁用 IIOP
但是,当我有 "java:global" 时我无法访问该 bean(我得到 NameNotFoundException: remaining name...),如果没有它我只会稍微走得更远。查找仍然失败,出现以下异常:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
at weblogic.rmi.internal.StubInfo.getEnvQueriedJNDITimeout(StubInfo.java:256)
...
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:426)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
我错过了什么或错了什么?
问题出在wlthint3client.jar (StubInfo.java) 的代码中。如果您在 jndi.properties 文件中指定以下两个属性,则它们无法从 String 正确转换为 Long。
Long o = (Long)props.get("weblogic.jndi.responseReadTimeout");
if (o == null) {
o = (Long)props.get("weblogic.rmi.clientTimeout");
}
如果您需要设置这些属性,则必须在您的代码中创建一个哈希表并将其传递给 InitialContext。
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put("weblogic.jndi.responseReadTimeout", 15000L);
env.put("weblogic.rmi.clientTimeout", 15000L);