No, I didn't - I assumed XNIO objects should be instantiated by the ejb-client library (see my previous comment). Adding "org.jboss.xnio" to MANIFEST.MF global-modules in standalone-full.xml fixed the problem for now (local dependency gives ClassCastExceptions in some cases). My current config, if anyone needs this:
However, I'm still facing a small issue with context closing (same MDB test-case). If I leave an intentional leak, than everything "works" as expected:
12:55:55,416 INFO [com.example.service.InternalServiceBean] (EJB default - 2) !! INTERNAL BUSINESS METHOD !!
12:55:55,432 INFO [com.example.service.mdb.TestMDB] (Thread-1 (HornetQ-client-global-threads-1988690638)) Closing EJB context...
12:55:55,433 DEBUG [org.jboss.ejb.client.remoting.RemotingConnectionEJBReceiver] (Thread-1 (HornetQ-client-global-threads-1988690638)) Closing channelChannel ID e3ba16f7 (outbound) of Remoting connection 018d8cbf to localhost/127.0.0.1:4447
12:55:55,433 INFO [org.jboss.ejb.client.remoting] (Remoting "config-based-ejb-client-endpoint" task-4) EJBCLIENT000016: Channel Channel ID e3ba16f7 (outbound) of Remoting connection 018d8cbf to localhost/127.0.0.1:4447 can no longer process messages
12:55:55,438 DEBUG [org.jboss.ejb.client.remoting.ChannelAssociation] (Thread-1 (HornetQ-client-global-threads-1988690638)) Closing channel Channel ID e3ba16f7 (outbound) of Remoting connection 018d8cbf to localhost/127.0.0.1:4447
12:55:55,438 DEBUG [org.jboss.ejb.client.remoting.ChannelAssociation] (Thread-1 (HornetQ-client-global-threads-1988690638)) Registering a re-connect handler org.jboss.ejb.client.remoting.EJBClientContextConnectionReconnectHandler@2c234cf8 for broken channel Channel ID e3ba16f7 (outbound) of Remoting connection 018d8cbf to localhost/127.0.0.1:4447 in EJB client context org.jboss.ejb.client.EJBClientContext@2edbc947
12:55:55,450 INFO [com.example.service.mdb.TestMDB] (Thread-1 (HornetQ-client-global-threads-1988690638)) Context closed.
12:55:55,462 WARN [com.arjuna.ats.jta] (Thread-1 (HornetQ-client-global-threads-1988690638)) ARJUNA016041: prepare on < formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff7f000101:-544235e9:52134a3e:5b, node_name=1, branch_uid=0:ffff7f000101:-544235e9:52134a3e:60, subordinatenodename=null, eis_name=unknown eis name > (ResourceImpl{transactionKey=0:ffff7f000101:-544235e9:52134a3e:5b, ejbClientContext=org.jboss.ejb.client.EJBClientContext@2edbc947, nodeName='narnia', state=null}) failed with exception -: java.lang.IllegalStateException: EJBCLIENT000027: No EJBReceiver available for node name narnia
at org.jboss.ejb.client.EJBClientContext.requireNodeEJBReceiver(EJBClientContext.java:824) [jboss-ejb-client-1.0.23.Final.jar:1.0.23.Final]
at org.jboss.ejb.client.EJBClientContext.requireNodeEJBReceiverContext(EJBClientContext.java:865) [jboss-ejb-client-1.0.23.Final.jar:1.0.23.Final]
at org.jboss.ejb.client.EJBClientManagedTransactionContext$ResourceImpl.prepare(EJBClientManagedTransactionContext.java:230) [jboss-ejb-client-1.0.23.Final.jar:1.0.23.Final]
at com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord.topLevelPrepare(XAResourceRecord.java:213)
at com.arjuna.ats.arjuna.coordinator.BasicAction.doPrepare(BasicAction.java:2516)
at com.arjuna.ats.arjuna.coordinator.BasicAction.doPrepare(BasicAction.java:2483)
at com.arjuna.ats.arjuna.coordinator.BasicAction.prepare(BasicAction.java:2060)
at com.arjuna.ats.arjuna.coordinator.BasicAction.End(BasicAction.java:1482)
at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:98)
at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:162)
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1165)
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:126)
at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75)
at org.jboss.as.ejb3.inflow.MessageEndpointInvocationHandler.afterDelivery(MessageEndpointInvocationHandler.java:72) [jboss-as-ejb3-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_25]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_25]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_25]
at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_25]
at org.jboss.as.ejb3.inflow.AbstractInvocationHandler.handle(AbstractInvocationHandler.java:60) [jboss-as-ejb3-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at org.jboss.as.ejb3.inflow.MessageEndpointInvocationHandler.doInvoke(MessageEndpointInvocationHandler.java:136) [jboss-as-ejb3-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at org.jboss.as.ejb3.inflow.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:73) [jboss-as-ejb3-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at com.sun.proxy.$Proxy105.afterDelivery(Unknown Source)
at org.hornetq.ra.inflow.HornetQMessageHandler.onMessage(HornetQMessageHandler.java:322)
at org.hornetq.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:1016)
at org.hornetq.core.client.impl.ClientConsumerImpl.access$400(ClientConsumerImpl.java:52)
at org.hornetq.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1161)
at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1.run(OrderedExecutorFactory.java:106)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_25]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_25]
at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_25]
12:55:55,471 WARN [com.arjuna.ats.arjuna] (Thread-1 (HornetQ-client-global-threads-1988690638)) ARJUNA012073: BasicAction.End() - prepare phase of action-id 0:ffff7f000101:-544235e9:52134a3e:5b failed.
12:55:55,471 WARN [com.arjuna.ats.arjuna] (Thread-1 (HornetQ-client-global-threads-1988690638)) ARJUNA012075: Action Aborting
12:55:55,487 WARN [com.arjuna.ats.jta] (Thread-1 (HornetQ-client-global-threads-1988690638)) ARJUNA016045: attempted rollback of < formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff7f000101:-544235e9:52134a3e:5b, node_name=1, branch_uid=0:ffff7f000101:-544235e9:52134a3e:60, subordinatenodename=null, eis_name=unknown eis name > (ResourceImpl{transactionKey=0:ffff7f000101:-544235e9:52134a3e:5b, ejbClientContext=org.jboss.ejb.client.EJBClientContext@2edbc947, nodeName='narnia', state=null}) failed with exception code -: java.lang.IllegalStateException: EJBCLIENT000027: No EJBReceiver available for node name narnia
at org.jboss.ejb.client.EJBClientContext.requireNodeEJBReceiver(EJBClientContext.java:824) [jboss-ejb-client-1.0.23.Final.jar:1.0.23.Final]
at org.jboss.ejb.client.EJBClientContext.requireNodeEJBReceiverContext(EJBClientContext.java:865) [jboss-ejb-client-1.0.23.Final.jar:1.0.23.Final]
at org.jboss.ejb.client.EJBClientManagedTransactionContext$ResourceImpl.rollback(EJBClientManagedTransactionContext.java:251) [jboss-ejb-client-1.0.23.Final.jar:1.0.23.Final]
at com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord.topLevelAbort(XAResourceRecord.java:345)
at com.arjuna.ats.arjuna.coordinator.BasicAction.doAbort(BasicAction.java:2854)
at com.arjuna.ats.arjuna.coordinator.BasicAction.doAbort(BasicAction.java:2833)
at com.arjuna.ats.arjuna.coordinator.BasicAction.phase2Abort(BasicAction.java:1918)
at com.arjuna.ats.arjuna.coordinator.BasicAction.End(BasicAction.java:1495)
at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:98)
at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:162)
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1165)
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:126)
at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75)
at org.jboss.as.ejb3.inflow.MessageEndpointInvocationHandler.afterDelivery(MessageEndpointInvocationHandler.java:72) [jboss-as-ejb3-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_25]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_25]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_25]
at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_25]
at org.jboss.as.ejb3.inflow.AbstractInvocationHandler.handle(AbstractInvocationHandler.java:60) [jboss-as-ejb3-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at org.jboss.as.ejb3.inflow.MessageEndpointInvocationHandler.doInvoke(MessageEndpointInvocationHandler.java:136) [jboss-as-ejb3-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at org.jboss.as.ejb3.inflow.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:73) [jboss-as-ejb3-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at com.sun.proxy.$Proxy105.afterDelivery(Unknown Source)
at org.hornetq.ra.inflow.HornetQMessageHandler.onMessage(HornetQMessageHandler.java:322)
at org.hornetq.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:1016)
at org.hornetq.core.client.impl.ClientConsumerImpl.access$400(ClientConsumerImpl.java:52)
at org.hornetq.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1161)
at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1.run(OrderedExecutorFactory.java:106)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_25]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_25]
at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_25]
12:55:55,491 WARN [com.arjuna.ats.arjuna] (Thread-1 (HornetQ-client-global-threads-1988690638)) ARJUNA012091: Top-level abort of action 0:ffff7f000101:-544235e9:52134a3e:5b received TwoPhaseOutcome.FINISH_ERROR from com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord
12:55:55,492 WARN [org.hornetq.ra] (Thread-1 (HornetQ-client-global-threads-1988690638)) HQ152007: Unable to call after delivery: javax.resource.spi.LocalTransactionException: javax.transaction.RollbackException: ARJUNA016053: Could not commit transaction.
at org.jboss.as.ejb3.inflow.MessageEndpointInvocationHandler.afterDelivery(MessageEndpointInvocationHandler.java:88)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_25]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_25]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_25]
at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_25]
at org.jboss.as.ejb3.inflow.AbstractInvocationHandler.handle(AbstractInvocationHandler.java:60)
at org.jboss.as.ejb3.inflow.MessageEndpointInvocationHandler.doInvoke(MessageEndpointInvocationHandler.java:136)
at org.jboss.as.ejb3.inflow.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:73)
at com.sun.proxy.$Proxy105.afterDelivery(Unknown Source)
at org.hornetq.ra.inflow.HornetQMessageHandler.onMessage(HornetQMessageHandler.java:322) [hornetq-ra-2.3.0.CR1.jar:]
at org.hornetq.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:1016) [hornetq-core-client-2.3.0.CR1.jar:]
at org.hornetq.core.client.impl.ClientConsumerImpl.access$400(ClientConsumerImpl.java:52) [hornetq-core-client-2.3.0.CR1.jar:]
at org.hornetq.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1161) [hornetq-core-client-2.3.0.CR1.jar:]
at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1.run(OrderedExecutorFactory.java:106) [hornetq-core-client-2.3.0.CR1.jar:]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_25]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_25]
at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_25]
Caused by: javax.transaction.RollbackException: ARJUNA016053: Could not commit transaction.
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1177) [jbossjts-jacorb-4.17.3.Final.jar:4.17.3.Final (revision: 74343b48951c0fdab92316e56bfcaed605d620f6)]
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:126) [jbossjts-jacorb-4.17.3.Final.jar:4.17.3.Final (revision: 74343b48951c0fdab92316e56bfcaed605d620f6)]
at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75)
at org.jboss.as.ejb3.inflow.MessageEndpointInvocationHandler.afterDelivery(MessageEndpointInvocationHandler.java:72)
... 16 more
12:55:55,588 INFO [com.example.service.mdb.TestMDB] (Thread-4 (HornetQ-client-global-threads-1988690638)) On message: principal=anonymous
* No external datasource is involved.
* Setting durable=false on TestQueue doesn't change anything.