śr., 25 mar 2026 o 12:42 Ephemeris Lappis <[email protected]>
napisał(a):

> Hello again.
>
> Just to be sure : pax jms uses the provider to create the actual
> connection factory, and in our case it's
> "org.apache.activelmq.ActiveMQConnectionFactory", and this implementation
> doesn't provide a "close" method, right ?
>

Yes, correct...


>
> So,with no help from pw jms itself, how can we handle this, even if it's
> just a workaround ? I suppose we could code something to close connections,
> but how can we get reference on the pool or the connection factory ?
>

You'd have to use OSGi service tracking to get a service of class
javax.jmx.ConnectionFactory - using "standard" OSGi ServiceTracker. Then
you'd have to do (I think) some reflection code to get the pool
details........

~Grzegorz Grzybek


>
> Thanks again.
>
>
> Le mer. 25 mars 2026 à 12:22, Grzegorz Grzybek <[email protected]> a
> écrit :
>
>> Hello
>>
>> śr., 25 mar 2026 o 12:12 Ephemeris Lappis <[email protected]>
>> napisał(a):
>>
>>> Hello.
>>>
>>> Thanks for your answer...
>>>
>>> I don't actually understand when you say that application are in
>>> charge of closing connections : in ou world, application are Camel routes
>>> in feature that are all uninstalled when the pax jms itself is removing,
>>> and logs show clearly how routes are stopped and removed when each Camel
>>> feature is uninstalled.
>>>
>>
>> This is just a typical case - even with Camel - JMS connection is taken
>> from the pool, used and "closed" (which with the pool usually means
>> returning to the pool without closing it).
>> And I see that it may be a problem, because Pax JMS creates the pool
>> based on JMS provider specific implementation of
>> javax.jms.ConnectionFactory, but there's no "close" method on the factory...
>>
>> I'm afraid this scenario would require extending generic Pax JMS support
>> for dynamic reconfiguration...
>>
>> regards
>> Grzegorz Grzybek
>>
>>
>>>
>>> When the pax-jms-config feature is removed, we expect that it delete the
>>> pool, and thus close any remaining connection, but in some random case, it
>>> doesn't do it, and when all the features are installed back, a new pool is
>>> created, and 256 connections are potentially added on the broker, until it
>>> fails...
>>>
>>> Thanks again.
>>>
>>> Le mer. 25 mars 2026 à 11:22, Grzegorz Grzybek <[email protected]> a
>>> écrit :
>>>
>>>> Hello
>>>>
>>>> While I was involved in maintenance of Pax JMS library I don't remember
>>>> any issues related to hanging connections...
>>>>
>>>> To be honest this project is in kind of awaiting state, almost killed
>>>> by the unnecessary move from "javax" to "jakarta"... There's still no
>>>> jakarta.jmx version of this library (would require similar change in Pax
>>>> Transx project..).
>>>>
>>>> I see that Pax JMS does some special treatment if the implementation of
>>>> javax.jms.ConnectionFactory is AutoCloseable,
>>>> but org.apache.activemq.ActiveMQConnectionFactory is not.
>>>> So it's the responsibility of the application to properly close the
>>>> connections...
>>>>
>>>> That's all I can help with ;(
>>>>
>>>> kind regards
>>>> Grzegorz Grzybek
>>>>
>>>> śr., 25 mar 2026 o 10:45 Ephemeris Lappis <[email protected]>
>>>> napisał(a):
>>>>
>>>>> Hello.
>>>>>
>>>>> We use pax-jms-config to manage JMS (ActiveMQ) connection factories.
>>>>> It basically works as expected, but we've recently observed a critical
>>>>> issue : it seems that with some unidentified conditions, when the features
>>>>> are installed/uninstalled, or connection factories cfg files updated, the
>>>>> current connections are not closed, and new ones are created. We can see
>>>>> the corresponding sockets on both Karaf and ActiveMQ (or in activemq
>>>>> console). When the maximum configured connection count is exceeded, all 
>>>>> the
>>>>> system (including other JMS clients) fails.
>>>>>
>>>>> Is it a known issue ? If not, is there any way to force the jms pool
>>>>> to be cleaned ?
>>>>>
>>>>> Below are our feature structure and configuration file...
>>>>> Thanks again.
>>>>>
>>>>> Best regards.
>>>>>
>>>>> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
>>>>>
>>>>> <features
>>>>>
>>>>> xmlns="http://karaf.apache.org/xmlns/features/v1.6.0";
>>>>>
>>>>> name="${project.artifactId}">
>>>>>
>>>>>
>>>>> <repository>
>>>>> mvn:org.apache.activemq/activemq-karaf/${version.of.activemq}/xml/features
>>>>> </repository>
>>>>>
>>>>>
>>>>> <feature
>>>>>
>>>>> name="${project.artifactId}"
>>>>>
>>>>> version="${project.version}">
>>>>>
>>>>> <feature prerequisite="true" version="${version.of.activemq}">
>>>>> activemq-client</feature>
>>>>>
>>>>> <feature prerequisite="true">base-system</feature>
>>>>>
>>>>> <feature prerequisite="true">pax-jms-activemq</feature>
>>>>>
>>>>> <feature prerequisite="true">pax-jms-pool-pooledjms</feature>
>>>>>
>>>>> <feature prerequisite="true">pax-jms-config</feature>
>>>>>
>>>>> </feature>
>>>>>
>>>>>
>>>>> </features>
>>>>>
>>>>>
>>>>> # Connection configuration
>>>>> type=activemq
>>>>> connectionFactoryType=ConnectionFactory
>>>>>
>>>>> # Names
>>>>> name=xxx-jmsosgi.jndi.service.name=jms/xxx
>>>>>
>>>>> # Connection factory properties
>>>>> jms.url=tcp://amq-service:61616
>>>>> jms.user=application
>>>>> jms.password=secret
>>>>> jms.clientIDPrefix=ID
>>>>>
>>>>> # Set XA transaction
>>>>> xa=false
>>>>>
>>>>> # Connection pooling
>>>>> pool=pooledjms
>>>>> pool.maxConnections=256
>>>>>
>>>>>

Reply via email to