2016-06-09 12 views
0

ich diesen Fehler erhalten: „EntityManager muss Zugriff innerhalb einer Transaktion sein“, was für mich seltsam ist, weil meine Bohne Marke mit Anmerkung ist:EJB, Ausnahme während beharren: „EntityManager Zugriff innerhalb einer Transaktion sein muss“

@Stateless(name = "UserControllerSession") 

ich habe EntityManager wie folgt injiziert:

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

und das ist meine Methode:

@Override 
    @PermitAll 
    public String updateBlockedAndDeactivationReasonForIds(String userPk, String iban, List<String> associatedIds) { 
     UserLocal user = em.find(UserLocal.class, Long.valueOf(userPk)); 
     if (user == null) { 
      return ("User with id: " + userPk + " does not exist ! \n"); 
     } 

     user.setBlocked(true); 
     user.setActive(false); 
     user.setDeactivationReason(DeactivationReason.DEACTIVATION_MULTIPLY_IBAN_REASON); 
     user.setDeactivationDate(new Date()); 

     StringBuilder message = new StringBuilder(); 
     message.append(" IBAN " + iban + " is linked to multiple accounts: "); 
     for (String id : associatedIds) { 
      message.append(id + " "); 
     } 

     ContactJournalEntryBean cjb = new ContactJournalEntryBean("USER", user.getLogin(), new Date(), "Internet", 
       message.toString()); 
     em.persist(user); 
     em.persist(cjb); 

     return "SUCCESS operation for user with id: " + userPk; 
    } 

Soweit ich den Standardwert für die EJB-Methode kenne, ist Transactioanl.REQUIRED also von defualt transaction erstellt werden. Eine andere Frage ist, kann ich 2 in einer Transaktion bestehen? Danke für jede Hilfe

+0

Sie können so viele "bestehen" wie Sie möchten! –

+1

Warum brauchen Sie 'em.persist (user);' für? Weil die Methode find() eine Instanz von 'UserLocal' zurückgibt und diese Instanz verwaltet wird. Änderungen werden beim Beenden der Methode gespeichert. – ujulu

Antwort

1

Ich denke, der Standard REQUIRED gilt nur, wenn Sie tatsächlich die @TransactionAttribute Annotation verwenden. Versuchen Sie, es zu Ihrer Methode (oder Klasse hinzuzufügen, wenn Sie es als Standard für alle Methoden verwenden möchten).