[
https://jira.jboss.org/jira/browse/JBTM-503?page=com.atlassian.jira.plugi...
]
Mauro Molinari updated JBTM-503:
--------------------------------
Attachment: JBossTS.patch
Hi Andrew,
this is the patch I prepared based on what we have discussed. I hope it can be a good
starting point for you.
Please note that I have left a TODO in ExpiredEntryMonitor.shutdown() because I think it
might be desirable to log the catching of an InterruptedException while waiting for the
completion of the monitor thread.
The patch is against 4.5.0GA codebase.
Shutdown the ExpiredEntryMonitor when stopping the RecoveryManager
------------------------------------------------------------------
Key: JBTM-503
URL:
https://jira.jboss.org/jira/browse/JBTM-503
Project: JBoss Transaction Manager
Issue Type: Feature Request
Security Level: Public(Everyone can see)
Components: Recovery
Affects Versions: 4.5
Environment: Tomcat + Spring + DBCP + JBossJTA
Reporter: Mauro Molinari
Assignee: Andrew Dinn
Attachments: JBossTS.patch
When the recovery manager is started, the implementation RecoveryManagerImple starts the
ExpiredEntryMonitor.
When you stop the recovery manager, however, the ExpiredEntryMonitor is not shut down.
On line 250 of com.arjuna.ats.internal.arjuna.recovery.RecoveryManagerImple there's
the line ExpiredEntryMonitor.shutdown() commented out, with a "TODO why?"
comment immediately before.
I don't know exactly what should be the lifecylce of ExpiredEntryMonitor versus that
of RecoveryManagerImple, however I think that one of the following should happen:
- ExpiredEntryMonitor is started when RecoveryManagerImple is started (rather than
constructed), so that it is shut down when the RecoveryManagerImple is stopped
OTHERWISE
- RecoveryManagerImple provides a way to "dispose" or "disable" it
and this includes the shutdown of ExpiredEntryMonitor
OTHERWISE
- it is documented that stopping the recovery manager needs the ExpiredEntryMonitor to be
stopped too: however, please consider that
com.arjuna.ats.internal.arjuna.recovery.ExpiredEntryMonitor.shutdown() throws a
NullPointerException if called while the ExpiredEntryMonitor has not been started before
and there is no public method to test if it has been started or not; so if I need to write
some code that stops the ExpiredEntryMonitor (without knowing if it has been started or
not) I have to write some ugly code like:
{code:java}
try
{
ExpiredEntryMonitor.shutdown();
}
catch(final NullPointerException e)
{
// ExpiredEntryMonitor had not been started
}
{code}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira