Hi

So I've changed my MDBs to stateless

public class Worker implements MessageListener {

    @Resource(name="MyJmsConnectionFactory")
    private ConnectionFactory connectionFactory;

    @Resource(name="DriverJobQueue")
    private Queue queue;

    private Connection connection = null;
    private Session session = null;
    private MessageConsumer consumer = null;

    @PostConstruct
    public void initialize() {
        System.out.println("Instantiating "+this);
        try {
            connection = connectionFactory.createConnection();
            connection.start(); //activemq site says it's here
            // Create a Session
            session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);

            // Create a MessageConsumer from the Session to the Topic or
Queue
            consumer = session.createConsumer(this.queue);

            consumer.setMessageListener(this);

//            connection.start(); //some sites says it's here

        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            if (consumer != null) {
                try {
                    consumer.close();
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
            if (session != null) {
                try {
                    session.close();
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Override
    public void onMessage(Message msg) {
        System.out.println("On message for "+this);
    }

openejb-jar.xml

<?xml version="1.0"?>
<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1";>
    <ejb-deployment
        ejb-name="Worker"
        deployment-id="Worker"
        container-id="pseudo_mdb" />
</openejb-jar>

tomee.xml

    <Container id="myAllContainer" type="STATELESS">
    strictPooling = false
    </Container>

    <Container id="pseudo_mdb" type="STATELESS">
    strictPooling = true
    maxSize = 5
    minSize = 3
    </Container>

The container part seems to be right, since only the Worker bean is
instantiated early.

But for some reason, it's not consuming from the queue.

Am I missing something here?

Still, I feel I am running in circles here... because even if I have some
control on the context, I still won't be able to catch the timeout
exception :-(

grrrrrrrrrrrr

[]

Leo

On Tue, Apr 14, 2015 at 6:08 PM, Leonardo K. Shikida <[email protected]>
wrote:

> thx!
>
> []
>
> Leo
>
> On Tue, Apr 14, 2015 at 6:03 PM, Romain Manni-Bucau <[email protected]
> > wrote:
>
>> using openejb-jar.xml you can wire a container to some beans only.
>>
>>
>> Romain Manni-Bucau
>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>> <http://rmannibucau.wordpress.com> | Github <
>> https://github.com/rmannibucau> |
>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
>> <http://www.tomitribe.com>
>>
>> 2015-04-14 22:59 GMT+02:00 Leonardo K. Shikida <[email protected]>:
>>
>> > yeah, I think this will be the way to go
>> >
>> > since I can configure max/min instances for stateless (
>> > http://tomee.apache.org/statelesscontainer-config.html) I think I can
>> just
>> > create a pool of stateless instances to work as MDBs that can deal with
>> > timeout :-)
>> >
>> > is there any way to configure a container just for these specfic
>> stateless
>> > EJBs (so some other configuration can be used for stateless by default)?
>> >
>> > []
>> >
>> > Leo
>> >
>> > On Tue, Apr 14, 2015 at 5:46 PM, Romain Manni-Bucau <
>> [email protected]
>> > >
>> > wrote:
>> >
>> > > so just handle transactions yourself
>> > >
>> > >
>> > > Romain Manni-Bucau
>> > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>> > > <http://rmannibucau.wordpress.com> | Github <
>> > > https://github.com/rmannibucau> |
>> > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
>> > > <http://www.tomitribe.com>
>> > >
>> > > 2015-04-14 22:42 GMT+02:00 Lars-Fredrik Smedberg <[email protected]
>> >:
>> > >
>> > > > Another option is to look at the redelivered property/redelivery
>> count
>> > > and
>> > > > take action (write to db?) in case of redelivery....  requires you
>> to
>> > > set a
>> > > > redelivery policy / number of retries etc
>> > > >
>> > > > /LF
>> > > > On Apr 14, 2015 10:39 PM, "Leonardo K. Shikida" <[email protected]>
>> > > wrote:
>> > > >
>> > > > > Yup, but if the MDB timeout, I need to set something in the DB,
>> > that's
>> > > > why
>> > > > > I need to treat the timeout.
>> > > > >
>> > > > > If the job to be executed timeout, then it will probably timeout
>> for
>> > > any
>> > > > > retry, because it's caused by a poorly chosen parameter, so
>> retries
>> > are
>> > > > not
>> > > > > important here (although increasing timeouts on each retry could
>> be
>> > an
>> > > > > interesting option)
>> > > > >
>> > > > > []
>> > > > >
>> > > > > Leo
>> > > > >
>> > > > > On Tue, Apr 14, 2015 at 5:27 PM, Romain Manni-Bucau <
>> > > > [email protected]
>> > > > > >
>> > > > > wrote:
>> > > > >
>> > > > > > Hmm, with MDBs you have retries since they are transactional.
>> you
>> > can
>> > > > > even
>> > > > > > configure the redelivery policy with an exponential backoff and
>> so
>> > on
>> > > > if
>> > > > > > really needed
>> > > > > >
>> > > > > >
>> > > > > > Romain Manni-Bucau
>> > > > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>> > > > > > <http://rmannibucau.wordpress.com> | Github <
>> > > > > > https://github.com/rmannibucau> |
>> > > > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
>> > > > > > <http://www.tomitribe.com>
>> > > > > >
>> > > > > > 2015-04-14 22:13 GMT+02:00 Leonardo K. Shikida <
>> [email protected]
>> > >:
>> > > > > >
>> > > > > > > Well, what I need is a pool of workers to listen to a queue
>> and
>> > > > process
>> > > > > > > messages while they come, but I also need to properly treat
>> them
>> > > when
>> > > > > the
>> > > > > > > JMS transaction times out.
>> > > > > > >
>> > > > > > > So I guess I can't use a MDB here right?
>> > > > > > >
>> > > > > > > What would be a good approach in this situation?
>> > > > > > >
>> > > > > > > []
>> > > > > > >
>> > > > > > > Leo
>> > > > > > >
>> > > > > > > On Tue, Apr 14, 2015 at 4:53 PM, Romain Manni-Bucau <
>> > > > > > [email protected]
>> > > > > > > >
>> > > > > > > wrote:
>> > > > > > >
>> > > > > > > > if you want to control and be able to catch it you need to
>> > handle
>> > > > > > > yourself
>> > > > > > > > the transaction otherwise if it takes more then you'll get a
>> > > > rollback
>> > > > > > > and a
>> > > > > > > > (surely wrapped) RollbackException
>> > > > > > > >
>> > > > > > > >
>> > > > > > > > Romain Manni-Bucau
>> > > > > > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>> > > > > > > > <http://rmannibucau.wordpress.com> | Github <
>> > > > > > > > https://github.com/rmannibucau> |
>> > > > > > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> |
>> > Tomitriber
>> > > > > > > > <http://www.tomitribe.com>
>> > > > > > > >
>> > > > > > > > 2015-04-14 21:45 GMT+02:00 Leonardo K. Shikida <
>> > > [email protected]
>> > > > >:
>> > > > > > > >
>> > > > > > > > > just checking
>> > > > > > > > >
>> > > > > > > > > I just add
>> > > > > > > > >
>> > > > > > > > >     @Resource
>> > > > > > > > >     private TransactionManager tx;
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > > > and in the MDB initialization I set some timeout
>> > > > > > > > >
>> > > > > > > > >     @PostConstruct
>> > > > > > > > >     public void initialize() {
>> > > > > > > > >         try {
>> > > > > > > > >             tx.setTransactionTimeout(3);
>> > > > > > > > >         } catch (SystemException e) {
>> > > > > > > > >             e.printStackTrace();
>> > > > > > > > >         }
>> > > > > > > > >     }
>> > > > > > > > >
>> > > > > > > > > and when my onMessage() executes, if it takes more than 3
>> > > seconds
>> > > > > to
>> > > > > > > > > complete, it throws and exception?
>> > > > > > > > >
>> > > > > > > > > and if so, how do I catch it? (or I don't?)
>> > > > > > > > >
>> > > > > > > > > []
>> > > > > > > > >
>> > > > > > > > > Leo
>> > > > > > > > >
>> > > > > > > > > On Tue, Apr 14, 2015 at 4:20 PM, Leonardo K. Shikida <
>> > > > > > > [email protected]>
>> > > > > > > > > wrote:
>> > > > > > > > >
>> > > > > > > > > > thx!
>> > > > > > > > > >
>> > > > > > > > > > []
>> > > > > > > > > >
>> > > > > > > > > > Leo
>> > > > > > > > > >
>> > > > > > > > > > On Tue, Apr 14, 2015 at 4:16 PM, Romain Manni-Bucau <
>> > > > > > > > > [email protected]
>> > > > > > > > > > > wrote:
>> > > > > > > > > >
>> > > > > > > > > >> Get the Transactionmanager injected (@Resource) and
>> call
>> > > > > > > > > >> setTransactionTimeout(seconds)
>> > > > > > > > > >>
>> > > > > > > > > >>
>> > > > > > > > > >> Romain Manni-Bucau
>> > > > > > > > > >> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>> > > > > > > > > >> <http://rmannibucau.wordpress.com> | Github <
>> > > > > > > > > >> https://github.com/rmannibucau> |
>> > > > > > > > > >> LinkedIn <https://www.linkedin.com/in/rmannibucau> |
>> > > > Tomitriber
>> > > > > > > > > >> <http://www.tomitribe.com>
>> > > > > > > > > >>
>> > > > > > > > > >> 2015-04-14 19:38 GMT+02:00 Leonardo K. Shikida <
>> > > > > [email protected]
>> > > > > > >:
>> > > > > > > > > >>
>> > > > > > > > > >> > Hi
>> > > > > > > > > >> >
>> > > > > > > > > >> > How do I increase the MDB onMessage() transaction
>> > timeout?
>> > > > > > > > > >> >
>> > > > > > > > > >> > []
>> > > > > > > > > >> >
>> > > > > > > > > >> > Leo
>> > > > > > > > > >> >
>> > > > > > > > > >>
>> > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>>
>
>

Reply via email to