gpt4 book ai didi

java - 从独立客户端查找远程 EJB 时出现断言错误 "Context may not be null"

转载 作者:太空宇宙 更新时间:2023-11-04 09:47:26 25 4
gpt4 key购买 nike

我正在运行 WebLogic 12c,并且将多个 bean 部署为 EAR 文件的一部分。我还有一个从 Eclipse 运行的独立客户端,它试图访问远程 EJB。我使用注释,因此使用 EJB 3.1 中的全局、可移植 JNDI 名称(例如 java:global/ifactory/ifactory-ejb-4.0.0/BomServiceBean!com.icumed.ifactory3.service.BomServiceRemote)。

但是,当远程客户端尝试调用 EBJ 时,我收到以下异常:

11:45:03,400 ERROR [com.icumed.ifactory3.service.RemoteServiceFactoryImpl] [getService('java:global/ifactory/ifactory-ejb-4.0.0/BomServiceBean!com.icumed.ifactory3.service.BomServiceRemote')] Context may not be null
java.lang.AssertionError: Context may not be null
at weblogic.j2eeclient.SimpleContext.checkForNameUnderRemoteNode(SimpleContext.java:103)
at weblogic.j2eeclient.SimpleContext.internalLookup(SimpleContext.java:68)
at weblogic.j2eeclient.SimpleContext.lookup(SimpleContext.java:39)
at weblogic.jndi.SimpleContext.lookup(SimpleContext.java:86)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at com.icumed.ifactory3.service.RemoteServiceFactoryImpl.getService(RemoteServiceFactoryImpl.java:323)

bean 看起来像这样:

@Stateless
public class BomServiceBean extends AbstractSessionBean implements LocalBomService, BomServiceRemote
{
...
}

更多信息:当 wlthint3client.jar 和 wlclient.jar 位于类路径中时,会发生此错误。

当类路径上只有 wlthint3client.jar 时,异常(exception)情况

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
at weblogic.rmi.internal.StubInfo.getEnvQueriedJNDITimeout(StubInfo.java:256)
at weblogic.rmi.internal.StubInfo.setEnvQueriedJNDITimeout(StubInfo.java:242)
at weblogic.rmi.internal.StubInfo.readObject(StubInfo.java:238)

当 wlclient.jar 和 wlthint3client.jar 位于类路径中时,WebLogic 将打印以下日志消息:

The connection attempt was rejected because the incoming protocol iiop is not enabled on channel Default[iiop][12]

如何纠正这个问题?

最佳答案

首先,确保类路径中只有 wlthint3client.jar,而没有 wlclient.jar。这将消除 AssertionError 并只留下 ClassCastException。

其次,ClassCastException问题出在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 - 从独立客户端查找远程 EJB 时出现断言错误 "Context may not be null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55249335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com