【问题标题】:Problems looking up a WebLogic 12c EJB3 beans from a remote application从远程应用程序查找 WebLogic 12c EJB3 bean 时出现问题
【发布时间】:2019-02-01 19:53:03
【问题描述】:

我是

  • 使用 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”(我得到 NameNotFoundException:remaining name...)时,我无法访问 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)

我遗漏了什么或有什么问题?

【问题讨论】:

  • 根据 Oracle 的网页,“未发布的 WLS 错误 20755176:根据此错误,当“weblogic.jndi. responseReadTimeout" 属性在 jndi 属性中有一个字符串值。"但是,我尝试将 jndi.properties 中的任何其他超时值设置为数值,但结果是相同的

标签: java weblogic12c ejb-3.1


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    相关资源
    最近更新 更多