[
https://issues.apache.org/jira/browse/AMQ-4476?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13808931#comment-13808931
]
Claus Ibsen commented on AMQ-4476:
----------------------------------
Are you using the ActiveMQ RAR in WebSphere?
If so this RAR has been improved/fixed in AMQ 5.9 release. Can you give that a
try?
> ActiveMQ WebSphere 7 JMS Provider - MBD - message consumed even though
> transaction marked for rollback
> ------------------------------------------------------------------------------------------------------
>
> Key: AMQ-4476
> URL: https://issues.apache.org/jira/browse/AMQ-4476
> Project: ActiveMQ
> Issue Type: Bug
> Components: JMS client
> Affects Versions: 5.6.0, 5.7.0, 5.8.0
> Environment: Windows Server 2008 R2
> Reporter: Andrzej Więcław
>
> I have an EAR that is deployed to Websphere 7.
> It includes EJB module containing a couple of MDBs that are listening on
> Message Listener Port, pointing to connection factory and queue exposed by
> custom ActiveMQ JMS Provider.
> ActiveMQ JMS Provider configuration script (JACL):
> {code}
> import sys
> jmsProviderUrl = "tcp://x.x.x.x:61616"
> # Retrieve cell name
> cell = AdminControl.getCell()
> scope = "Cell=" + cell
> jmsProviderName = "ActiveMQ"
> node = sys.argv[0]
> server = sys.argv[1]
> # ----------------
> # Add JMS Provider
> # ----------------
> attributes = [["description", "ActiveMQ JMS Provider"], \
> ["propertySet", [["resourceProperties", [ \
> [["name",
> "java.naming.connectionFactoryNames"], ["type", "java.lang.String"],
> ["value", "ConnectionFactory,XAConnectionFactory"]], \
> [["name",
> "java.naming.queue.MXITEMIN"], ["type", "java.lang.String"], ["value",
> "MX.ITEM.IN"]] \
> ] \
> ]] \
> ]]
> AdminJMS.createJMSProviderAtScope(scope, jmsProviderName, \
>
> "org.apache.activemq.jndi.ActiveMQWASInitialContextFactory", \
> jmsProviderUrl, attributes)
> # ----------------------
> # Add Connection Factory
> # ----------------------
> attributes = [["description", "ActiveMQ Queue Connection Factory"], \
> ["type", "UNIFIED"], \
> ["connectionPool", [ \
> ["connectionTimeout", "1800"], \
> ["maxConnections", "6"], \
> ["minConnections", "0"], \
> ["reapTime", "180"], \
> ["unusedTimeout", "1800"], \
> ["agedTimeout", "1800"], \
> ["purgePolicy", "EntirePool"] \
> ] \
> ], \
> ["sessionPool", [ \
> ["connectionTimeout", "1800"], \
> ["maxConnections", "1"], \
> ["minConnections", "0"], \
> ["reapTime", "10"], \
> ["unusedTimeout", "1800"], \
> ["agedTimeout", "1800"], \
> ["purgePolicy", "EntirePool"] \
> ] \
> ]]
> AdminJMS.createGenericJMSConnectionFactoryAtScope(scope, jmsProviderName,
> "ACTIVEMQCF", \
> "if/maximo/activemq/cf",
> "XAConnectionFactory", \
> attributes)
> # ----------------------
> # Add Queues
> # ----------------------
> # 1. MX.ASSET.IN
> attributes = [["description", "ActiveMQ ASSET Queue"], ["type", "QUEUE"]]
> AdminJMS.createGenericJMSDestinationAtScope(scope, jmsProviderName,
> "MAXIMO04IN", \
> "if/maximo/activemq/q04cin",
> "MXASSETIN", \
> attributes)
> # ---------------------------------------
> # Create IF-server Message Listener Ports
> # ---------------------------------------
> # PORTMAXIMO01IN
> attributes = [["description", "ActiveMQ Item"]]
> AdminServerManagement.configureListenerPortForMessageListenerService(node,
> server, "PORTMAXIMO01IN", \
>
> "if/maximo/activemq/cf", \
>
> "if/maximo/activemq/q01cin", \
> 1, 5, 1,
> attributes)
> {code}
> MDB code:
> {code}
> public class MQQueueListener implements MessageListener, MessageDrivenBean {
>
> protected MessageDrivenContext beanCtx;
> public void setMessageDrivenContext(MessageDrivenContext ctx)
> throws EJBException {
> // Set the bean context.
> beanCtx = ctx;
> }
> public void ejbCreate() throws EJBException {
> [...]
> }
> public void ejbRemove() throws EJBException {
> [...]
> }
> public void onMessage(Message message) {
> [...]
> try {
> [...]
> } catch (Exception e) {
> // Rollback message to external queue.
> beanCtx.setRollbackOnly();
> }
> }
> }
> {code}
> When something goes wrong with the message processing and Exception is thrown
> regardless if beanCtx.setRollbackOnly(); is executed or not message is not
> returned back to the queue - it simply disappears.
> The same applies if Exception is re-thrown as RuntimeException instead of
> beanCtx.setRollbackOnly() call.
> ------------------
> Expected behavior:
> ------------------
> Message that could not be processed is returned to the ActiveMQ queue and
> available for reprocessing (according to WebSphere reprocessing policy)
--
This message was sent by Atlassian JIRA
(v6.1#6144)