Проблемы с подключением к пулу, ActiveMQ 5.14.3, JMS 2.0, Karaf 4.2.0 - PullRequest
1 голос
/ 17 апреля 2019

У меня есть сценарий, когда я не могу переключиться на Артемиду прямо сейчас.И после нескольких сообщений я понял, что ActiveMQ становится сложно взаимодействовать с JMS 2.0.

Из-за некоторых ограничений в API Jolokia ( Можно ли получить более 400 сообщений из очереди ActiveMQ через API Jolokia? ), я переключился на API JMS для просмотра своих очередей, как предложено вкомментарии.Это прекрасно работает и дает ожидаемые результаты, когда оно запускается как отдельное приложение, так как я включил activemq-клиент в качестве одной из зависимостей:

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-client</artifactId>
    <version>5.12.1</version>
    <type>jar</type>
</dependency>

Я попытался развернуть аналогичную реализацию в Karaf с той же зависимостью, путем создания фабрики соединений как:

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory( 
                    "tcp://localhost:61616");

это не удалось, потому что: 1. activemq-клиент требует JMS 1.x 2. мой контейнер karaf имеет JMS 2.0

Таким образом, я решил использоватьмоя фабрика соединений в пуле с javax.jms-api/2.0 в качестве зависимости API JMS в пакете osgi как:

например, моя конфигурация проекта;где jms/consumer уже доступно в реестре службы

<reference id="jmsConnectionFactory" interface="javax.jms.ConnectionFactory"
 filter="(osgi.jndi.service.name=jms/consumer)" availability="mandatory" />

<dependency>
    <groupId>javax.jms</groupId>
    <artifactId>javax.jms-api</artifactId>
    <version>2.0</version>
</dependency>

Фрагмент моего кода при создании соединения выглядит так:

brokerConnection = connectionFactory.createConnection(); 
session = this.createSession(brokerConnection); 
brokerConnection.start();

до тех пор, пока эта точка, brokerConnection и session не будутноль.

Queue queue = session.createQueue("test.queue"); 
queueBrowser = session.createBrowser(queue); 

С этого момента я получаю исключение NullPointerException как:

java.lang.NullPointerException 
at org.apache.activemq.ActiveMQSession.createQueue(ActiveMQSession.java:1335) 
at org.apache.activemq.jms.pool.PooledSession.createQueue(PooledSession.java:197) 
at test.mbean.getBrokerEntries(BrokerMBean.java:142) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) 
at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) 
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112) 
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46) 
at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237) 
at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138) 
at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252) 
at javax.management.StandardMBean.invoke(StandardMBean.java:405) 
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) 
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) 
at org.jolokia.handler.ExecHandler.doHandleRequest(ExecHandler.java:98) 
at org.jolokia.handler.ExecHandler.doHandleRequest(ExecHandler.java:40) 
at org.jolokia.handler.JsonRequestHandler.handleRequest(JsonRequestHandler.java:89) 
at org.jolokia.backend.MBeanServerExecutorLocal.handleRequest(MBeanServerExecutorLocal.java:109) 
at org.jolokia.backend.MBeanServerHandler.dispatchRequest(MBeanServerHandler.java:159) 
at org.jolokia.backend.LocalRequestDispatcher.dispatchRequest(LocalRequestDispatcher.java:99) 
... 

Я не уверен, что здесь пошло не так.Любые входные данные будут очень полезны.

Спасибо.

...