Hi Tim

It took some time to debug. When I set a breakpoint (Eclipse), the
issue does not happen so it looks like some timing issue (race
condition).

I added a stack dump to the start method of a modified BrokerService
class.

The stack dump from BrokerService#start when the application is
shutting down:

     [exec] java.lang.Thread.getStackTrace(Thread.java:1559)
     [exec]
org.apache.activemq.broker.BrokerService.start(BrokerService.java:612)
     [exec]
org.apache.activemq.transport.vm.VMTransportFactory.doCompositeConnect(
VMTransportFactory.java:127)
     [exec]
org.apache.activemq.transport.vm.VMTransportFactory.doConnect(VMTranspo
rtFactory.java:56)
     [exec]
org.apache.activemq.transport.TransportFactory.connect(TransportFactory
.java:65)
     [exec]
org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQC
onnectionFactory.java:331)
     [exec]
org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(
ActiveMQConnectionFactory.java:346)
     [exec]
org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(
ActiveMQConnectionFactory.java:304)
     [exec]
org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQ
ConnectionFactory.java:244)
     [exec]
org.springframework.jms.connection.SingleConnectionFactory.doCreateConn
ection(SingleConnectionFactory.java:342)
     [exec]
org.springframework.jms.connection.SingleConnectionFactory.initConnecti
on(SingleConnectionFactory.java:288)
     [exec]
org.springframework.jms.connection.SingleConnectionFactory.createConnec
tion(SingleConnectionFactory.java:225)
     [exec]
org.springframework.jms.support.JmsAccessor.createConnection(JmsAccesso
r.java:184)
     [exec]
org.springframework.jms.listener.AbstractJmsListeningContainer.createSh
aredConnection(AbstractJmsListeningContainer.java:405)
     [exec]
org.springframework.jms.listener.AbstractJmsListeningContainer.refreshS
haredConnection(AbstractJmsListeningContainer.java:390)
     [exec]
org.springframework.jms.listener.DefaultMessageListenerContainer.refres
hConnectionUntilSuccessful(DefaultMessageListenerContainer.java:885)
     [exec]
org.springframework.jms.listener.DefaultMessageListenerContainer.recove
rAfterListenerSetupFailure(DefaultMessageListenerContainer.java:861)
     [exec]
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncM
essageListenerInvoker.run(DefaultMessageListenerContainer.java:1012)

It looks like
DefaultMessageListenerContainer#recoverAfterListenerSetupFailure
creates a new instance of 


Additional DEBUG output:

   [exec] 14 Dec 2020 15:41:32 | DEBUG ID:martijn-laptop-46343-
1607956885604-4:1:1 Transaction Commit
:null    (org.apache.activemq.ActiveMQSession)
[org.springframework.jms.listener.DefaultMessageListenerContainer#0-1] 
     [exec] 14 Dec 2020 15:41:32 | DEBUG Publishing: vm://localhost for
broker transport URI:
vm://localhost    (org.apache.activemq.broker.TransportConnector)
[ActiveMQ BrokerService[localhost] Task-2] 
     [exec] 14 Dec 2020 15:41:32 | DEBUG Publishing: vm://localhost for
broker transport URI:
vm://localhost    (org.apache.activemq.broker.TransportConnector)
[ActiveMQ BrokerService[localhost] Task-2] 
     [exec] 14 Dec 2020 15:41:32 | DEBUG Connection Stopped:
vm://localhost#0    (org.apache.activemq.broker.TransportConnection)
[ActiveMQ BrokerService[localhost] Task-2] 
     [exec] 14 Dec 2020 15:41:32 | INFO  Connector vm://localhost
stopped    (org.apache.activemq.broker.TransportConnector) [ActiveMQ
ShutdownHook] 
     [exec] 14 Dec 2020 15:41:32 |
INFO  PListStore:[/home/martijn/git/ciphermail-core/var/jms-
data/localhost/tmp_storage]
stopped    (org.apache.activemq.store.kahadb.plist.PListStoreImpl)
[ActiveMQ ShutdownHook] 
     [exec] 14 Dec 2020 15:41:32 | INFO  Stopping async queue
tasks    (org.apache.activemq.store.kahadb.KahaDBStore) [ActiveMQ
ShutdownHook] 
     [exec] 14 Dec 2020 15:41:32 | INFO  Stopping async topic
tasks    (org.apache.activemq.store.kahadb.KahaDBStore) [ActiveMQ
ShutdownHook] 
     [exec] 14 Dec 2020 15:41:32 | DEBUG Forcing shutdown of
ExecutorService: 
org.apache.activemq.store.kahadb.KahaDBStore$StoreTaskExecutor@7ae5430d
[Running, pool size = 0, active threads = 0, queued tasks = 0,
completed tasks = 0]    (org.apache.activemq.util.ThreadPoolUtils)
[ActiveMQ ShutdownHook] 
     [exec] 14 Dec 2020 15:41:32 | DEBUG Shutdown of ExecutorService:
java.util.concurrent.ThreadPoolExecutor@7cd2745d[Terminated, pool size
= 0, active threads = 0, queued tasks = 0, completed tasks = 1] is
shutdown: true and terminated: false took: 0.000
seconds.    (org.apache.activemq.util.ThreadPoolUtils) [ActiveMQ
Connection Executor: vm://localhost#0] 
     [exec] 14 Dec 2020 15:41:32 | DEBUG Forcing shutdown of
ExecutorService: 
org.apache.activemq.store.kahadb.KahaDBStore$StoreTaskExecutor@30030b95
[Running, pool size = 0, active threads = 0, queued tasks = 0,
completed tasks = 0]    (org.apache.activemq.util.ThreadPoolUtils)
[ActiveMQ ShutdownHook] 
     [exec] 14 Dec 2020 15:41:32 | INFO  Stopped
KahaDB    (org.apache.activemq.store.kahadb.KahaDBStore) [ActiveMQ
ShutdownHook] 
     [exec] 14 Dec 2020 15:41:32 | DEBUG Shutdown of ExecutorService:
java.util.concurrent.ThreadPoolExecutor@14ef957c[Shutting down, pool
size = 1, active threads = 1, queued tasks = 1, completed tasks = 0] is
shutdown: true and terminated: false took: 0.000
seconds.    (org.apache.activemq.util.ThreadPoolUtils) [ActiveMQ
Connection Executor: vm://localhost#0] 
     [exec] 14 Dec 2020 15:41:32 | DEBUG Forcing shutdown of
ExecutorService:
java.util.concurrent.ThreadPoolExecutor@7a50bc0d[Running, pool size =
2, active threads = 0, queued tasks = 0, completed tasks =
6]    (org.apache.activemq.util.ThreadPoolUtils) [ActiveMQ Connection
Executor: vm://localhost#0] 
     [exec] 14 Dec 2020 15:41:32 | DEBUG Checkpoint
started.    (org.apache.activemq.store.kahadb.MessageDatabase)
[ActiveMQ ShutdownHook] 
     [exec] 14 Dec 2020 15:41:32 | DEBUG Checkpoint
done.    (org.apache.activemq.store.kahadb.MessageDatabase) [ActiveMQ
ShutdownHook] 
     [exec] java.lang.Thread.getStackTrace(Thread.java:1559)
     [exec]
org.apache.activemq.broker.BrokerService.start(BrokerService.java:612)
     [exec]
org.apache.activemq.transport.vm.VMTransportFactory.doCompositeConnect(
VMTransportFactory.java:127)
     [exec]
org.apache.activemq.transport.vm.VMTransportFactory.doConnect(VMTranspo
rtFactory.java:56)
     [exec]
org.apache.activemq.transport.TransportFactory.connect(TransportFactory
.java:65)
     [exec]
org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQC
onnectionFactory.java:331)
     [exec]
org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(
ActiveMQConnectionFactory.java:346)
     [exec]
org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(
ActiveMQConnectionFactory.java:304)
     [exec]
org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQ
ConnectionFactory.java:244)
     [exec]
org.springframework.jms.connection.SingleConnectionFactory.doCreateConn
ection(SingleConnectionFactory.java:342)
     [exec]
org.springframework.jms.connection.SingleConnectionFactory.initConnecti
on(SingleConnectionFactory.java:288)
     [exec]
org.springframework.jms.connection.SingleConnectionFactory.createConnec
tion(SingleConnectionFactory.java:225)
     [exec]
org.springframework.jms.support.JmsAccessor.createConnection(JmsAccesso
r.java:184)
     [exec]
org.springframework.jms.listener.AbstractJmsListeningContainer.createSh
aredConnection(AbstractJmsListeningContainer.java:405)
     [exec]
org.springframework.jms.listener.AbstractJmsListeningContainer.refreshS
haredConnection(AbstractJmsListeningContainer.java:390)
     [exec]
org.springframework.jms.listener.DefaultMessageListenerContainer.refres
hConnectionUntilSuccessful(DefaultMessageListenerContainer.java:885)
     [exec]
org.springframework.jms.listener.DefaultMessageListenerContainer.recove
rAfterListenerSetupFailure(DefaultMessageListenerContainer.java:861)
     [exec]
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncM
essageListenerInvoker.run(DefaultMessageListenerContainer.java:1012)
     [exec] java.lang.Thread.run(Thread.java:748)
     [exec] 14 Dec 2020 15:41:32 | WARN  Memory Usage for the Broker
(1024mb) is more than the maximum available for the JVM: 455 mb -
resetting to 70% of maximum available: 318
mb    (org.apache.activemq.broker.BrokerService)
[org.springframework.jms.listener.DefaultMess

Kind regards,

Martijn Brinkers



On Sat, 2020-12-12 at 18:17 -0700, Tim Bain wrote:
> Can you set a debugger breakpoint in one of the methods of the
> broker's
> initialization process and then trigger the behavior? Then you'll
> have
> access to the call stack (including the values of all variables at
> each
> call in the stack) that resulted in the decision to start a new
> broker, and
> hopefully by walking up the stack you'll be able to see what caused
> initialization to occur when it otherwise wouldn't be expected to.
> 
> Tim
> 
> On Fri, Dec 11, 2020, 11:11 AM Martijn Brinkers <
> martijn.l...@gmail.com>
> wrote:
> 
> > On 11-12-2020 18:37, Jean-Baptiste Onofre wrote:
> > > Do you use the vm connector in your broker service ?
> > 
> > Yes that is correct. I only use it for internal JMS messaging. The
> > transportConnector is therefore set vm://localhost
> > 
> > Kind regards,
> > 
> > Martijn Brinkers
> > 
> > 
> > > > Le 11 déc. 2020 à 16:17, Martijn Brinkers (list) <
> > 
> > martijn.l...@gmail.com> a écrit :
> > > > 
> > > > Unfortunately it looks like it's not easy (for me) to replicate
> > > > in a
> > > > simple application.
> > > > 
> > > > It looks like the issue is related to a shutdown hook somehow
> > > > resurrecting the broker after the broker was stopped.
> > > > 
> > > > Unfortunately the logging lines are a bit long so I hope it's
> > > > somewhat
> > > > readable.
> > > > 
> > > > The shutdown logging shows that ActiveMQ is shutting down but
> > > > then just
> > > > after the shutdown hook, a new instance of the BrokerService is
> > > > created
> > > > with the default values. For example it reports a warning about
> > > > max
> > > > memory 1024mb. In the spring config however the max memory is
> > > > set to
> > > > 20MB.
> > > > 
> > > > INFO  Apache ActiveMQ 5.16.0 (localhost, ID:martijn-laptop-
> > > > 45763-
> > > > 1607698489325-0:1) is shutting
> > > > down    (org.apache.activemq.broker.BrokerService) [ActiveMQ
> > > > ShutdownHook]
> > > > 
> > > > INFO  Connector vm://localhost
> > > > stopped    (org.apache.activemq.broker.TransportConnector)
> > > > [ActiveMQ
> > > > ShutdownHook]
> > > > 
> > > > INFO  PListStore:[/home/martijn/git/ciphermail-core/var/jms-
> > > > data/localhost/tmp_storage]
> > > > stopped    (org.apache.activemq.store.kahadb.plist.PListStoreIm
> > > > pl)
> > > > [ActiveMQ ShutdownHook]
> > > > 
> > > > INFO  Stopping async queue
> > > > tasks    (org.apache.activemq.store.kahadb.KahaDBStore)
> > > > [ActiveMQ
> > > > ShutdownHook]
> > > > 
> > > > INFO  Stopping async topic
> > > > tasks    (org.apache.activemq.store.kahadb.KahaDBStore)
> > > > [ActiveMQ
> > > > ShutdownHook]
> > > > 
> > > > INFO  Stopped
> > > > KahaDB    (org.apache.activemq.store.kahadb.KahaDBStore)
> > > > [ActiveMQ ShutdownHook]
> > > > 
> > > > WARN  Memory Usage for the Broker (1024mb) is more than the
> > > > maximum
> > > > available for the JVM: 455 mb - resetting to 70% of maximum
> > > > available:
> > > > 318 mb    (org.apache.activemq.broker.BrokerService)
> > > > [org.springframework.jms.listener.DefaultMessageListenerContain
> > > > er#0-1]
> > > > 
> > > > INFO  Using Persistence Adapter:
> > > > KahaDBPersistenceAdapter[/home/martijn/git/ciphermail-
> > > > core/activemq-
> > > > data/localhost/KahaDB]    (org.apache.activemq.broker.BrokerSer
> > > > vice)
> > > > [org.springframework.jms.listener.DefaultMessageListenerContain
> > > > er#0-1]
> > > > 
> > > > INFO  Apache ActiveMQ 5.16.0 (localhost, ID:martijn-laptop-
> > > > 45763-
> > > > 1607698489325-0:1) uptime 7.446
> > > > seconds    (org.apache.activemq.broker.BrokerService) [ActiveMQ
> > > > ShutdownHook]
> > > > 
> > > > INFO  Apache ActiveMQ 5.16.0 (localhost, ID:martijn-laptop-
> > > > 45763-
> > > > 1607698489325-0:1) is
> > > > shutdown    (org.apache.activemq.broker.BrokerService)
> > > > [ActiveMQ
> > > > ShutdownHook]
> > > > 
> > > > A simple test application does not show this issue.
> > > > 
> > > > If I disable (i.e., comment out) the following
> > > > DefaultMessageListenerContainer, then the shutdown works
> > > > normally.
> > > > 
> > > > <bean
> > > > class="org.springframework.jms.listener.DefaultMessageListenerC
> > > > ontainer
> > > > " >
> > > >    <property name="connectionFactory" ref="connectionFactory"/>
> > > >    <property name="destination" ref="certificateCreatedTopic"/>
> > > >    <property name="sessionTransacted" value="true" />
> > > >    <property name="pubSubDomain" value="true"/>
> > > >    <property name="subscriptionDurable" value="true" />
> > > >    <property name="clientId" value="ciphermail.gateway" />
> > > >    <property name="durableSubscriptionName" value="certificate-
> > > > created-listener" />
> > > > </bean>
> > > > 
> > > > For some reason adding DefaultMessageListenerContainer instance
> > > > somehow
> > > > results in restarting and instance of BrokerService which is
> > > > then
> > > > shutdown.
> > > > 
> > > > Any idea?
> > > > 
> > > > Kind regards,
> > > > 
> > > > Martijn Brinkers
> > > > 
> > > > On Fri, 2020-12-11 at 06:09 -0700, Tim Bain wrote:
> > > > > This sounds like a bug. Please submit a bug in JIRA, ideally
> > > > > attaching a
> > > > > minimal reproducer.
> > > > > 
> > > > > Thanks,
> > > > > Tim
> > > > > 
> > > > > On Fri, Dec 11, 2020, 5:58 AM Martijn Brinkers (list) <
> > > > > martijn.l...@gmail.com> wrote:
> > > > > 
> > > > > > I have embedded ActiveMQ inside a spring application.
> > > > > > 
> > > > > > The broker is configured in XML and I explicitly set the
> > > > > > dataDirectory:
> > > > > > 
> > > > > > <amq:broker useJmx="false" persistent="true"
> > > > > > dataDirectory="var/jms">
> > > > > >    <amq:transportConnectors>
> > > > > >        <amq:transportConnector uri="vm://localhost" />
> > > > > >    </amq:transportConnectors>
> > > > > > </amq:broker>
> > > > > > 
> > > > > > When I startup my application, the var/jms directory is
> > > > > > created and
> > > > > > JMS
> > > > > > messages are stored when required. If however I shutdown my
> > > > > > application, an addtional directory "activemq-
> > > > > > data/localhost/KahaDB" is
> > > > > > created. This only happens if "useShutdownHook" is true
> > > > > > (which is
> > > > > > the
> > > > > > default).
> > > > > > 
> > > > > > It looks like the shutdownhook tries to create the "data
> > > > > > directory"
> > > > > > but ignores the configured value and therefore uses the
> > > > > > default
> > > > > > data
> > > > > > directory name.
> > > > > > 
> > > > > > Is this a bug? Or did I make a configuration error?
> > > > > > 
> > > > > > Kind regards,
> > > > > > 
> > > > > > Martijn Brinkers
> > > > > > 
> > > > > > 
> > 
> > 

Reply via email to