【问题标题】:Lookup of JMS Connection Factory Pool on Glassfish cluster fails在 Glassfish 集群上查找 JMS 连接工厂池失败
【发布时间】:2017-03-31 23:08:56
【问题描述】:

我有一个在独立域上运行但在集群设置中失败的应用程序。

在我的应用程序中,我有一个 JCA 资源适配器,它需要在 EIS 中的特定情况下通过 JMS 消息发送消息,因此在事件之后的连接实现中我调用 getJMSConnectionFactory

private Object lookup(String what) {
    try {
        // needs no environment
        Context jndiContext = new InitialContext();
        return jndiContext.lookup(what);
    } catch (NamingException ex) {
        throw MyProjectException.getInstance("lookup of " + what + " failed.", ex);
    }
}

public ConnectionFactory getJMSConnectionFactory() throws JMSException {
    return (ConnectionFactory)lookup("java:comp/DefaultJMSConnectionFactory");
}

我也以这种方式查找目标,然后发送 JMS 消息。现在,当我部署到单个域时,它可以按预期工作,但是当我尝试在集群设置中执行此操作时,我得到了这个异常(下面的相关详细信息):

javax.ejb.EJBException
Caused by: myclasspath.MyProjectException: sayHelloyOverJMS
Caused by: myclasspath.MyProjectException: lookup of java:comp/DefaultJMSConnectionFactory failed.
Caused by: javax.naming.NamingException: Lookup failed for 'java:comp/DefaultJMSConnectionFactory' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Lookup failed for 'jms/__defaultConnectionFactory' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Unable to lookup resource : jms/__defaultConnectionFactory [Root exception is com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Lookup failed for '__SYSTEM/pools/jms/__defaultConnectionFactory-Connection-Pool' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}]]]
Caused by: javax.naming.NamingException: Lookup failed for 'jms/__defaultConnectionFactory' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Unable to lookup resource : jms/__defaultConnectionFactory [Root exception is com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Lookup failed for '__SYSTEM/pools/jms/__defaultConnectionFactory-Connection-Pool' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}]]
Caused by: javax.naming.NamingException: Unable to lookup resource : jms/__defaultConnectionFactory [Root exception is com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Lookup failed for '__SYSTEM/pools/jms/__defaultConnectionFactory-Connection-Pool' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}]
Caused by: com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Lookup failed for '__SYSTEM/pools/jms/__defaultConnectionFactory-Connection-Pool' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
Caused by: javax.naming.NamingException: Lookup failed for '__SYSTEM/pools/jms/__defaultConnectionFactory-Connection-Pool' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: jms]
Caused by: javax.naming.NameNotFoundException: jms

我认为相关的细节是:

Lookup failed for '__SYSTEM/pools/jms/__defaultConnectionFactory-Connection-Pool'.

这似乎找到了“__SYSTEM/pools”,但没有找到“jms”。我确实查看了 Glassfish 的 GUI 以配置连接池 jms/__defaultConnectionFactory-Connection-Pool,但我没有在那里找到任何有关“目标”的信息,所以我认为它应该在整个域中都可用,包括集群。集群配置的资源选项卡没有列出连接池(或任何其他“__SYSTEM”条目)。

当我问 glassfish 有哪些可用的 JNDI 资源时:

$ asadmin list-jms-resources cluster_name
jms/DataFlowClusterCommunicationTopic
jms/__defaultConnectionFactory
Command list-jms-resources executed successfully.

$ asadmin list-jms-resources domain-1-instance
remote failure: The list-jms-resources command is not allowed on target domain-1-instance because it is part of cluster cluster_name
Command list-jms-resources failed.

$ asadmin list-jms-resources domain
jms/DataFlowClusterCommunicationTopic
jms/__defaultConnectionFactory
Command list-jms-resources executed successfully.

所以,据我了解,jms/__defaultConnectionFactory 名称是存在的,并且应该在集群设置中与域设置一样多。

环境:

  • AS:GlassFish Server 开源版 4.1.1(内部版本 1)
  • Java:

    • openjdk 版本“1.8.0_111”
    • OpenJDK 运行时环境(内部版本 1.8.0_111-8u111-b14-2-b14)
    • OpenJDK 64 位服务器 VM(内部版本 25.111-b14,混合模式)
  • 操作系统:Linux fuchs-linux-pc 4.7.0-1-amd64 #1 SMP Debian 4.7.8-1 (2016-10-19) x86_64 GNU/Linux

  • 使用 Maven 3 构建

【问题讨论】:

  • 你在这个问题上有什么进展吗?我也有同样的情况
  • @karelss 不幸的是,现在我自己不再有这个问题了(我不再参与这个项目了)。我们有机会切换到不同的 AS,并且这样做了。它在那里奏效了,但那种等待发生的问题的模糊感觉仍然存在。
  • @karelss 如果您支持这个问题,它将被推到首页。如果您选择提出新问题,请留下一个链接,以便最终将其作为重复问题关闭。
  • 在做了一些研究后,我发现 glassfish jira 上报告了一些与此问题相关的错误,例如 java.net/jira/browse/GLASSFISH-21656java.net/jira/browse/GLASSFISH-21655,我将等待检查此问题是否已修复5.0 版。
  • @karelss 这两个问题都已经关闭。您是否已经尝试过 4.1.2 版本?

标签: java glassfish jms jndi


【解决方案1】:

我发现这篇文章是因为当我尝试将我的项目从独立设置移动到集群设置时,我在 glassfish 版本 4.0 和 4.1.1 中遇到了同样的问题。

在做了一些测试之后,我能够发现 glassfish 团队接受的一些与 jms 系统相关的问题,仅在集群模式下我能够测试,从嵌入式 openmq 设置更改为 remote 或本地一个 FIX问题,并且系统在集群中运行良好。

这种行为让我觉得这个问题与带有嵌入式 openMQ 设置的 JNDI 树有关

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2015-11-12
    • 2011-09-23
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    相关资源
    最近更新 更多