Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NameNotFoundException在生产JBoss中对远程EJB执行JNDI查找(在本地工作)_Java_Jakarta Ee_Jboss_Ejb_Jndi - Fatal编程技术网

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

Java NameNotFoundException在生产JBoss中对远程EJB执行JNDI查找(在本地工作),java,jakarta-ee,jboss,ejb,jndi,Java,Jakarta Ee,Jboss,Ejb,Jndi,一个应用程序(例如app.EAR)部署到我自己机器上的JBoss上,运行良好。当我将它部署到远程JBoss时,它已部署,但当我尝试访问需要对远程EJB进行JNDI查找的功能时,我得到了NameNotFoundException。因此,它似乎无法找到请求的服务。怎么会?如果在本地有效 与远程EJB接口的依赖关系位于EAR中的lib文件夹中,当然,它用@remote注释。JBoss与生产版完全相同(我将整个JBoss从生产版复制到我的机器上,以检查是否缺少任何配置) 我的查找代码如下所示: priv

一个应用程序(例如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();
                }
            }
        }
    }
资源名称是外部资源

stacktrace如下所示:

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
javax.naming.CommunicationException:连接超时[根异常为java.net.ConnectException:连接超时]
位于com.evermind.server.rmi.RMIClient.lookup(RMIClient.java:311)
位于com.evermind.server.rmi.RMIClientContext.lookup(RMIClientContext.java:59)
位于javax.naming.InitialContext.lookup(未知源)
在br.teste.TestaJNDI.listaUFs(TestaJNDI.java:55)
位于br.teste.TestaJNDI.main(TestaJNDI.java:37)
原因:java.net.ConnectException:连接超时
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.PlainSocketImpl.doConnect(未知源)
位于java.net.PlainSocketImpl.connectToAddress(未知源)
位于java.net.PlainSocketImpl.connect(未知源)
位于java.net.socksocketimpl.connect(未知源)
位于java.net.Socket.connect(未知源)
位于java.net.Socket.connect(未知源)
位于java.net.Socket。(未知源)
位于java.net.Socket。(未知源)
位于com.evermind.server.rmi.RMIClientConnection.createSocket(RMIClientConnection.java:802)
位于oracle.oc4j.rmi.ClientSocketRmiTransport.createNetworkConnection(ClientSocketRmiTransport.java:59)
位于oracle.oc4j.rmi.ClientRmiTransport.connectToServer(ClientRmiTransport.java:75)
位于oracle.oc4j.rmi.ClientSocketRmiTransport.connectToServer(ClientSocketRmiTransport.java:69)
位于com.evermind.server.rmi.RMIClientConnection.connect(RMIClientConnection.java:765)
在com.evermind.server.rmi.RMIClientConnection.sendLookupRequest上(RMIClientConnection.java:247)
位于com.evermind.server.rmi.RMIClientConnection.lookup(RMIClientConnection.java:231)
位于com.evermind.server.rmi.RMIClient.lookup(RMIClient.java:302)
... 4更多

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

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


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

请显示从失败的查找中获得的堆栈跟踪请显示启动日志+异常,以及,您正在使用哪个jboss版本?@SteveC stacktrace非常简单:29/06/2015 10:30:43 oracle.j2ee.clustering.ClusteringMessages warningInOpmnGetServers AVISO:从主机10.0.225.75:6003上的OPMN获取服务器列表时出错。请验证OPMN是否正在运行。javax.naming.NameNotFoundException:XXXService在com.evermind.server.rmi.RMIClientContext.lookup(RMIClientContext.java:60)在javax.naming.InitialContext.lookup(InitialContext.java:392)在br.teste.TestaJNDI.main(TestaJNDI.java:33)上找不到@Paizo请看我上面的评论。您在ProDocument/您的开发机器中使用的jboss版本是什么?另外,您正在使用哪些jndi属性?
ExternalResource
可能已向其他JNDI注册,您应该能够在服务器启动的日志上看到相应的JNDI名称,并且通常具有以下格式:
“ejb:+appName+”/“+moduleName+”/“+distinctName+”/“+beanName+!”+viewClassName
我遇到过绑定似乎位于特定接口上的情况,您发现主机名可以工作,但IP地址不能工作。所以它也可能是jboss本身的配置