You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@netbeans.apache.org by Richard Grin <Ri...@univ-cotedazur.fr> on 2019/07/29 10:30:58 UTC

Injection of an EntityManager is not adapted to CMT mode

Hi,

NetBeans 11.1.

The code generated by NetBeans for the injection of an EntityManager is 
not adapted to the CMT (Container Managed Transaction) mode. "Generate" 
menu for "Insert code..." > "Use Entity Manager...".

The generated code:

     @PersistenceContext(unitName = "xxx")
     private EntityManager em;
     @Resource
     private javax.transaction.UserTransaction utx;

     public void persist(Object object) {
         try {
             utx.begin();
             em.persist(object);
             utx.commit();
         } catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception 
caught", e);
             throw new RuntimeException(e);
         }
     }

It should be

     @PersistenceContext(unitName = xxx")
     private EntityManager em;

     public void persist(Object object) {
         em.persist(object);
     }

Richard


Re: Injection of an EntityManager is not adapted to CMT mode

Posted by Richard Grin <Ri...@univ-cotedazur.fr>.
OK, thanks Javier. It's done: https://issues.apache.org/jira/browse/NETBEANS-2934 (and another one: https://issues.apache.org/jira/browse/NETBEANS-2935).

Le 01/08/2019 à 16:39, Javier Ortiz a écrit :
Yes, please do. https://issues.apache.org/jira/projects/NETBEANS/issues/NETBEANS-2931?filter=allopenissues

On Thu, Aug 1, 2019, 9:29 AM Richard Grin <Ri...@univ-cotedazur.fr>> wrote:

Do I have to report this problem elsewhere for it to have a chance to be fixed?

I found other problems in other codes generated by NetBeans and I prefer to report them the right way.

Regards,

Richard

Le 29/07/2019 à 16:06, Richard Grin a écrit :

Hi Ortiz,

The EJB in which I inject is NOT annotated by

@TransactionManagement( TransactionManagementType.BEAN)

so, by default, the transactions are managed by the container: one automatic commit or rollback at the end of the method which started the transaction (I won't go into the details... ; see https://javaee.github.io/tutorial/transactions004.html#BNCIJ). A UserTransaction must not be used. The old versions of NetBeans inserted the good code.

See the code of Arjan Tijms in https://stackoverflow.com/questions/8772175/how-to-implement-container-managed-transaction-cmt.

Regards,

Richard

Le 29/07/2019 à 13:33, Javier Ortiz a écrit :
The current one seems completely correct to me. What error/problem are you getting?

That's an atomic operation.

On Mon, Jul 29, 2019, 5:31 AM Richard Grin <Ri...@univ-cotedazur.fr>> wrote:
Hi,

NetBeans 11.1.

The code generated by NetBeans for the injection of an EntityManager is
not adapted to the CMT (Container Managed Transaction) mode. "Generate"
menu for "Insert code..." > "Use Entity Manager...".

The generated code:

     @PersistenceContext(unitName = "xxx")
     private EntityManager em;
     @Resource
     private javax.transaction.UserTransaction utx;

     public void persist(Object object) {
         try {
             utx.begin();
             em.persist(object);
             utx.commit();
         } catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception
caught", e);
             throw new RuntimeException(e);
         }
     }

It should be

     @PersistenceContext(unitName = xxx")
     private EntityManager em;

     public void persist(Object object) {
         em.persist(object);
     }

Richard


--
Cordialement,

Richard Grin

--
Cordialement,

Richard Grin

--
Cordialement,

Richard Grin

Re: Injection of an EntityManager is not adapted to CMT mode

Posted by Javier Ortiz <ja...@gmail.com>.
Yes, please do.
https://issues.apache.org/jira/projects/NETBEANS/issues/NETBEANS-2931?filter=allopenissues

On Thu, Aug 1, 2019, 9:29 AM Richard Grin <Ri...@univ-cotedazur.fr>
wrote:

> Do I have to report this problem elsewhere for it to have a chance to be
> fixed?
>
> I found other problems in other codes generated by NetBeans and I prefer
> to report them the right way.
>
> Regards,
>
> Richard
> Le 29/07/2019 à 16:06, Richard Grin a écrit :
>
> Hi Ortiz,
>
> The EJB in which I inject is NOT annotated by
>
> @TransactionManagement( TransactionManagementType.BEAN)
>
> so, by default, the transactions are managed by the container: one
> automatic commit or rollback at the end of the method which started the
> transaction (I won't go into the details... ; see
> https://javaee.github.io/tutorial/transactions004.html#BNCIJ). A
> UserTransaction must not be used. The old versions of NetBeans inserted the
> good code.
>
> See the code of Arjan Tijms in
> https://stackoverflow.com/questions/8772175/how-to-implement-container-managed-transaction-cmt
> .
>
> Regards,
>
> Richard
> Le 29/07/2019 à 13:33, Javier Ortiz a écrit :
>
> The current one seems completely correct to me. What error/problem are you
> getting?
>
> That's an atomic operation.
>
> On Mon, Jul 29, 2019, 5:31 AM Richard Grin <Ri...@univ-cotedazur.fr>
> wrote:
>
>> Hi,
>>
>> NetBeans 11.1.
>>
>> The code generated by NetBeans for the injection of an EntityManager is
>> not adapted to the CMT (Container Managed Transaction) mode. "Generate"
>> menu for "Insert code..." > "Use Entity Manager...".
>>
>> The generated code:
>>
>>      @PersistenceContext(unitName = "xxx")
>>      private EntityManager em;
>>      @Resource
>>      private javax.transaction.UserTransaction utx;
>>
>>      public void persist(Object object) {
>>          try {
>>              utx.begin();
>>              em.persist(object);
>>              utx.commit();
>>          } catch (Exception e) {
>> Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception
>> caught", e);
>>              throw new RuntimeException(e);
>>          }
>>      }
>>
>> It should be
>>
>>      @PersistenceContext(unitName = xxx")
>>      private EntityManager em;
>>
>>      public void persist(Object object) {
>>          em.persist(object);
>>      }
>>
>> Richard
>>
>> --
> Cordialement,
>
> Richard Grin
>
> --
> Cordialement,
>
> Richard Grin
>
>

Re: Injection of an EntityManager is not adapted to CMT mode

Posted by Richard Grin <Ri...@univ-cotedazur.fr>.
Do I have to report this problem elsewhere for it to have a chance to be fixed?

I found other problems in other codes generated by NetBeans and I prefer to report them the right way.

Regards,

Richard

Le 29/07/2019 à 16:06, Richard Grin a écrit :

Hi Ortiz,

The EJB in which I inject is NOT annotated by

@TransactionManagement( TransactionManagementType.BEAN)

so, by default, the transactions are managed by the container: one automatic commit or rollback at the end of the method which started the transaction (I won't go into the details... ; see https://javaee.github.io/tutorial/transactions004.html#BNCIJ). A UserTransaction must not be used. The old versions of NetBeans inserted the good code.

See the code of Arjan Tijms in https://stackoverflow.com/questions/8772175/how-to-implement-container-managed-transaction-cmt.

Regards,

Richard

Le 29/07/2019 à 13:33, Javier Ortiz a écrit :
The current one seems completely correct to me. What error/problem are you getting?

That's an atomic operation.

On Mon, Jul 29, 2019, 5:31 AM Richard Grin <Ri...@univ-cotedazur.fr>> wrote:
Hi,

NetBeans 11.1.

The code generated by NetBeans for the injection of an EntityManager is
not adapted to the CMT (Container Managed Transaction) mode. "Generate"
menu for "Insert code..." > "Use Entity Manager...".

The generated code:

     @PersistenceContext(unitName = "xxx")
     private EntityManager em;
     @Resource
     private javax.transaction.UserTransaction utx;

     public void persist(Object object) {
         try {
             utx.begin();
             em.persist(object);
             utx.commit();
         } catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception
caught", e);
             throw new RuntimeException(e);
         }
     }

It should be

     @PersistenceContext(unitName = xxx")
     private EntityManager em;

     public void persist(Object object) {
         em.persist(object);
     }

Richard


--
Cordialement,

Richard Grin

--
Cordialement,

Richard Grin

Re: Injection of an EntityManager is not adapted to CMT mode

Posted by Richard Grin <Ri...@univ-cotedazur.fr>.
Hi Ortiz,

The EJB in which I inject is NOT annotated by

@TransactionManagement( TransactionManagementType.BEAN)

so, by default, the transactions are managed by the container: one automatic commit or rollback at the end of the method which started the transaction (I won't go into the details... ; see https://javaee.github.io/tutorial/transactions004.html#BNCIJ). A UserTransaction must not be used. The old versions of NetBeans inserted the good code.

See the code of Arjan Tijms in https://stackoverflow.com/questions/8772175/how-to-implement-container-managed-transaction-cmt.

Regards,

Richard

Le 29/07/2019 à 13:33, Javier Ortiz a écrit :
The current one seems completely correct to me. What error/problem are you getting?

That's an atomic operation.

On Mon, Jul 29, 2019, 5:31 AM Richard Grin <Ri...@univ-cotedazur.fr>> wrote:
Hi,

NetBeans 11.1.

The code generated by NetBeans for the injection of an EntityManager is
not adapted to the CMT (Container Managed Transaction) mode. "Generate"
menu for "Insert code..." > "Use Entity Manager...".

The generated code:

     @PersistenceContext(unitName = "xxx")
     private EntityManager em;
     @Resource
     private javax.transaction.UserTransaction utx;

     public void persist(Object object) {
         try {
             utx.begin();
             em.persist(object);
             utx.commit();
         } catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception
caught", e);
             throw new RuntimeException(e);
         }
     }

It should be

     @PersistenceContext(unitName = xxx")
     private EntityManager em;

     public void persist(Object object) {
         em.persist(object);
     }

Richard


--
Cordialement,

Richard Grin