Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] Re: one connection for each request

Christopher.Mathrusse@xxxxxxxxxx a écrit :

GlassFish is managing your connection pool and Transactions. (or it should be) So long as you have your transaction boundaries defined on your EJB's a transaction should be started for you by the container on each method invocation. Even if you don't explicitly define a transaction boundary with the @Transaction annotation, the containers default behavior is to start a transaction on method invocation of the EJB. So a transaction should be started if one doesn't exist. The enlistment of the connection within the transaction is handled by the container as it is managing the connection pool. Every time a connection is retrieved from the pool, it will be enlisted within the running transaction. (Unless you explicitly suspend the running transaction)

The connection pool has configuration options. As I stated, one is for associating the connection to the running thread of execution. This allows the connection to be reused each time a connection is requested by the thread. Another configuration of the pool is to allow non-transactional connections, which allows callers that are not within a transaction to retrieve a connection from the pool. This option should *_not _*be checked and will cause an exception to be thrown if a non-transactional caller requests a connection. So basically, if it is unchecked and your are retrieving connections from the pool and no exception is thrown, then all connections are operating within a running transaction.

I hope this helps clarify.

Ok, I think I understand your point. So, it seems everything is ok and I don't need to worry, right? Is there a way to "see" the effective transaction boundaries? I mean, can I find out which requests where executed in what transaction?

I thought that for an ejb-managed EntityManager, there was a client session, and so the EntityManager should keep its connection while it is alive. Is this wrong?

Thanks for your advice,

Yannick


Back to the top