You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Stephen Baker (Jira)" <ji...@apache.org> on 2022/02/01 13:58:00 UTC
[jira] [Commented] (ARTEMIS-3665) NullPointerException in ServerLocator.createSessionFactory
[ 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 (mockbuild@kbuilder.bsys.centos.org) (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)