NameNotFoundException对生产JBoss中的远程EJB执行JNDI查找(在本地工作)

时间:2015-06-26 19:26:22

标签: java java-ee jboss ejb jndi

应用程序(例如app.EAR)在我自己的机器上部署到JBoss并且工作正常。当我将它部署到远程JBoss时,它被部署,但是当我尝试访问需要对远程EJB进行JNDI查找的功能时,我得到了NameNotFoundException。因此,它似乎无法找到所请求的服务。怎么会?如果它在本地工作?

与远程EJB接口的依赖关系位于EAR内的lib文件夹中,当然使用@Remote进行注释。 JBoss与生产版本完全相同(我将整个JBoss从生产复制到我的机器以检查是否缺少任何配置)。

我的查找代码是这样的:

private Object lookup(String resourceName, String loginData) {
        if (isPropagateUserCredentials() && (loginData == null || loginData.trim().equals(""))) {
            throw new MyInfraConfigException("somemessage");
        }
        Properties envProperties = new Properties();
        envProperties.putAll(this.jndiProperties);
        if (loginData != null && !loginData.equals("")) {
            envProperties.put(Context.SECURITY_PRINCIPAL, loginData);           
            envProperties.remove(Context.SECURITY_CREDENTIALS);
        }
        Context context = null;
        try {
            context = new InitialContext(envProperties);
            return context.lookup(resourceName);            
        } catch (NameNotFoundException e){
            String message = "Resource "+resourceName+" not found.";
            LoggerFactory.getInstance(this.getClass().getName()).error(message, e);
            throw new com.mypackage.NameNotFoundException(message, e);
        } catch (NamingException e) {
            String message = "Failed to find resource with JNDI: "+e.getMessage();
            LoggerFactory.getInstance(this.getClass().getName()).error(message, e);
            throw new com.mypackage.NamingException(message, e);
        } finally{
            if(context!=null){
                try {
                    context.close();
                } catch (NamingException e) {
                    e.printStackTrace();
                }
            }
        }
    }

resourceName是 ExternalResource

堆栈跟踪如下:

29/06/2015 10:30:43 oracle.j2ee.clustering.ClusteringMessages warningInOpmnGetServers
AVISO: Error in obtaining server list from OPMN on host XX.XXX.XXX.XXX:XXXX.  Please verify that OPMN is running.
javax.naming.NameNotFoundException: ExternalResource not found
    at com.evermind.server.rmi.RMIClientContext.lookup(RMIClientContext.java:60)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at br.teste.TestaJNDI.main(TestaJNDI.java:33)

任何线索?

更新 制作一个外部简单的java应用程序,以尝试连接到服务器并了解问题的原因。事实上,问题是我得到了连接超时:

javax.naming.CommunicationException: Connection timed out [Root exception is java.net.ConnectException: Connection timed out]
        at com.evermind.server.rmi.RMIClient.lookup(RMIClient.java:311)
        at com.evermind.server.rmi.RMIClientContext.lookup(RMIClientContext.java:59)
        at javax.naming.InitialContext.lookup(Unknown Source)
        at br.teste.TestaJNDI.listaUFs(TestaJNDI.java:55)
        at br.teste.TestaJNDI.main(TestaJNDI.java:37)
Caused by: java.net.ConnectException: Connection timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at com.evermind.server.rmi.RMIClientConnection.createSocket(RMIClientConnection.java:802)
        at oracle.oc4j.rmi.ClientSocketRmiTransport.createNetworkConnection(ClientSocketRmiTransport.java:59)
        at oracle.oc4j.rmi.ClientRmiTransport.connectToServer(ClientRmiTransport.java:75)
        at oracle.oc4j.rmi.ClientSocketRmiTransport.connectToServer(ClientSocketRmiTransport.java:69)
        at com.evermind.server.rmi.RMIClientConnection.connect(RMIClientConnection.java:765)
        at com.evermind.server.rmi.RMIClientConnection.sendLookupRequest(RMIClientConnection.java:247)
        at com.evermind.server.rmi.RMIClientConnection.lookup(RMIClientConnection.java:231)
        at com.evermind.server.rmi.RMIClient.lookup(RMIClient.java:302)
        ... 4 more

1 个答案:

答案 0 :(得分:1)

这可能是网络通信问题。我会检查服务器是否允许在远程端口上进行通信。如果服务器配置为接受这些请求,请尝试telnet服务器:

telnet <server> <port>

如果使用默认端口,我认为这应该是4447.如果此连接失败,请回答以下问题: 1.是否没有可能阻止此通信的防火墙。 2.您使用的是生产服务器配置的正确端口吗?

失败可能还有其他原因,但那将是一个起点。