Question

J'ai vu quelques échantillons sur Internet qui vérifient si la transaction est actuellement active au début du processus.

Le code ci-dessous qui est le mien obtient entityManager de l'usine.

Je ne peux pas comprendre Pourquoi devrait-on vérifier si la transaction est active avant même qu'elle commence () ???

Est-ce parce qu'un autre processus peut utiliser la même instance EntityManager? (L'entityManagerfactory est singleton mais entityManager ne l'est pas)

    @Path("update")
    @PUT
    @Consumes("application/json")
    public Response machineUpdate(String content) {
        JSONObject jObj = null;
        EntityManager em = null;
        EntityTransaction txn = null;

        try {

           JSONObject jObj = new JSONObject(content);
           em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager();

           //what's this line doing here???
           if(em.getTransaction().isActive()) {
               return HttpStatusHandler.sendConflict();
           }

           txn = em.getTransaction();
           txn.begin();
          //more process ......
        }
        catch(.....
Était-ce utile?

La solution

Je ne vois aucune raison d'une vérification des transactions, étant donné que le code utilise l'API de transaction JPA, il n'y a aucun moyen qu'une transaction soit active étant donné que l'entityManager vient d'être créé.

Si vous utilisiez un entityManager géré par JTA, la transaction JTA pourrait déjà être active. Mais pour JTA, vous ne pouvez pas commencer une transaction à l'aide de la transaction JPA, vous auriez le début de la transaction avec JTA, ou utiliser JoinTransaction () dans JPA.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top