AssertionError «Контекст не может быть нулевым» при поиске удаленного EJB из автономного клиента - PullRequest
1 голос
/ 19 марта 2019

Я использую WebLogic 12c и развернул несколько компонентов как часть файла EAR.У меня также есть автономный клиент, который я запускаю из Eclipse, который пытается получить доступ к удаленным EJB.Я использую аннотации и, следовательно, глобальные переносимые имена JNDI из EJB 3.1 (например, 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)

Боб выглядит так:

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

Дополнительная информация: эта ошибка возникает, когдаwlthint3client.jar и затем wlclient.jar находятся в пути к классам.

Когда только путь wlthint3client.jar находится в пути к классам, исключение составляет

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]

Как мне исправить это?

1 Ответ

0 голосов
/ 21 марта 2019

Во-первых, убедитесь, что у вас есть только wlthint3client.jar в classpath, а не также wlclient.jar. Это избавит от AssertionError и оставит вас только с ClassCastException.

Во-вторых, проблема ClassCastException заключается в коде wlthint3client.jar (StubInfo.java). Следующие два свойства не преобразуются должным образом из String в Long, если вы укажете их в файле jndi.properties.

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