Can you paste your connection factory configuration. Its just a guess but I'm wondering if perhaps you are using a pooled connection factory and when you do the refresh the destroy-method is not being called on the connection.
<bean id="pooledFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop"> .... </bean>
(It could also be a bug of course..)
I think your idea is perhaps the solution , actually i'm using the connection factory by default because the transaction manager is activated.
So I'm calling the Connection factory behind OSGI refrence like that :
<osgi:reference id=connectionFactory interface=javax.jms.ConnectionFactory />
Have you a better solution ? Does I need to declare a method to propertly close the connection on refresh ?