[esb-issues] [JBoss JIRA] Commented: (JBESB-3473) Message Loss or premature execution termination in an action during shutdown
Kevin Conner (JIRA)
jira-events at lists.jboss.org
Fri Sep 10 11:17:49 EDT 2010
[ https://jira.jboss.org/browse/JBESB-3473?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12550147#action_12550147 ]
Kevin Conner commented on JBESB-3473:
-------------------------------------
Changing the MessageAwareListener code to the following should be sufficient.
if (null != message)
{
final Message pipelineMessage = message ;
final TransactionalRunner txRunner ;
try
{
final Object txHandle = transactionStrategy.suspend();
txRunner = new TransactionalRunner(pickUpCourier, pipelineMessage, txHandle);
}
catch (TransactionStrategyException ex)
{
_logger.warn("Caught transaction related exception: ", ex);
cleanCourier(pickUpCourier);
rollbackTransaction();
return ;
}
updateThreadCount(+1);
try
{
_execService.execute(txRunner);
}
catch (final RejectedExecutionException ree)
{
txRunner.run() ;
}
}
I'll trying to get a test case now, will then test and commit.
Also, using jms-jca-provider rather than jms-provider would use the JCA inflow codebase and not the MessageAwareListener codebase.
> Message Loss or premature execution termination in an action during shutdown
> ----------------------------------------------------------------------------
>
> Key: JBESB-3473
> URL: https://jira.jboss.org/browse/JBESB-3473
> Project: JBoss ESB
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Affects Versions: 4.9
> Environment: RHEL 64bit
> Reporter: Dave Siracusa
> Assignee: Kevin Conner
> Fix For: 4.9 CP1
>
>
> I'm able to reproduce JMS message loss or premature action termination during shutdown. I enqueued several thousand mesages into an ESB application. While the messages were being processed I toggle (stop/start) lifecycle state for the acting jms listeners via JMX in order to simulate shutdown. I noticed periodic warnings in the serverlog (listing 1). The final tally indicated message loss. Via code inspection the bug appears to be self-evident.
> Basically when the doStop method (JMXConsole) is called it sets state to STOPPING and immediately terminates the executor thread (MessageAwareListener.java). If the thread was currently processing bad things happen.
> I'm using transcated queues and it appears the JMS message transaction evaporates and the message is not returned to the queue. I added some code to AbstractThreadedManagedLifecycle.java to remedy the issue. It uses the default terminationPeriod (60 seconds), unless it is specified in the jboss-esb.xml file.
> AbstractThreadedManagedLifecycle.java
> ---------------------------------------
> protected void doStop()
> throws ManagedLifecycleException
> {
> runningLock.lock() ;
> try
> {
> if (isRunning())
> {
> setRunning(ManagedLifecycleThreadStatae.STOPPING) ;
> }
> // Dave Siracusa -start
> if (!waitUntilStopped())
> {
> throw new ManagedLifecycleException("Thread still active!") ;
> } // Dave Siracusa - end
> }
> finally
> {
> runningLock.unlock() ;
> }
> }
> MessageAwareListener.java
> ---------------------------
> protected void doStop()
> throws ManagedLifecycleException
> {
> super.doStop();
> _execService.shutdown() ;
> }
> Listing 1
> ----------
> 2010-09-01 15:04:40,924 WARN [org.jboss.soa.esb.listeners.lifecycle.AbstractThreadedManagedLifecycle] (Thread-200) Unexpected error from doRun()
> java.util.concurrent.RejectedExecutionException
> at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecutionThreadPoolExecutor.java:1768)
> at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767)
> at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658)
> at org.jboss.soa.esb.listeners.message.MessageAwareListener.waitForEventAndProcess(MessageAwareListener.java:359)
> at org.jboss.soa.esb.listeners.message.MessageAwareListener.doRun(MessageAwareListener.java:253)
> at org.jboss.soa.esb.listeners.lifecycle.AbstractThreadedManagedLifecycle.run(AbstractThreadedManagedLifecycle.java:115)
> at java.lang.Thread.run(Thread.java:619)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the esb-issues
mailing list