У меня есть приложение, которое работает в автономном домене, но не работает в настройке кластера.Поиск в 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
Вы сделали какие-либо прогресса в этом вопросе?, у меня есть тот же самый – karelss
@karelss К сожалению, нет и к настоящему времени у меня больше нет проблемы (я больше не на проекте). У нас была возможность переключиться на другую АС и сделала это. Там это сработало, но это смутное чувство проблем, ожидающих, что это произойдет. –
@karelss Если вы перевернете этот вопрос, он будет поднят на главной странице. Если вы вместо этого зададите новый вопрос, оставьте ссылку, чтобы в конце концов можно было закрыть ее как дубликат. –