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