jgu*_*emv 6 java jboss ejb jndi java-ee
应用程序(例如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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
有线索吗?
更新 制作一个外部简单的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
Run Code Online (Sandbox Code Playgroud)
这可能是网络通信问题。我会检查服务器是否允许在远程端口上进行通信。如果服务器配置为接受这些请求,请尝试 telnet 服务器:
telnet <server> <port>
Run Code Online (Sandbox Code Playgroud)
如果使用默认端口,我认为应该是 4447。如果此连接失败,请回答以下问题: 1. 是否没有防火墙可能阻止此通信。2. 您是否使用生产服务器配置的正确端口。
失败确实可能有其他原因,但这将是一个起点。
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |