Nice work!

So one final grievance. This has to do with MDBs... we see this message
spammed to sysout all the time when an MDB consumes a message:

Sep 04, 2019 9:41:37 AM org.apache.geronimo.connector.work.WorkerContext run
INFO: Removing non-required WorkContextHandler with no context:
org.apache.geronimo.connector.work.TransactionContextHandler@51541c25
Sep 04, 2019 9:41:37 AM org.apache.geronimo.connector.work.WorkerContext run
INFO: Removing non-required WorkContextHandler with no context:
org.apache.openejb.core.security.SecurityContextHandler@5f93f87f
Sep 04, 2019 9:41:37 AM org.apache.geronimo.connector.work.WorkerContext run
INFO: Removing non-required WorkContextHandler with no context:
org.apache.geronimo.connector.work.HintsContextHandler@5bac7755

Any clue how to squelch just these messages? We want the rest of the INFO
startup/stop messages. If possible I'd like to turn this off by default.



On Wed, Sep 4, 2019 at 9:36 AM Jonathan Gallimore <
[email protected]> wrote:

> Yep, should be on 7.0.x, 7.1.x and master.
>
> Jon
>
> On Wed, Sep 4, 2019 at 3:35 PM Jonathan S. Fisher <[email protected]>
> wrote:
>
> > Nice, thanks for cleaning that merge up. This got ported to both 7.1.x
> and
> > master?
> >
> >
> >
> > On Wed, Sep 4, 2019 at 8:10 AM Jonathan Gallimore <
> > [email protected]> wrote:
> >
> > > Ok, think I found it. The code in
> AutoConnectionTracker.handleObtained()
> > > changed ever so slightly, but the effect was proxyConnection() didn't
> get
> > > called. I've fixed that, and the test passes. I've also run the JMS
> > > Arquillian tests which work ok too.
> > >
> > > Cheers!
> > >
> > > Jon
> > >
> > > On Wed, Sep 4, 2019 at 12:16 PM Jonathan Gallimore <
> > > [email protected]> wrote:
> > >
> > > > Thanks Jonathan! I merged this in, and ported to 7.1.x. I've run
> into a
> > > > test failure
> > > > with
> org.apache.openejb.resource.GeronimoConnectionManagerFactoryTest.
> > No
> > > > idea what the root cause is yet - checking it out. I haven't pushed
> > this
> > > to
> > > > master yet (will try and resolve that test issue first).
> > > >
> > > > Thanks
> > > >
> > > > Jon
> > > >
> > > > On Tue, Sep 3, 2019 at 9:07 PM Jonathan S. Fisher <
> [email protected]>
> > > > wrote:
> > > >
> > > >> Cool! And you're welcome! JMS, ActiveMQ, and XA transactions are
> > pretty
> > > >> key
> > > >> for us; they form the building blocks for us to scale horizontally
> > > (Kafka
> > > >> like patterns).
> > > >>
> > > >> I just ran a 100,000 messages through the code in the PR without
> > > problems
> > > >> or memory leaks, so I'm not worried about that Arquillian test
> failing
> > > at
> > > >> 10k messages.
> > > >>
> > > >> On Tue, Sep 3, 2019 at 2:37 PM Jonathan Gallimore <
> > > >> [email protected]> wrote:
> > > >>
> > > >> > I knew you'd know some magic to help with this - thank you! Just
> > > >> looking at
> > > >> > your PR now. Will give it a test shortly, but it looks good to me.
> > > >> >
> > > >> > Jon
> > > >> >
> > > >> > On Tue, Sep 3, 2019 at 3:08 PM Jonathan S. Fisher <
> > [email protected]
> > > >
> > > >> > wrote:
> > > >> >
> > > >> > > There are actually a few log messages we regularly ignore all
> the
> > > time
> > > >> > from
> > > >> > > the transaction manager ::wince face:: I'm not sure if we should
> > be
> > > >> > > concerned with that one.
> > > >> > >
> > > >> > > On your test, first, how is the broker xml declared? Often
> > something
> > > >> that
> > > >> > > trips our newbies up to TomEE is having a persistent broker that
> > is
> > > >> > storing
> > > >> > > messages between TomEE runs. The tricky thing is that the broker
> > > store
> > > >> > does
> > > >> > > always appear in /target, so it might not get cleaned up with
> mvn
> > > >> clean
> > > >> > > install. As such, for local development we use this
> > > >> > > URL:
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> broker:(vm://localhost)?persistent=false&amp;deleteAllMessagesOnStartup=true.
> > > >> > > Next, on JMSReceiverBean, you're missing transactionAttribute.
> > > >> > Technically
> > > >> > > it should work without it, but I'd add it just in case. Finally,
> > I'd
> > > >> add
> > > >> > a
> > > >> > > small thread.sleep, or check to the queue length == 0 before
> doing
> > > >> your
> > > >> > > assert on messagecounter. It could be you're beating the
> receiver
> > > >> bean to
> > > >> > > the finish line. The default messaging mode is auto-ack, so
> > > >> technically
> > > >> > the
> > > >> > > message just has to be on the broker, it doesn't have to be
> > > processed
> > > >> > > before your sender bean will return.
> > > >> > >
> > > >> > >
> > > >> > >
> > > >> > >
> > > >> > >
> > > >> > > On Mon, Sep 2, 2019 at 2:28 PM Jonathan Gallimore <
> > > >> > > [email protected]> wrote:
> > > >> > >
> > > >> > > > In case it means anything to anyone, the unexpected output I'm
> > > >> getting
> > > >> > is
> > > >> > > > an abandoned connection notification:
> > > >> > > >
> > > >> > > > WARNING: Transaction complete, but connection still has
> handles
> > > >> > > associated:
> > > >> > > > ManagedConnectionInfo:
> > > >> > > >
> > > >>
> org.apache.geronimo.connector.outbound.ManagedConnectionInfo@5b5a4aed.
> > > >> > > mc:
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> [org.apache.openejb.resource.activemq.jms2.TomEEManagedConnection@37e69c43
> > > >> > > > ,ActiveMQConnection
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> {id=ID:MacBook-Pro.jlpsoftwareltd.net-50025-1567452049768-7:1,clientId=ID:MacBook-Pro.jlpsoftwareltd.net-50025-1567452049768-6:1,started=false}]]
> > > >> > > > Abandoned connection information:
> > > >> > > >   Connection handle opened at
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.geronimo.connector.outbound.ConnectionInfo.setTrace(ConnectionInfo.java:119),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.geronimo.connector.outbound.ConnectionHandleInterceptor.getConnection(ConnectionHandleInterceptor.java:57),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.geronimo.connector.outbound.TCCLInterceptor.getConnection(TCCLInterceptor.java:39),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.geronimo.connector.outbound.ConnectionTrackingInterceptor.getConnection(ConnectionTrackingInterceptor.java:66),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.geronimo.connector.outbound.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:81),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.activemq.ra.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:94),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.activemq.ra.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:67),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.resource.activemq.jms2.JMSContextImpl.connection(JMSContextImpl.java:83),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.resource.activemq.jms2.JMSContextImpl.session(JMSContextImpl.java:99),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.resource.activemq.jms2.JMSContextImpl.createQueue(JMSContextImpl.java:309),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.resource.activemq.jms2.cdi.JMS2CDIExtension$InternalJMSContext.createQueue(JMS2CDIExtension.java:371),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.arquillian.tests.jms.JMSSenderBean.sendToQueue(JMSSenderBean.java:37),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.arquillian.tests.jms.JMSSenderBean.sendToQueue(JMSSenderBean.java:33),
> > > >> > > > sun.reflect.GeneratedMethodAccessor42.invoke(Unknown Source),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:191),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:102),
> > > >> > > > sun.reflect.GeneratedMethodAccessor35.invoke(Unknown Source),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:205),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:186),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.core.singleton.SingletonContainer._invoke(SingletonContainer.java:272),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.core.singleton.SingletonContainer.invoke(SingletonContainer.java:221),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:265),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:260),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:89),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:347),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.arquillian.tests.jms.JMSSenderBean$$LocalBeanProxy.sendToQueue(org/apache/openejb/arquillian/tests/jms/JMSSenderBean.java),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.arquillian.tests.jms.JMSContextInjectionTest.testShouldSendAndReceiveMessages(JMSContextInjectionTest.java:61),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47),
> > > >> > > >
> > > >>
> org.jboss.arquillian.junit.Arquillian$8$1.invoke(Arquillian.java:379),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.container.test.impl.execution.LocalTestExecuter.execute(LocalTestExecuter.java:60),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:103),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:85),
> > > >> > > >
> > > >>
> org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:143),
> > > >> > > >
> > > >>
> org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:114),
> > > >> > > >
> > org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.container.test.impl.client.protocol.local.LocalContainerMethodExecutor.invoke(LocalContainerMethodExecutor.java:50),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.container.test.impl.execution.RemoteTestExecuter.execute(RemoteTestExecuter.java:109),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:103),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:85),
> > > >> > > >
> > > >>
> org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:143),
> > > >> > > >
> > > >>
> org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:114),
> > > >> > > >
> > org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.container.test.impl.execution.ClientTestExecuter.execute(ClientTestExecuter.java:57),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:103),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:85),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.arquillian.common.TestObserver.switchLoader(TestObserver.java:98),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.arquillian.common.TestObserver.observesTest(TestObserver.java:75),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:92),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.container.test.impl.client.ContainerEventController.createContext(ContainerEventController.java:142),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.container.test.impl.client.ContainerEventController.createTestContext(ContainerEventController.java:129),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:92),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.test.impl.TestContextHandler.createTestContext(TestContextHandler.java:130),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:92),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:92),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:92),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:73),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:92),
> > > >> > > >
> > > >>
> org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:143),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.test(EventTestRunnerAdaptor.java:136),
> > > >> > > >
> > > >>
> org.jboss.arquillian.junit.Arquillian$8.evaluate(Arquillian.java:372),
> > > >> > > >
> > > >>
> org.jboss.arquillian.junit.Arquillian$4.evaluate(Arquillian.java:246),
> > > >> > > >
> > > >> >
> > >
> org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:431),
> > > >> > > >
> > > >>
> org.jboss.arquillian.junit.Arquillian.access$200(Arquillian.java:55),
> > > >> > > >
> > > >>
> org.jboss.arquillian.junit.Arquillian$5.evaluate(Arquillian.java:260),
> > > >> > > >
> > > >>
> org.jboss.arquillian.junit.Arquillian$7$1.invoke(Arquillian.java:324),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.container.test.impl.execution.ClientBeforeAfterLifecycleEventExecuter.execute(ClientBeforeAfterLifecycleEventExecuter.java:99),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.container.test.impl.execution.ClientBeforeAfterLifecycleEventExecuter.on(ClientBeforeAfterLifecycleEventExecuter.java:72),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:103),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:85),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.arquillian.common.TestObserver.switchLoader(TestObserver.java:98),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.openejb.arquillian.common.TestObserver.observesTest(TestObserver.java:75),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:92),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.container.test.impl.client.ContainerEventController.createContext(ContainerEventController.java:142),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.container.test.impl.client.ContainerEventController.createBeforeContext(ContainerEventController.java:124),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:92),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.test.impl.TestContextHandler.createTestContext(TestContextHandler.java:130),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:92),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:92),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:92),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:73),
> > > >> > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
> > > >> > > > java.lang.reflect.Method.invoke(Method.java:498),
> > > >> > > >
> > > >> >
> > > >>
> > >
> org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:92),
> > > >> > > >
> > > >>
> org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:143),
> > > >> > > >
> > > >>
> org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:114),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.fireCustomLifecycle(EventTestRunnerAdaptor.java:159),
> > > >> > > >
> > > >>
> org.jboss.arquillian.junit.Arquillian$7.evaluate(Arquillian.java:317),
> > > >> > > > org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57),
> > > >> > > > org.junit.runners.ParentRunner$3.run(ParentRunner.java:290),
> > > >> > > >
> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71),
> > > >> > > >
> > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288),
> > > >> > > >
> org.junit.runners.ParentRunner.access$000(ParentRunner.java:58),
> > > >> > > >
> > org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268),
> > > >> > > >
> > > >>
> org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:205),
> > > >> > > >
> > > >> >
> > >
> org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:431),
> > > >> > > >
> > > >>
> org.jboss.arquillian.junit.Arquillian.access$200(Arquillian.java:55),
> > > >> > > >
> > > >>
> org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:219),
> > > >> > > > org.junit.runners.ParentRunner.run(ParentRunner.java:363),
> > > >> > > >
> org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:167),
> > > >> > > > org.junit.runners.Suite.runChild(Suite.java:128),
> > > >> > > > org.junit.runners.Suite.runChild(Suite.java:27),
> > > >> > > > org.junit.runners.ParentRunner$3.run(ParentRunner.java:290),
> > > >> > > >
> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71),
> > > >> > > >
> > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288),
> > > >> > > >
> org.junit.runners.ParentRunner.access$000(ParentRunner.java:58),
> > > >> > > >
> > org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268),
> > > >> > > > org.junit.runners.ParentRunner.run(ParentRunner.java:363),
> > > >> > > >
> > > >>
> org.apache.maven.surefire.junitcore.JUnitCore.run(JUnitCore.java:55),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:137),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeEager(JUnitCoreWrapper.java:107),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:83),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:75),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:157),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:386),
> > > >> > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:323),
> > > >> > > > org.apache.
> > > >> > > >
> > > >> > > > Also, I see out by one errors - e.g. if I send 200 messages,
> > > >> sometimes
> > > >> > I
> > > >> > > > receive 201 or 199. Not sure if its related to the above
> warning
> > > or
> > > >> > not.
> > > >> > > >
> > > >> > > > Jon
> > > >> > > >
> > > >> > > > On Mon, Sep 2, 2019 at 8:25 PM Jonathan Gallimore <
> > > >> > > > [email protected]> wrote:
> > > >> > > >
> > > >> > > > > I had a play around with this, and got my previously failing
> > > >> > > > > JMSContextInjectionTest to work -- some of the time. (
> > > >> > > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> https://github.com/apache/tomee/blob/e58ff848a3a80938d4d99fc9bcfeaade5a72d644/arquillian/arquillian-tomee-tests/arquillian-tomee-jms-tests/src/test/java/org/apache/openejb/arquillian/tests/jms/JMSContextInjectionTest.java
> > > >> > > > > ).
> > > >> > > > >
> > > >> > > > > I'm getting some log output that I'm not expecting so I've
> > > rolled
> > > >> > back
> > > >> > > my
> > > >> > > > > removal of @Ignore so I can dig into it some more.
> > > >> > > > >
> > > >> > > > > Jon
> > > >> > > > >
> > > >> > > > > On Tue, Aug 27, 2019 at 5:36 PM Jonathan Gallimore <
> > > >> > > > > [email protected]> wrote:
> > > >> > > > >
> > > >> > > > >> Hi Jonathan
> > > >> > > > >>
> > > >> > > > >> Thanks for this. I think I had run into some of the things
> > you
> > > >> > fixed I
> > > >> > > > >> little while back. I'll take a look at your change later
> > today.
> > > >> > Happy
> > > >> > > > for
> > > >> > > > >> you to commit and I can review after, too. :)
> > > >> > > > >>
> > > >> > > > >> Cheers
> > > >> > > > >>
> > > >> > > > >> The other Jonathan
> > > >> > > > >>
> > > >> > > > >>
> > > >> > > > >> On Tue, Aug 27, 2019 at 2:59 AM Jonathan S. Fisher <
> > > >> > > [email protected]>
> > > >> > > > >> wrote:
> > > >> > > > >>
> > > >> > > > >>>
> > > >> > > > >>>
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> https://github.com/exabrial/tomee/commit/08dd4c744818702f3be5edfd8a1c4cf2b69d524d
> > > >> > > > >>>
> > > >> > > > >>> With these patches the JMS2.0 API works pretty well now :)
> > If
> > > >> > anyone
> > > >> > > > >>> wants
> > > >> > > > >>> to review, please go ahead, otherwise I'll commit them
> > > tomorrow.
> > > >> > > > >>>
> > > >> > > > >>> cheers,
> > > >> > > > >>> - [The other] Jonathan
> > > >> > > > >>>
> > > >> > > > >>> On Mon, Aug 26, 2019 at 3:45 PM Jonathan S. Fisher <
> > > >> > > [email protected]
> > > >> > > > >
> > > >> > > > >>> wrote:
> > > >> > > > >>>
> > > >> > > > >>> > I've narrowed down the problem to AutoConnectionTracker.
> > > It's
> > > >> not
> > > >> > > > >>> > completing, which isn't allowing the connections to be
> > > >> returned
> > > >> > to
> > > >> > > > the
> > > >> > > > >>> pool.
> > > >> > > > >>> >
> > > >> > > > >>> >
> > > >> > > > >>>
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> https://github.com/apache/tomee/blob/master/container/openejb-core/src/main/java/org/apache/openejb/resource/AutoConnectionTracker.java#L174
> > > >> > > > >>> >
> > > >> > > > >>> > getResource() is throwing an IllegalStateException. The
> > > >> JavaDoc (
> > > >> > > > >>> >
> > > >> > > > >>>
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> https://docs.oracle.com/javaee/7/api/javax/transaction/TransactionSynchronizationRegistry.html#getResource-java.lang.Object-
> > > >> > > > >>> )
> > > >> > > > >>> > states it should throw an ISE if a current transaction
> is
> > > not
> > > >> > > Active.
> > > >> > > > >>> The
> > > >> > > > >>> > transaction is in the state ROLLED_BACK when
> > > >> > AutoConnectionTracker
> > > >> > > > >>> tries to
> > > >> > > > >>> > call getResource().
> > > >> > > > >>> >
> > > >> > > > >>> > I think the Geronimo implementation (
> > > >> > > > >>> >
> > > >> > > > >>>
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> https://github.com/apache/geronimo-txmanager/blame/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java#L203
> > > >> > > > >>> )
> > > >> > > > >>> > maybe be a little too strict. The JTA Spec pdf doesn't
> > offer
> > > >> > exact
> > > >> > > > >>> hints of
> > > >> > > > >>> > which statuses (
> > > >> > > > >>> >
> > > >> >
> https://docs.oracle.com/javaee/7/api/javax/transaction/Status.html
> > > >> > > )
> > > >> > > > >>> > should be have getResource _not_ throw an ISE
> > > unfortunately. I
> > > >> > was
> > > >> > > > >>> thinking
> > > >> > > > >>> > of changing Geronimo's implementation to check for
> > anything
> > > >> > > > >>> > but STATUS_UNKNOWN, and STATUS_NO_TRANSACTION.
> > > >> > > > >>> >
> > > >> > > > >>> > The other way is to cast Transaction to the Geronimo
> > > >> > implementation
> > > >> > > > and
> > > >> > > > >>> > use Geronimo specific APIs to get call getResource(). Do
> > you
> > > >> guys
> > > >> > > > have
> > > >> > > > >>> any
> > > >> > > > >>> > preference which route I should take to fix?
> > > >> > > > >>> >
> > > >> > > > >>> >
> > > >> > > > >>> > On Mon, Aug 26, 2019 at 9:15 AM Jonathan S. Fisher <
> > > >> > > > [email protected]
> > > >> > > > >>> >
> > > >> > > > >>> > wrote:
> > > >> > > > >>> >
> > > >> > > > >>> >>
> > > >> > > >
> > > >>
> https://github.com/exabrial/tomee-jms2-bug/tree/connection-pool-leak
> > > >> > > > >>> >>
> > > >> > > > >>> >> Here's a project that reproduces the bug. This project
> > > >> > > intentionally
> > > >> > > > >>> >> exceeds the transaction timeout (of 1s). Each
> invocation,
> > > the
> > > >> > > > >>> connection is
> > > >> > > > >>> >> not returned to the pool and eventually you run out,
> > > causing
> > > >> > your
> > > >> > > > >>> >> application to freeze.
> > > >> > > > >>> >>
> > > >> > > > >>> >>
> > > >> > > > >>> >>
> > > >> > > > >>> >> On Fri, Aug 23, 2019 at 2:37 PM Jonathan S. Fisher <
> > > >> > > > >>> [email protected]>
> > > >> > > > >>> >> wrote:
> > > >> > > > >>> >>
> > > >> > > > >>> >>> Hello Apache friends :) I have a question about the
> JTA
> > > and
> > > >> > > JMS/RA
> > > >> > > > >>> specs:
> > > >> > > > >>> >>>
> > > >> > > > >>> >>> If you borrow something from a RA, like a JMS
> > Connection,
> > > >> and
> > > >> > > > you're
> > > >> > > > >>> in
> > > >> > > > >>> >>> XA Transaction, is it necessary to call
> > > connection.close()?
> > > >> It
> > > >> > > > would
> > > >> > > > >>> seem
> > > >> > > > >>> >>> JTA should be smart enough to know the connection is
> > > >> enrolled
> > > >> > > for 2
> > > >> > > > >>> phase
> > > >> > > > >>> >>> commit and should be smart enough to close it, but I'm
> > not
> > > >> sure
> > > >> > > if
> > > >> > > > >>> that's
> > > >> > > > >>> >>> part of the spec.
> > > >> > > > >>> >>>
> > > >> > > > >>> >>> In TomEE 7.0.6 we're noticing that if you borrow a JMS
> > > >> > Connection
> > > >> > > > >>> with
> > > >> > > > >>> >>> connectionFactory.createConnection(), and your code
> > fails
> > > to
> > > >> > call
> > > >> > > > >>> close()
> > > >> > > > >>> >>> before the transaction completion, the connection
> leaks.
> > > >> (And
> > > >> > > > >>> >>> unfortunately, calling close() after the transaction
> > > >> completes
> > > >> > > > >>> doesn't
> > > >> > > > >>> >>> mitigate the problem). It took awhile for us to track
> > this
> > > >> > down.
> > > >> > > > >>> >>>
> > > >> > > > >>> >>> This becomes a huge problem if you're calling external
> > > >> services
> > > >> > > in
> > > >> > > > >>> your
> > > >> > > > >>> >>> transaction. Let's say you have a reasonable
> transaction
> > > >> > timeout
> > > >> > > of
> > > >> > > > >>> 30s
> > > >> > > > >>> >>> set. You call three services, and they end up taking
> > 15s a
> > > >> > piece.
> > > >> > > > >>> Even if
> > > >> > > > >>> >>> you're doing the right thing and you have
> > > connection.close()
> > > >> > in a
> > > >> > > > >>> finally
> > > >> > > > >>> >>> block, because your transaction isn't active when you
> > call
> > > >> > close,
> > > >> > > > it
> > > >> > > > >>> leaks
> > > >> > > > >>> >>> and it just gets "stuck" as an active connection,
> which
> > > >> > > eventually
> > > >> > > > >>> you hit
> > > >> > > > >>> >>> the pool limit and your app freezes.
> > > >> > > > >>> >>>
> > > >> > > > >>> >>> On a separate note, we noticed if you open a
> connection
> > > >> outside
> > > >> > > of
> > > >> > > > >>> the
> > > >> > > > >>> >>> scope of a transaction, then start a transaction, then
> > > >> create a
> > > >> > > > >>> session
> > > >> > > > >>> >>> with session_transacted option, the session does not
> > > >> > participate
> > > >> > > in
> > > >> > > > >>> the JTA
> > > >> > > > >>> >>> (which seems out of spec). One most open the
> connection
> > > >> inside
> > > >> > > the
> > > >> > > > >>> >>> transaction, AND open the session in the transaction,
> > and
> > > >> close
> > > >> > > the
> > > >> > > > >>> >>> connection in the transaction for everything to work.
> > > >> > > > >>> >>>
> > > >> > > > >>> >>> I'll get a reproducing project created, but I was
> > curious
> > > if
> > > >> > > anyone
> > > >> > > > >>> knew
> > > >> > > > >>> >>> offhand what the spec says.
> > > >> > > > >>> >>>
> > > >> > > > >>> >>> cheers, and thanks,
> > > >> > > > >>> >>> -[the other] Jonathan
> > > >> > > > >>> >>>
> > > >> > > > >>> >>> --
> > > >> > > > >>> >>> Jonathan | [email protected]
> > > >> > > > >>> >>> Pessimists, see a jar as half empty. Optimists, in
> > > contrast,
> > > >> > see
> > > >> > > it
> > > >> > > > >>> as
> > > >> > > > >>> >>> half full.
> > > >> > > > >>> >>> Engineers, of course, understand the glass is twice as
> > big
> > > >> as
> > > >> > it
> > > >> > > > >>> needs
> > > >> > > > >>> >>> to be.
> > > >> > > > >>> >>>
> > > >> > > > >>> >>
> > > >> > > > >>> >>
> > > >> > > > >>> >> --
> > > >> > > > >>> >> Jonathan | [email protected]
> > > >> > > > >>> >> Pessimists, see a jar as half empty. Optimists, in
> > > contrast,
> > > >> see
> > > >> > > it
> > > >> > > > as
> > > >> > > > >>> >> half full.
> > > >> > > > >>> >> Engineers, of course, understand the glass is twice as
> > big
> > > >> as it
> > > >> > > > >>> needs to
> > > >> > > > >>> >> be.
> > > >> > > > >>> >>
> > > >> > > > >>> >
> > > >> > > > >>> >
> > > >> > > > >>> > --
> > > >> > > > >>> > Jonathan | [email protected]
> > > >> > > > >>> > Pessimists, see a jar as half empty. Optimists, in
> > contrast,
> > > >> see
> > > >> > it
> > > >> > > > as
> > > >> > > > >>> > half full.
> > > >> > > > >>> > Engineers, of course, understand the glass is twice as
> big
> > > as
> > > >> it
> > > >> > > > needs
> > > >> > > > >>> to
> > > >> > > > >>> > be.
> > > >> > > > >>> >
> > > >> > > > >>>
> > > >> > > > >>>
> > > >> > > > >>> --
> > > >> > > > >>> Jonathan | [email protected]
> > > >> > > > >>> Pessimists, see a jar as half empty. Optimists, in
> contrast,
> > > >> see it
> > > >> > > as
> > > >> > > > >>> half
> > > >> > > > >>> full.
> > > >> > > > >>> Engineers, of course, understand the glass is twice as big
> > as
> > > it
> > > >> > > needs
> > > >> > > > to
> > > >> > > > >>> be.
> > > >> > > > >>>
> > > >> > > > >>
> > > >> > > >
> > > >> > >
> > > >> > >
> > > >> > > --
> > > >> > > Jonathan | [email protected]
> > > >> > > Pessimists, see a jar as half empty. Optimists, in contrast, see
> > it
> > > as
> > > >> > half
> > > >> > > full.
> > > >> > > Engineers, of course, understand the glass is twice as big as it
> > > >> needs to
> > > >> > > be.
> > > >> > >
> > > >> >
> > > >>
> > > >>
> > > >> --
> > > >> Jonathan | [email protected]
> > > >> Pessimists, see a jar as half empty. Optimists, in contrast, see it
> as
> > > >> half
> > > >> full.
> > > >> Engineers, of course, understand the glass is twice as big as it
> needs
> > > to
> > > >> be.
> > > >>
> > > >
> > >
> >
> >
> > --
> > Jonathan | [email protected]
> > Pessimists, see a jar as half empty. Optimists, in contrast, see it as
> half
> > full.
> > Engineers, of course, understand the glass is twice as big as it needs to
> > be.
> >
>


-- 
Jonathan | [email protected]
Pessimists, see a jar as half empty. Optimists, in contrast, see it as half
full.
Engineers, of course, understand the glass is twice as big as it needs to
be.

Reply via email to