【问题标题】:JNDI over HTTP on JBoss 4.2.3GAJBoss 4.2.3GA 上基于 HTTP 的 JNDI
【发布时间】:2010-02-20 08:28:21
【问题描述】:

我在 eapps.com 上有一个远程服务器,用作我的“生产”服务器。我在家里有自己的电脑,用作我的“开发”服务器。我正在尝试使用 JNDI over HTTP 进行一些批处理。以下在家里有效,但在 eapps 机器上无效。

我正在连接一些 EJB(无状态会话),并将我的 jndi.properties 设置为:

(这是给 eapps 机器的)

java.naming.factory.initial=org.jboss.naming.HttpNamingContextFactory
java.naming.provider.url=http://my.prodhost.com:8080/invoker/JNDIFactory
java.naming.factory.url.pkgs=org.jboss.naming.client:org.jnp.interfaces
# timeout is in milliseconds
jnp.timeout=15000
jnp.sotimeout=15000
jnp.maxRetries=3

(这是给我家的机器)

java.naming.factory.initial=org.jboss.naming.HttpNamingContextFactory
java.naming.provider.url=http://localhost:8080/invoker/JNDIFactory
java.naming.factory.url.pkgs=org.jnp.interfaces
java.naming.factory.url.pkgs=org.jboss.naming.client
# timeout is in milliseconds
jnp.timeout=15000
jnp.sotimeout=15000
jnp.maxRetries=3

正如我所说,它可以在家里工作,但是当我远程尝试时,我得到:

Can not get connection to server. Problem establishing socket connection for InvokerLocator [socket://my.prodhost.com:4446//?dataType=invocation&enableTcpNoDelay=true&marshaller=org.jboss.invocation.unified.marshall.InvocationMarshaller&socketTimeout=600000&unmarshaller=org.jboss.invocation.unified.marshall.InvocationUnMarshaller]
...
Caused by: java.net.ConnectException: Connection timed out: connect

我在这里做错了什么,还是可能是防火墙问题?据我所知,4446 端口没有被阻塞。

【问题讨论】:

  • 区别不是意图。我会让它们一样,然后再试一次。只有 eapps 机器是 Unix。当我尝试“netstat -a | grep 4446”时,它什么也没返回。 eapps 文档建议我尝试“iptables -A INPUT -j ACCEPT -p tcp --dport [端口号]”,但这似乎不起作用。我不是 Unix 人。我知道使用它的最低限度。
  • 即使第一个问题已经得到解答,我仍将补充我发现的后续问题,并希望得到他们的解决方案。应用 HTTP UnifiedInvoker 修复后,我发现我的远程 SLSB 无法加载。我在 JBoss 日志文件中发现了这个错误:[org.jboss.system.ServiceController] Problem created service jboss.remoting:service=Connector,transport=socket java.lang.NoClassDefFoundError: org/apache/coyote/Adapter

标签: http jboss jndi


【解决方案1】:

jndi.properties 的差异是否是有意的(在 java.naming.factory.url.pkgs 属性级别)?

另外,您可以在两台机器上运行netstat -a | grep 4446 并使用输出更新问题吗?

更新:如果netstat 命令没有为端口 4446 返回任何内容(JBoss 正在运行,对吗?),那么 UnifiedInvoker 服务的 JBoss Remoting Connector 非常可能没有在您的 eApps 主机上监听,因此连接超时。可能此服务已被 eApps 禁用,您应该联系support 并与他们讨论此问题。

以防万一,可以在服务器节点的conf 目录下的jboss-service.xml 中找到示例Connector 配置。也许将远程文件(如果您可以访问它)与您的本地文件进行比较以确认这一点(但如果它被禁用,则必须有原因,与支持人员讨论)。

顺便说一下,这是我在我的 GNU/Linux 机器上运行 netstat 命令并启动 JBoss 4.2.3.GA(默认配置)时得到的结果:

$ netstat -a | grep 4446
tcp        0      0 localhost:4446          *:*                     LISTEN  

【讨论】:

  • 抱歉,我无法回复。我出差了,这个周末会回来。那就看看吧。
  • 看起来它做到了。诀窍是“将 UnifiedInvoker 更改为使用 HTTP 传输而不是套接字传输”