2016-11-17 14 views
1

У меня есть приложение, которое работает в автономном домене, но не работает в настройке кластера.Поиск в JMS Connection Factory Pool на кластере Glassfish не удается

В моем приложении у меня есть адаптер ресурсов JCA, которому необходимо отправить сообщение через JMS-сообщение в конкретной ситуации в EIS, поэтому в реализации подключения после события я вызываю 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/pool», но не на «jms». Я просмотрел графический интерфейс Glassfish до конфигурации пула подключений jms/__defaultConnectionFactory-Connection-Pool, но я не нашел никакой информации о 'target' там, поэтому я предполагаю, что он должен быть доступен во всем домене, включая кластеры. Вкладка «Ресурсы» конфигурации кластера не отображает пул подключений (или любые другие записи «__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 сервер Open Source Edition 4.1.1 (сборка 1)
  • Java:

    • OpenJDK версия "1.8.0_111"
    • OpenJDK время выполнения Окружающая среда (сборка 1.8.0_111-8u111-b14-2-b14)
    • 64-разрядная виртуальная машина OpenJDK (сборка 25.111-b14, смешанный режим)
  • ОС: Linux Fuchs-Linux-ПК 4.7.0-1-amd64 # 1 SMP Debian 4.7.8-1 (2016-10-19) x86_64 GNU/Linux

  • сборки с Maven 3
+1

Вы сделали какие-либо прогресса в этом вопросе?, у меня есть тот же самый – karelss

+0

@karelss К сожалению, нет и к настоящему времени у меня больше нет проблемы (я больше не на проекте). У нас была возможность переключиться на другую АС и сделала это. Там это сработало, но это смутное чувство проблем, ожидающих, что это произойдет. –

+0

@karelss Если вы перевернете этот вопрос, он будет поднят на главной странице. Если вы вместо этого зададите новый вопрос, оставьте ссылку, чтобы в конце концов можно было закрыть ее как дубликат. –

ответ

1

Я нашел это сообщение, потому что у меня такая же проблема с версией 4.0 и 4.1.1 в стеклянную фазу, когда я пытался переместить мой проект из автономной настройки в настройку кластера.

После нескольких тестов я смог обнаружить несколько вопросов, принятых командой Glassfish, связанных с системами jms, только в режиме кластера, насколько я смог проверить, изменив значение с встроенной установки openmq на remote или на локальный. Исправьте и система работает хорошо в кластере.

Такое поведение заставляет меня думать, что проблема связана с JNDI Дерево с Embedded установки openMQ