Webmodul soll mehre CMT von SessionBeans in einer Transaktion aufrufen.

21/05/2015 - 22:48 von bernward | Report spam
Hallo,
ich habe SessionBeans mit CMT (container managed transaction) Methoden. Nun möchte ich zwei dieser Methoden vom Webmodul so aufrufen, dass sie in einer Transaktion laufen. Ich habe dazu folgenden Vorschlag gefunden

Context ctx = new InitialContext( );
UserTransaction ut = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
ut.begin();
// Aufruf der Methoden der SessionBeans
ut.commit();

Nun werden von commit() und auch begin() und ctx.lookup() viele verschiedene Exceptions geworfen. Z.B.: RollbackException
Ich habe jedoch bemerkt, dass eine Rollbackanforderung (setRollbackOnly()) aus der SessionBean zu keiner Exception führt, sondern ein ordentliches Rollback stattfindet. Muss ich irgendeiner dieser Exceptions ein ut.rollback() aufrufen ?
 

Lesen sie die antworten

#1 Peter Schütt
27/05/2015 - 19:07 | Warnen spam
Hallo,

ich habe SessionBeans mit CMT (container managed transaction) Methoden.
Nun möchte ich zwei dieser Methoden vom Webmodul so aufrufen, dass sie in
einer Transaktion laufen.



Vielleicht verstehe ich Dein Problem nicht, aber kannst Du die Methoden
nicht in hinterander einer anderen Methode aufrufen und diese Method auch
als transaktional markieren.

Beispiel: Falls man mit Spring arbeitet (mit CDI wird es àhnlich gehen):

public class Bean1{

@Transactional(propagation=REQUIRED)
Bean1.method1() {..}

@Transactional(propagation=REQUIRED)
Bean1.method2() {..}
}

public class Bean2{

private Bean1 bean1 ;

@Transactional(propagation=REQUIRED)
Bean2.combinedMethod1()
{
bean1.method1() ;
bean1.method2() ;
}
}

Wichtig ist, dass man eine Einstellung für die Bean1-Methoden hat, die eine
vorhandene Transaktion wieder verwendet.

Ciao
Peter Schütt

Ähnliche fragen