JNDI не работает на JBoss 4, как ожидалось

Мне нужно развернуть.ear в унаследованном приложении JBoss, которое имеет сессионный компонент без сохранения состояния, называемый GateKepper. Я тестирую это на локальной копии этого приложения, которое, я надеюсь, практически идентично рабочей версии. Я выполняю поиск с:

   protected  GateKeeper lookupGateKeeper() {
        String gateKeeperBeanName = null;
        try {
            Properties p = getClasspathProperties();
            InitialContext ctx = new InitialContext(p);
            gateKeeperBeanName = p.getProperty("gatekeeper.name");
            return (GateKeeper) ctx.lookup( gateKeeperBeanName );
        }
        catch (IOException e) {
            throw new GateKeeperLookupException("Gatekeeper [" + gateKeeperBeanName + "] not found.", e);
        } catch (NamingException e) {
            throw new GateKeeperLookupException("Gatekeeper [" + gateKeeperBeanName + "] not found.", e);
        }
    }

где gatekeeperBeanName - это "com.xxxxx.mercury.GateKeeper", которое представляет собой полное имя класса удаленного и локального интерфейса, которое я представляю ниже, и где свойства, которые я вставляю, являются стандартом из java.naming:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://localhost:1099

Аннотации на интерфейсе GateKeeper (com.xxxxx.mercury.GateKeeper)

@Remote
@Local
public interface GateKeeper {
    public String processRequest(String request);
}

и во время запуска приложения регистрируется следующее:

2014-12-08 15:30:53,648 DEBUG [org.jboss.naming.NamingService] (main) !Starting jboss:service=Naming
2014-12-08 15:30:53,648 DEBUG [org.jboss.naming.NamingService] (main) !System.setProperty, key=java.naming.factory.initial, value=org.jnp.interfaces.NamingContextFactory
2014-12-08 15:30:53,648 DEBUG [org.jboss.naming.NamingService] (main) !System.setProperty, key=java.naming.factory.url.pkgs, value=org.jboss.naming:org.jnp.interfaces
2014-12-08 15:30:53,655 DEBUG [org.jboss.naming.NamingService] (main) !Creating NamingServer stub, theServer=org.jnp.server.NamingServer@5f7f84e5,rmiPort=1098,clientSocketFactory=null,serverSocketFactory=org.jboss.net.sockets.DefaultSocketFactory@ad093076
2014-12-08 15:30:53,711 DEBUG [org.jboss.naming.NamingService] (main) !NamingServer stub: NamingServer_Stub[UnicastRef2 [liveRef: [endpoint:[192.168.1.109:1098,org.jboss.net.sockets.DefaultSocketFactory@ad093076](local),objID:[36e9dd2d:14a282a12d7:-7fff, 5578168918392374819]]]]
2014-12-08 15:30:53,716 DEBUG [org.jboss.naming.NamingService] (main) !Started jndi bootstrap jnpPort=1099, rmiPort=1098, backlog=50, bindAddress=/0.0.0.0, Client SocketFactory=null, Server SocketFactory=org.jboss.net.sockets.DefaultSocketFactory@ad093076
2014-12-08 15:30:53,720 DEBUG [org.jboss.naming.NamingService] (main) !InitialContext Environment:
2014-12-08 15:30:53,720 DEBUG [org.jboss.naming.NamingService] (main) !key=java.naming.factory.initial, value=org.jnp.interfaces.NamingContextFactory
2014-12-08 15:30:53,720 DEBUG [org.jboss.naming.NamingService] (main) !key=java.naming.factory.url.pkgs, value=org.jboss.naming:org.jnp.interfaces:org.jboss.naming:org.jnp.interfaces
2014-12-08 15:30:53,722 DEBUG [org.jboss.naming.NamingService] (main) !Listening on port 1099
2014-12-08 15:30:53,724 DEBUG [org.jboss.naming.NamingService] (main) !Started jboss:service=Naming

Так что действительно похоже, что служба именования запущена, поэтому почему я пытаюсь найти GateKeeper?

Я получил:

com.xxxxxcorp.vas.txws.web.GateKeeperLookupException: Gatekeeper [com.xxxxx.mercury.GateKeeper] not found.

com.xxxxxcorp.vas.txws.web.TxnServlet.lookupGateKeeper(TxnServlet.java:134)
com.xxxxxcorp.vas.txws.web.TxnServlet.getGateKeeper(TxnServlet.java:119)
com.xxxxxcorp.vas.txws.web.TxnServlet.get(TxnServlet.java:66)
com.xxxxxcorp.vas.txws.web.TxnServlet.doGet(TxnServlet.java:58)
javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75)

Ясно, что произошло исключение IOException или NamingException. У кого-нибудь были проблемы с настройкой разрешения имен, может кто-нибудь определить, что я делаю неправильно?

РЕДАКТИРОВАТЬ В случае, если это каким-либо образом важно, jboss-service.xml может сказать следующее о NamingService:

   <mbean code="org.jboss.naming.NamingService"
      name="jboss:service=Naming"
      xmbean-dd="resource:xmdesc/NamingService-xmbean.xml">
      <!-- The call by value mode. true if all lookups are unmarshalled using
      the caller's TCL, false if in VM lookups return the value by reference.
      -->
      <attribute name="CallByValue">false</attribute>
      <!-- The listening port for the bootstrap JNP service. Set this to -1
        to run the NamingService without the JNP invoker listening port.
      -->
      <attribute name="Port">1099</attribute>
      <!-- The bootstrap JNP server bind address. This also sets the default
      RMI service bind address. Empty == all addresses
       -->
      <attribute name="BindAddress">${jboss.bind.address}</attribute>
      <!-- The port of the RMI naming service, 0 == anonymous -->
      <attribute name="RmiPort">1098</attribute>
      <!-- The RMI service bind address. Empty == all addresses
       -->
      <attribute name="RmiBindAddress">${jboss.bind.address}</attribute>
      <!-- The thread pool service used to control the bootstrap lookups -->
      <depends optional-attribute-name="LookupPool"
         proxy-type="attribute">jboss.system:service=ThreadPool</depends>
   </mbean>

   <mbean code="org.jboss.naming.JNDIView"
        name="jboss:service=JNDIView"
        xmbean-dd="resource:xmdesc/JNDIView-xmbean.xml">
   </mbean>

1 ответ

Я не думаю, что использование полного имени интерфейса работает как строка jndi. В вашем случае это должно быть что-то вроде earName/GateKeeperImpl/local или GateKeeperImpl / local

Кроме того, я бы не стал комментировать один и тот же интерфейс с @Local и @Remote, я считаю, что это может вызвать проблемы

Надеюсь, поможет!

Другие вопросы по тегам