从远程应用程序查找WebLogic 12c EJB3 Bean时遇到问题

时间:2019-02-01 19:53:03

标签: java weblogic12c ejb-3.1

我是

  • 使用Java 7
  • 使用WebLogic Server版本:12.1.3.0.0(12c)
  • 在部署的EAR文件中有一组EJB3 bean
  • 仅在我的bean上使用@Stateless注释
  • 可以在JNDI视图中查看bean(例如java:global.ifactory.ifactory-ejb-4.0.0.BomServiceBean!com.icumed.ifactory3.service.BomServiceRemote)
  • 运行正在尝试访问这些EJB的命令行应用程序
  • 使用wlthint3client.jar
  • 已经禁用IIOP

但是,当我有“ java:global”(我得到NameNotFoundException:剩余名称...)时,我无法访问Bean,而没有它我只能走得更远。它仍然失败上查找有以下例外:

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)

我缺少什么或有什么错误?

1 个答案:

答案 0 :(得分:0)

问题出在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");
}

如果需要设置这些属性,则必须在代码中创建一个Hashtable并将其传递给InitialContext。

Hashtable<String, Object> env = new Hashtable<String, Object>();

env.put("weblogic.jndi.responseReadTimeout", 15000L);
env.put("weblogic.rmi.clientTimeout", 15000L);