You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by Jonathan Gallimore <jo...@gmail.com> on 2019/04/03 21:35:41 UTC

Re: TomEE embedded ActiveMQ + Injected JMSContext -> Abandoned Connections

Sounds like an issue we need to look at on the TomEE side (adding
users@tomee.apache.org)

What are you injecting into - an EJB or CDI bean?

Your code shows a consumer - how are you sending your messages?

Jon

On Wed, 3 Apr 2019, 19:43 tkspradley, <tk...@gmail.com> wrote:

> First posting here. Please let me know if I need to include other
> environment
> information
>
> Environment: (TomEE)/9.0.12 - CentOS 7 - java-1.8.0-openjdk-1.8.0
>
> Issue: Abandoned connection warning issued after every send and receive
>
> Question: The container eventually releases the abandoned connections and
> delivers some of the messages. Is this expected behavior? Am I supposed to
> release the Connection somehow? If I use a try with resources block to
> create a context using connection factory, resources are release when out
> of
> scope, but messages aren't visible to the messages consumer selector even
> though the messages do appear using QueueBrowser.
>
> Thank you,
> Ted S.
>
> Execution:
>
> If I send 20 messages sequentially, an exception is thrown on message 11:
> javax.jms.JMSRuntimeException: No ManagedConnections available within
> configured blocking timeout ( 5000 [ms] )
>
> Configuration:
>         <Resource id="jmsConnectionFactory"
> type="javax.jms.ConnectionFactory">
>             connectionMaxIdleTime = 15 Minutes
>             connectionMaxWaitTime = 5 seconds
>             poolMaxSize = 10
>             poolMinSize = 0
>             resourceAdapter = Default JMS Resource Adapter
>             transactionSupport = xa
>         </Resource>
>
>     @Inject
>     @JMSConnectionFactory("jmsConnectionFactory")
>     private JMSContext jmsContext;
>     @Resource(mappedName = "jms/localNotificationQueue")
>     private Queue localQueue;
>
>       JMSConsumer jmsConsumer =
>                 jmsContext.createConsumer(localQueue,
> "someProperty='someValue'");
>
>        Message localMessage =
>                     jmsConsumer.receiveNoWait();
>
> log=>
> Apr 03, 2019 1:10:21 PM org.apache.openejb.resource.AutoConnectionTracker$1
> beforeCompletion
> WARNING: Transaction complete, but connection still has handles associated:
> ManagedConnectionInfo:
>
>
>
>
> --
> Sent from:
> http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html
>

Re: TomEE embedded ActiveMQ + Injected JMSContext -> Abandoned Connections

Posted by Jonathan Gallimore <jo...@gmail.com>.
Thanks for this. I have reproduced your issue. I've opened a JIRA on the
TomEE side: https://issues.apache.org/jira/browse/TOMEE-2506, and added the
tests to reproduce:
https://github.com/apache/tomee/commit/e58ff848a3a80938d4d99fc9bcfeaade5a72d644

I think this is a TomEE issue rather than an ActiveMQ issue. I added the
code to AutoConnectionTracker in TomEE to warn when transaction resources
weren't properly closed, and that appears to be showing the issue
in org.apache.openejb.resource.activemq.jms2.JMSContextImpl. I'll dig in
and take a look.

Jon

On Wed, Apr 3, 2019 at 11:19 PM Ted Spradley <tk...@gmail.com> wrote:

> Jon,
>
> EJB - here is a sample below.
>
> Thank you for looking at this.
> Ted S.
>
> @Named
> @LocalBean
> @TransactionManagement(TransactionManagementType.CONTAINER)
> @Stateless
> public class QueueSenderSessionBean
> {
>
>     @Resource(mappedName = "jms/localNotificationQueue")
>     private Queue localQueue;
>
>     @Inject
>     @JMSConnectionFactory("jmsConnectionFactory")
>     private JMSContext jmsContext;
>
>
>     public void sendMessage(String message)
>     {
>         try
>         {
>             TextMessage textMessage =
>                        jmsContext.createTextMessage(message);
>             textMessage.setStringProperty("someProperty", "someValue" );
>
>             jmsContext.createProducer().
>                         setDeliveryMode(DeliveryMode.PERSISTENT).
>                         send(localQueue,
>                             textMessage);
>         }
>         catch (JMSException e)
>         {
>             e.printStackTrace();
>         }
>     }
> }
>
>
> On 4/3/19, 4:35 PM, "Jonathan Gallimore" <jo...@gmail.com>
> wrote:
>
>     Sounds like an issue we need to look at on the TomEE side (adding
>     users@tomee.apache.org)
>
>     What are you injecting into - an EJB or CDI bean?
>
>     Your code shows a consumer - how are you sending your messages?
>
>     Jon
>
>     On Wed, 3 Apr 2019, 19:43 tkspradley, <tk...@gmail.com> wrote:
>
>     > First posting here. Please let me know if I need to include other
>     > environment
>     > information
>     >
>     > Environment: (TomEE)/9.0.12 - CentOS 7 - java-1.8.0-openjdk-1.8.0
>     >
>     > Issue: Abandoned connection warning issued after every send and
> receive
>     >
>     > Question: The container eventually releases the abandoned
> connections and
>     > delivers some of the messages. Is this expected behavior? Am I
> supposed to
>     > release the Connection somehow? If I use a try with resources block
> to
>     > create a context using connection factory, resources are release
> when out
>     > of
>     > scope, but messages aren't visible to the messages consumer selector
> even
>     > though the messages do appear using QueueBrowser.
>     >
>     > Thank you,
>     > Ted S.
>     >
>     > Execution:
>     >
>     > If I send 20 messages sequentially, an exception is thrown on
> message 11:
>     > javax.jms.JMSRuntimeException: No ManagedConnections available within
>     > configured blocking timeout ( 5000 [ms] )
>     >
>     > Configuration:
>     >         <Resource id="jmsConnectionFactory"
>     > type="javax.jms.ConnectionFactory">
>     >             connectionMaxIdleTime = 15 Minutes
>     >             connectionMaxWaitTime = 5 seconds
>     >             poolMaxSize = 10
>     >             poolMinSize = 0
>     >             resourceAdapter = Default JMS Resource Adapter
>     >             transactionSupport = xa
>     >         </Resource>
>     >
>     >     @Inject
>     >     @JMSConnectionFactory("jmsConnectionFactory")
>     >     private JMSContext jmsContext;
>     >     @Resource(mappedName = "jms/localNotificationQueue")
>     >     private Queue localQueue;
>     >
>     >       JMSConsumer jmsConsumer =
>     >                 jmsContext.createConsumer(localQueue,
>     > "someProperty='someValue'");
>     >
>     >        Message localMessage =
>     >                     jmsConsumer.receiveNoWait();
>     >
>     > log=>
>     > Apr 03, 2019 1:10:21 PM
> org.apache.openejb.resource.AutoConnectionTracker$1
>     > beforeCompletion
>     > WARNING: Transaction complete, but connection still has handles
> associated:
>     > ManagedConnectionInfo:
>     >
>     >
>     >
>     >
>     > --
>     > Sent from:
>     > http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html
>     >
>
>
>
>

Re: TomEE embedded ActiveMQ + Injected JMSContext -> Abandoned Connections

Posted by Jonathan Gallimore <jo...@gmail.com>.
Thanks for this. I have reproduced your issue. I've opened a JIRA on the
TomEE side: https://issues.apache.org/jira/browse/TOMEE-2506, and added the
tests to reproduce:
https://github.com/apache/tomee/commit/e58ff848a3a80938d4d99fc9bcfeaade5a72d644

I think this is a TomEE issue rather than an ActiveMQ issue. I added the
code to AutoConnectionTracker in TomEE to warn when transaction resources
weren't properly closed, and that appears to be showing the issue
in org.apache.openejb.resource.activemq.jms2.JMSContextImpl. I'll dig in
and take a look.

Jon

On Wed, Apr 3, 2019 at 11:19 PM Ted Spradley <tk...@gmail.com> wrote:

> Jon,
>
> EJB - here is a sample below.
>
> Thank you for looking at this.
> Ted S.
>
> @Named
> @LocalBean
> @TransactionManagement(TransactionManagementType.CONTAINER)
> @Stateless
> public class QueueSenderSessionBean
> {
>
>     @Resource(mappedName = "jms/localNotificationQueue")
>     private Queue localQueue;
>
>     @Inject
>     @JMSConnectionFactory("jmsConnectionFactory")
>     private JMSContext jmsContext;
>
>
>     public void sendMessage(String message)
>     {
>         try
>         {
>             TextMessage textMessage =
>                        jmsContext.createTextMessage(message);
>             textMessage.setStringProperty("someProperty", "someValue" );
>
>             jmsContext.createProducer().
>                         setDeliveryMode(DeliveryMode.PERSISTENT).
>                         send(localQueue,
>                             textMessage);
>         }
>         catch (JMSException e)
>         {
>             e.printStackTrace();
>         }
>     }
> }
>
>
> On 4/3/19, 4:35 PM, "Jonathan Gallimore" <jo...@gmail.com>
> wrote:
>
>     Sounds like an issue we need to look at on the TomEE side (adding
>     users@tomee.apache.org)
>
>     What are you injecting into - an EJB or CDI bean?
>
>     Your code shows a consumer - how are you sending your messages?
>
>     Jon
>
>     On Wed, 3 Apr 2019, 19:43 tkspradley, <tk...@gmail.com> wrote:
>
>     > First posting here. Please let me know if I need to include other
>     > environment
>     > information
>     >
>     > Environment: (TomEE)/9.0.12 - CentOS 7 - java-1.8.0-openjdk-1.8.0
>     >
>     > Issue: Abandoned connection warning issued after every send and
> receive
>     >
>     > Question: The container eventually releases the abandoned
> connections and
>     > delivers some of the messages. Is this expected behavior? Am I
> supposed to
>     > release the Connection somehow? If I use a try with resources block
> to
>     > create a context using connection factory, resources are release
> when out
>     > of
>     > scope, but messages aren't visible to the messages consumer selector
> even
>     > though the messages do appear using QueueBrowser.
>     >
>     > Thank you,
>     > Ted S.
>     >
>     > Execution:
>     >
>     > If I send 20 messages sequentially, an exception is thrown on
> message 11:
>     > javax.jms.JMSRuntimeException: No ManagedConnections available within
>     > configured blocking timeout ( 5000 [ms] )
>     >
>     > Configuration:
>     >         <Resource id="jmsConnectionFactory"
>     > type="javax.jms.ConnectionFactory">
>     >             connectionMaxIdleTime = 15 Minutes
>     >             connectionMaxWaitTime = 5 seconds
>     >             poolMaxSize = 10
>     >             poolMinSize = 0
>     >             resourceAdapter = Default JMS Resource Adapter
>     >             transactionSupport = xa
>     >         </Resource>
>     >
>     >     @Inject
>     >     @JMSConnectionFactory("jmsConnectionFactory")
>     >     private JMSContext jmsContext;
>     >     @Resource(mappedName = "jms/localNotificationQueue")
>     >     private Queue localQueue;
>     >
>     >       JMSConsumer jmsConsumer =
>     >                 jmsContext.createConsumer(localQueue,
>     > "someProperty='someValue'");
>     >
>     >        Message localMessage =
>     >                     jmsConsumer.receiveNoWait();
>     >
>     > log=>
>     > Apr 03, 2019 1:10:21 PM
> org.apache.openejb.resource.AutoConnectionTracker$1
>     > beforeCompletion
>     > WARNING: Transaction complete, but connection still has handles
> associated:
>     > ManagedConnectionInfo:
>     >
>     >
>     >
>     >
>     > --
>     > Sent from:
>     > http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html
>     >
>
>
>
>

Re: TomEE embedded ActiveMQ + Injected JMSContext -> Abandoned Connections

Posted by Ted Spradley <tk...@gmail.com>.
Jon,

EJB - here is a sample below.

Thank you for looking at this.
Ted S.

@Named
@LocalBean
@TransactionManagement(TransactionManagementType.CONTAINER)
@Stateless
public class QueueSenderSessionBean
{

    @Resource(mappedName = "jms/localNotificationQueue")
    private Queue localQueue;

    @Inject
    @JMSConnectionFactory("jmsConnectionFactory")
    private JMSContext jmsContext;


    public void sendMessage(String message) 
    {
        try
        {
            TextMessage textMessage = 
                       jmsContext.createTextMessage(message);
            textMessage.setStringProperty("someProperty", "someValue" ); 

            jmsContext.createProducer().
                        setDeliveryMode(DeliveryMode.PERSISTENT).
                        send(localQueue, 
                            textMessage); 
        }
        catch (JMSException e)
        {
            e.printStackTrace();
        }
    }
}


On 4/3/19, 4:35 PM, "Jonathan Gallimore" <jo...@gmail.com> wrote:

    Sounds like an issue we need to look at on the TomEE side (adding
    users@tomee.apache.org)
    
    What are you injecting into - an EJB or CDI bean?
    
    Your code shows a consumer - how are you sending your messages?
    
    Jon
    
    On Wed, 3 Apr 2019, 19:43 tkspradley, <tk...@gmail.com> wrote:
    
    > First posting here. Please let me know if I need to include other
    > environment
    > information
    >
    > Environment: (TomEE)/9.0.12 - CentOS 7 - java-1.8.0-openjdk-1.8.0
    >
    > Issue: Abandoned connection warning issued after every send and receive
    >
    > Question: The container eventually releases the abandoned connections and
    > delivers some of the messages. Is this expected behavior? Am I supposed to
    > release the Connection somehow? If I use a try with resources block to
    > create a context using connection factory, resources are release when out
    > of
    > scope, but messages aren't visible to the messages consumer selector even
    > though the messages do appear using QueueBrowser.
    >
    > Thank you,
    > Ted S.
    >
    > Execution:
    >
    > If I send 20 messages sequentially, an exception is thrown on message 11:
    > javax.jms.JMSRuntimeException: No ManagedConnections available within
    > configured blocking timeout ( 5000 [ms] )
    >
    > Configuration:
    >         <Resource id="jmsConnectionFactory"
    > type="javax.jms.ConnectionFactory">
    >             connectionMaxIdleTime = 15 Minutes
    >             connectionMaxWaitTime = 5 seconds
    >             poolMaxSize = 10
    >             poolMinSize = 0
    >             resourceAdapter = Default JMS Resource Adapter
    >             transactionSupport = xa
    >         </Resource>
    >
    >     @Inject
    >     @JMSConnectionFactory("jmsConnectionFactory")
    >     private JMSContext jmsContext;
    >     @Resource(mappedName = "jms/localNotificationQueue")
    >     private Queue localQueue;
    >
    >       JMSConsumer jmsConsumer =
    >                 jmsContext.createConsumer(localQueue,
    > "someProperty='someValue'");
    >
    >        Message localMessage =
    >                     jmsConsumer.receiveNoWait();
    >
    > log=>
    > Apr 03, 2019 1:10:21 PM org.apache.openejb.resource.AutoConnectionTracker$1
    > beforeCompletion
    > WARNING: Transaction complete, but connection still has handles associated:
    > ManagedConnectionInfo:
    >
    >
    >
    >
    > --
    > Sent from:
    > http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html
    >