[
https://issues.apache.org/jira/browse/ARTEMIS-3665?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17485263#comment-17485263
]
Stephen Baker commented on ARTEMIS-3665:
----------------------------------------
I can't update artemis on that environment yet; though we will later this year.
I updated the client libraries I was using to 2.20 but it did not change the
error or the stacktrace.
Some time after producing this error I end up with the following log:
{{{}2022-02-01 08:49:25,309 : WARN : Finalizer : client : : AMQ212008: I am
closing a core ClientSessionFactory you left open. Please make sure you close
all ClientSessionFactories explicitly before letting them go out of scope!
600,521,657{}}}{{{}java.lang.Exception: null{}}}{{{}at
org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl.<init>(ClientSessionFactoryImpl.java:179)
~[artemis-core-client-2.17.0.jar:2.17.0]{}}}{{{}at
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:683)
~[artemis-core-client-2.17.0.jar:2.17.0]{}}}{{{}at
com.raveu.msg.sms.broker.server.service.MonitorService.populateJmsQueues(MonitorService.java:196)
~[classes/:?]{}}}
The code producing the error is:
{code:java}
@Nullable
private ActiveMQConnectionFactory
extractInnerArtemisConnectionFactory(JmsTemplate template) {
ConnectionFactory cf = jmsTemplate.getConnectionFactory();
if (cf instanceof SingleConnectionFactory) {
cf = ((SingleConnectionFactory)cf).getTargetConnectionFactory();
}
if (cf instanceof ActiveMQConnectionFactory) {
return (ActiveMQConnectionFactory) cf;
}
return null;
}
private void populateJmsQueues(MessagingStatusDTO messagingStatus) {
if (CollectionUtils.isEmpty(this.jmsQueues)) { return; }
ActiveMQConnectionFactory cf =
extractInnerArtemisConnectionFactory(jmsTemplate);
if (cf == null) {
messagingStatus.getMonitorErrors()
.add("JMS Connection Factory is not specified or not Artemis
ActiveMQConnectionFactory");
return;
}
try (ClientSessionFactory csf =
cf.getServerLocator().createSessionFactory();
ClientSession clientSession = createArtemisClientSession(cf, csf);
ClientRequestor requestor = new ClientRequestor(clientSession,
"activemq.management")
) {
clientSession.start();
for (var queue : this.jmsQueues) {
var status = new QueueStatusDTO();
status.setName(queue);
status.setMessages(getJmsManagementValue(
clientSession, requestor, "queue." + queue, "messageCount",
Long.class));
status.setConsumers(getJmsManagementValue(
clientSession, requestor, "queue." + queue,
"consumerCount", Long.class));
messagingStatus.getQueueStatuses().add(status);
}
} catch (Exception e) {
messagingStatus.getMonitorErrors().add(ExceptionUtils.getStackTrace(e));
}
}
private ClientSession createArtemisClientSession(
ActiveMQConnectionFactory connectionFactory,
ClientSessionFactory clientSessionFactory) throws ActiveMQException {
return clientSessionFactory.createSession(
connectionFactory.getUser(),
connectionFactory.getPassword(),
false,
true,
true,
connectionFactory.getServerLocator().isPreAcknowledge(),
connectionFactory.getServerLocator().getAckBatchSize());
}
private <T> T getJmsManagementValue(
ClientSession clientSession,
ClientRequestor requestor,
String resource,
String attribute,
Class<T> clazz) throws Exception {
ClientMessage m = clientSession.createMessage(false);
ManagementHelper.putAttribute(m, resource, attribute);
ClientMessage reply = requestor.request(m);
return clazz.cast(ManagementHelper.getResult(reply, clazz));
} {code}
Due to the try with resources it shouldn't have been possible for the
ClientSessionFactory to be left open, except that it was never returned due to
the first NPE.
> NullPointerException in ServerLocator.createSessionFactory
> ----------------------------------------------------------
>
> Key: ARTEMIS-3665
> URL: https://issues.apache.org/jira/browse/ARTEMIS-3665
> Project: ActiveMQ Artemis
> Issue Type: Bug
> Components: ActiveMQ-Artemis-Native
> Affects Versions: 2.17.0
> Environment: Linux version 3.10.0-1160.49.1.el7.x86_64
> ([email protected]) (gcc version 4.8.5 20150623 (Red Hat
> 4.8.5-44) (GCC) ) #1 SMP Tue Nov 30 15:51:32 UTC 2021
> Artemis 2.17.0
> Connection string is:
> (tcp://ba-artms21.qa.raveu.net:61616,tcp://ba-artms22.qa.raveu.net:61616)
> Reporter: Stephen Baker
> Assignee: Clebert Suconic
> Priority: Major
>
> In one environment I am frequently seeing a NullPointerException in
> ServerLocator.createSessionFactory():
> java.lang.NullPointerException
> at
> org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl.<init>(ClientSessionFactoryImpl.java:189
> at
> org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:683)
>
> The line in the report is:
> `connectorFactory =
> instantiateConnectorFactory(connectorConfig.getA().getFactoryClassName());`
> Unfortunately I'm not able to reproduce in my development environment which
> makes debugging difficult.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)