>From the java ee 5 tutorial (don't think this changed in 6):
http://docs.oracle.com/javaee/5/tutorial/doc/bncij.html

Required Attribute

If the client is running within a transaction and invokes the
enterprise bean’s method, the method executes within the client’s
transaction. If the client is not associated with a transaction, the
container starts a new transaction before running the method.

The Required attribute is the implicit transaction attribute for all
enterprise bean methods running with container-managed transaction
demarcation. You typically do not set the Required attribute unless
you need to override another transaction attribute. Because
transaction attributes are declarative, you can easily change them
later.

John

On Thu, Sep 5, 2013 at 8:09 PM, José Luis Cetina <maxtorz...@gmail.com> wrote:
> Hi i have an EJB annotated with:
>
> @Stateless
> @TransactionManagement(TransactionManagementType.CONTAINER)
>
> As you can see i don't mark the EJB with any TransactionAttribute, instead
> i use
> TransactionAttribute in every method when i need it, if i don't need any
> transaction (because i will only read information from database) then i
> don't use any TransactionAttribute in the method not event
> TransactionAttribute.NEVER.
>
> But today i realized that i have a method that IS NOT annotated with
> any TransactionAttribute (and the ejb class either) but in that method i
> query an entity and change some values  (inside of the ejb method) of the
> retrieved entity, i could see that my entity is committed with those
> changes (this is not suppose to happens).
>
> I know if i mark the EJB with TransactionAttribute.XXX all the methods will
> use the same TransactionAttribute that is defined in the class, i know if i
> have the TransactionAttribute in the ejb class and in the method too, the
> method TransactionAttribute has major priority. But in my case
> i don't have any TransactionAttribute in the ejb class and in the method.
>
> Then why my entity is commited with those changes?, is the default value
> for TransactionAttribute using TransactionManagementType.CONTAINER
> is @TransactionAttribute(TransactionAttributeType.REQUIRED) or something
> like that??
>
> If i annotated my method
> with @TransactionAttribute(TransactionAttributeType.NEVER) the entity is
> never persisted (required behavior), but if i add
> the @TransactionAttribute(TransactionAttributeType.REQUIRED) then the
> entity is persisted.
>
> My surprise is if i use
> @TransactionAttribute(TransactionAttributeType.REQUIRED) the entity is
> persisted but i never do a persist or merge, i know if the method never
> throw an exception the transaction is commited, but i never do a
> persist/merge.
>
> Do i have to mark all of my methods with
> @TransactionAttribute(TransactionAttributeType.NEVER)?? if yes, then i can
> assume that the default value for an EJB is @TransactionAttribute.REQUIRED??

Reply via email to