You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicemix.apache.org by "Martin Landua (JIRA)" <ji...@apache.org> on 2007/06/26 09:44:32 UTC
[jira] Created: (SM-981) Transaction Exception due to ServiceMix
JMS Provider
Transaction Exception due to ServiceMix JMS Provider
----------------------------------------------------
Key: SM-981
URL: https://issues.apache.org/activemq/browse/SM-981
Project: ServiceMix
Issue Type: Bug
Components: servicemix-jms
Affects Versions: 3.1
Environment: All platforms. The bug was encountered on ServiceMix 3.1 running in JBoss against JBossMQ.
Reporter: Martin Landua
Fix For: 3.2
Attachments: servicemix-jms.patch
Hi all,
under heavy load, we have encountered a problem when writing messages using the JMS provider in a synchronous, transactional flow.
The problem is that in the code (lines 100 and up)
producer.send(msg);
exchange.setStatus(ExchangeStatus.DONE);
channel.send(exchange);
} finally {
if (session != null) {
session.close();
}
if (connection != null) {
connection.close();
}
}
it is possible that the DONE state would return to the originator faster than the session and the connection is closed in the finally section. If this happens, the originator (and therefore owner of the transaction) will first commit and after this the provider would close the connection.
This results in a transaction exception.
>From what we can tell, it should read like this:
producer.send(msg);
} finally {
if (session != null) {
session.close();
}
if (connection != null) {
connection.close();
}
}
exchange.setStatus(ExchangeStatus.DONE);
channel.send(exchange);
due to which we guarantee that the connection is safely closed before we send the confirmation back to the consumer.
All of our load tests succeeded after this change.
Best regards
Martin Landua
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Resolved: (SM-981) Transaction Exception due to ServiceMix
JMS Provider
Posted by "Guillaume Nodet (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/activemq/browse/SM-981?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Guillaume Nodet resolved SM-981.
--------------------------------
Resolution: Fixed
Fix Version/s: 3.1.3
Assignee: Guillaume Nodet
Thanks a lot for this patch!
Sending servicemix-jms/src/main/java/org/apache/servicemix/jms/jca/JcaProviderProcessor.java
Transmitting file data .
Committed revision 580020.
Sending servicemix-jms/src/main/java/org/apache/servicemix/jms/jca/JcaProviderProcessor.java
Transmitting file data .
Committed revision 580023.
> Transaction Exception due to ServiceMix JMS Provider
> ----------------------------------------------------
>
> Key: SM-981
> URL: https://issues.apache.org/activemq/browse/SM-981
> Project: ServiceMix
> Issue Type: Bug
> Components: servicemix-jms
> Affects Versions: 3.1
> Environment: All platforms. The bug was encountered on ServiceMix 3.1 running in JBoss against JBossMQ.
> Reporter: Martin Landua
> Assignee: Guillaume Nodet
> Fix For: 3.1.3, 3.2
>
> Attachments: servicemix-jms.patch
>
>
> Hi all,
> under heavy load, we have encountered a problem when writing messages using the JMS provider in a synchronous, transactional flow.
> The problem is that in the code (lines 100 and up)
> producer.send(msg);
> exchange.setStatus(ExchangeStatus.DONE);
> channel.send(exchange);
> } finally {
> if (session != null) {
> session.close();
> }
> if (connection != null) {
> connection.close();
> }
> }
> it is possible that the DONE state would return to the originator faster than the session and the connection is closed in the finally section. If this happens, the originator (and therefore owner of the transaction) will first commit and after this the provider would close the connection.
> This results in a transaction exception.
> From what we can tell, it should read like this:
> producer.send(msg);
> } finally {
> if (session != null) {
> session.close();
> }
> if (connection != null) {
> connection.close();
> }
> }
> exchange.setStatus(ExchangeStatus.DONE);
> channel.send(exchange);
> due to which we guarantee that the connection is safely closed before we send the confirmation back to the consumer.
> All of our load tests succeeded after this change.
> Best regards
> Martin Landua
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.