Problem mit Java Transaction API

Status
Nicht offen für weitere Antworten.

thisis

Neues Mitglied
Hallo zusammen,

ich versuche seit geraumer Zeit mit Hilfe der JTA eine kleine Applikation zu programmieren.

Als Beispiel versuche ich mich gerade an einer Reisebuchung.
Hierfür hab ich nun 3 Webservices (Auto/Hotel/Flug) die für je eine Buchung stehen. Über einen vierten Webservice (Reservierung), der extern läuft frage ich nun ein beliebiges Datum ab. Bestätigen mir die 3 Webservices nun alle das Datum, führe ich einen Commit aus damit die Reise gebucht wird. Kann ein Webservice dieses Datum nicht bestätigen wird ein Rollback durchgeführt.

Mein Problem ist, dass keine richtige Transaktion zustande kommt. Über die Statusabfrage erhalte die Ausgabe das meine Transaktion aktiv ist oder das keine Transaktion vorhanden ist. Ich sehe jedoch nirgends ob commited/rollbacked wurde.


Hier der externe Webservice

Code:
@TransactionManagement(TransactionManagementType.BEAN)
@WebService()
@Stateless
public class ReservierungWeb {
    
    @WebServiceRef(wsdlLocation = "http://localhost:8080/HotelWebService/HotelWeb?wsdl")
    private HotelWebService service3;
    @WebServiceRef(wsdlLocation = "http://localhost:8080/FlugWebService/FlugWeb?wsdl")
    private FlugWebService service2;
    @WebServiceRef(wsdlLocation = "http://localhost:8080/AutoWebService/AutoWeb?wsdl")
    private AutoWebService service1;

    @WebMethod
    public void checkReise(int date) throws Exception {

        Context ctx = new InitialContext();
        UserTransaction utx = (UserTransaction) ctx.lookup("java:comp/UserTransaction");

        utx.begin();
        try { // Call Web Service Operation

            printTxStatus(utx.getStatus());
            de.hdm.auto.AutoWeb portAuto = service1.getAutoWebPort();
            // TODO initialize WS operation arguments here
            // TODO process result here
            int resultAuto = portAuto.checkDateAuto(date);

            if (resultAuto == date) {
                System.out.println("Autoreservierung möglich am: " + resultAuto);
            } else {
                System.out.println("Mietauto zu diesem Zeitpunkt nicht verfügbar");
            }

            de.hdm.flug.FlugWeb portFlug = service2.getFlugWebPort();
            // TODO initialize WS operation arguments here
            // TODO process result here
            int resultFlug = portFlug.checkDateFlug(date);
            if (resultFlug == date) {
                System.out.println("Flugreservierung möglich am: " + resultFlug);
            } else {
                System.out.println("Flug zu diesem Zeitpunkt nicht möglich");
            }


            de.hdm.hotel.HotelWeb portHotel = service3.getHotelWebPort();
            // TODO initialize WS operation arguments here
            // TODO process result here
            int resultHotel = portHotel.checkDateHotel(date);
            if (resultHotel == date) {

                System.out.println("Hotelreservierung möglich am: " + resultHotel);
            } else {
                System.out.println("Hotel zu diesem Zeitpunkt nicht verfügbar");
            }

            if (resultAuto == date && resultFlug == date && resultHotel == date) {

                
                
                
                utx.commit();
                System.out.println("Reise wurde gebucht!!");                

            } else {

                // utx.setRollbackOnly();               

                System.out.println("Reise zu diesem Datum nicht möglich! Bitte geben Sie ein anderes Reisedatum ein!");
            }            
        } catch (Exception ex) {
            utx.rollback();
            System.out.println("Fehler aufgetreten!");
            throw new EJBException("beenden der Transaktion", ex);
        }
    }
    
    private static void printTxStatus(int status) {
        switch (status) {
            case Status.STATUS_ACTIVE:
                System.out.println("***Tx Satus\t: STATUS_ACTIVE");
                break;
            case Status.STATUS_COMMITTED:
                System.out.println("***Tx Satus\t: STATUS_COMMITTED");
                break;
            case Status.STATUS_NO_TRANSACTION:
                System.out.println("***Tx Satus\t: STATUS_NO_TRANSACTION");
                break;
            case Status.STATUS_MARKED_ROLLBACK:
                System.out.println("***Tx Satus\t: STATUS_ROLLEDBACK");
                break;
            case Status.STATUS_UNKNOWN:
                System.out.println("***Tx Satus\t: STATUS_UNKNOWN");
                break;
            case Status.STATUS_COMMITTING:
                System.out.println("***Tx Satus\t: STATUS_COMMITTING");
                break;
            case Status.STATUS_PREPARING:
                System.out.println("***Tx Satus\t: STATUS_PREPARING");
                break;
            case Status.STATUS_ROLLING_BACK:
                System.out.println("***TX Satus\t: STATUS_ROLLING_BACK");
                break;
        }
    }


}


Hier einer der drei Auto/Hotel/Flug (alle identisch aufgebaut)

Code:
@WebService()
@Stateless()
public class AutoWeb {

    private int date = 19122008;
   
   
    @WebMethod
    public int checkDateAuto(int date) {
      if ( this.date != date ) {
         
            return 1;
        }
        return this.date;
    }
    
    
    
}

Hoffentlich versteht jemand mein Problem und kann mir dabei helfen.
Danke schonmal im voraus.

Lg
thisis[/code]
 
G

Guest

Gast
Code:
utx.begin();
fehlt. :bae:

Das ganze würde ich auch noch überarbeiten. Wenn checkDateAuto negativ ausfällt, dann kannst du dir
die restliche Prüfung sparen. Ausserden, wie gelangt diese Information nach Aussen? OK... weitermachen. ;)
 

FArt

Top Contributor
@Gast
utx.begin() steht in Zeile 20

Wo wird denn hier in eine DB geschrieben? Wie wird der Zugriff auf die anderen Services realisiert?
Wenn alle Services an einer Transaktion teilnehmen sollen, wie wird diese propagiert?
Je nach Server kann es sein, dass (auch wenn alle Services in einer VM laufen und auf die gleiche Datasource zugreifen) mit XA Transaktionen konfiguriert sein müssen.

Schalte das Logging für deinen Server so ein, dass du viele Informationen über die Transaktion bekommst.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Eclipse/Java EE Debug-Problem Allgemeines EE 1
S java Entities Problem Allgemeines EE 19
J OOP Java Array Problem Allgemeines EE 2
V MYSQL JDBC;java.lang.ClassNotFoundException; Problem Eclipse Allgemeines EE 3
E Java Mail problem Allgemeines EE 5
K mysql treiber problem wenn import java.sql.* bei _servlet_ Allgemeines EE 2
T Problem dem Zaehler in mein Java - Code Allgemeines EE 2
Q Tomcat/java-Session-Problem Allgemeines EE 9
flashfactor Java Connector Architecture Problem Allgemeines EE 5
D Problem mit redundanten Servern Allgemeines EE 7
Azemaria JSF: Problem bei der einfachsten Applikation Allgemeines EE 2
P JPA Internal Problem Nullpointer Allgemeines EE 10
S MessageDrivenBean Problem beim Zugriff auf Stateful EJB Allgemeines EE 2
M Glassfish Deployment-Problem unter Eclipse Allgemeines EE 0
B Problem beim Lesen des Codes... Allgemeines EE 2
R JPA Problem beim Speichern eines Users Allgemeines EE 2
S WebSocket Problem Allgemeines EE 0
G Problem: Servlet in JSP einbinden mit <jsp:include> Allgemeines EE 3
Raidri [SEAM] rich:dataTable sortBy Problem Allgemeines EE 6
T Problem mit den Beispielen von Apache Allgemeines EE 5
W JSF Validator Problem HTTP Status 500 Allgemeines EE 2
E JBoss 7.1 Datasource Problem Allgemeines EE 2
M JSP Problem -unbestimmte Anzahl von Werten Transportieren Allgemeines EE 9
S Problem mit EJB Verständnis Allgemeines EE 4
B Problem beim einbinden einer CSS in eine JSP Allgemeines EE 8
F JSP Problem mit Datenbankanbindung über Glassfishserver Allgemeines EE 4
S Embedded JBoss Problem beim Deployment Allgemeines EE 4
E Session Problem Allgemeines EE 9
F problem mit nullpointer bei DB zugriff Allgemeines EE 2
A Erste Schritte... Problem mit Hibernate Allgemeines EE 15
ruutaiokwu jboss problem - work-verzeichnis muss manuell gelöscht werden??? Allgemeines EE 5
Stillmatic sendRedirect Problem! Allgemeines EE 3
M Problem mit Lookup auf EJB3 mit Glassfish Allgemeines EE 11
0 Problem mit librarys javax.servlet.http.HttpServletRequest cannot be resolved Allgemeines EE 1
X JBoss InitialContext problem Allgemeines EE 5
LordZed Problem mit dem einbinden von Bibliotheken, die sich gegenseitig verwenden Allgemeines EE 5
H GWT Problem beim Ausführen Allgemeines EE 8
Q Problem mit JMS und Weblogic 10 Allgemeines EE 5
E Performance-Problem beim ersten Request Allgemeines EE 4
G Multi User Problem Allgemeines EE 8
G Datasource Problem Allgemeines EE 1
D Problem mit EJB: Bean soll Objekt eigener Klasse zurückgeben Allgemeines EE 2
N JavaMail Problem Allgemeines EE 4
N JBoss Problem mit Bibliothek in unterschiedlichen Versionen Allgemeines EE 2
A Tomcat -- JSP: komisches Problem Allgemeines EE 11
W Speicher-Problem bei WebApp unter Tomcat, Struts, Hibernate Allgemeines EE 3
B Problem mit ActionListener Allgemeines EE 13
G Simples JSF-Projekt in Eclipse - Problem Allgemeines EE 9
O eclipse - tomcat: Problem bei einfachem Webservice Allgemeines EE 16
J Problem mit EJB Aufruf und DualCore Rechner Allgemeines EE 4
J ejb3.0 datenbank problem Allgemeines EE 2
J Problem mit Zurück-Button Allgemeines EE 2
T Tomcat: JNDI + JDBC Problem Allgemeines EE 3
J problem mit jsp/js Allgemeines EE 2
B Help - EJB2 - Problem mit Hybernate und "LIMIT" Allgemeines EE 6
B JSTL Problem Allgemeines EE 8
byte Tomcat Deployment Problem (HTTP Status 503) Allgemeines EE 8
S Problem mit t:selectOneRadio und ValueChangeListener Allgemeines EE 2
S Problem mit Struts und tiles Allgemeines EE 4
B Problem mit JBoss-4.2.1.GA Allgemeines EE 8
N Tiles - JSF Problem Allgemeines EE 3
M JSF & EJB "Bean not bound" Problem Allgemeines EE 4
megachucky JMS - Problem mit TemporaryQueue Allgemeines EE 2
G Problem mit MimeType/ContentType Allgemeines EE 4
Y XFire - Maven Build Problem Allgemeines EE 2
D JSP Problem mit equals? Allgemeines EE 2
A Eclipse Start-Problem Allgemeines EE 5
S JSF - Custom converter Problem Allgemeines EE 3
Y JSF Uhrzeitausgabe Problem Allgemeines EE 4
M servlet --> jsp - problem beim umstrukturieren Allgemeines EE 5
Y JSF - rendered Problem Allgemeines EE 1
D Servlet Problem über Server Allgemeines EE 26
Zed JSF h:inputText h:outputText update Problem Allgemeines EE 2
S JDBC Mysql Connection Problem - datasource null Allgemeines EE 3
T Session-Problem Allgemeines EE 2
R Tiles - Layout-Problem wegen Leerzeichen Allgemeines EE 6
G Tomcat / Eclipse oder Web.xml Problem Allgemeines EE 11
S Netbeans 5.5 Visual Web Pack Problem mit INSERT und PK Allgemeines EE 4
D JSF Problem mit Action Allgemeines EE 2
F Klassen und zugriffs Problem "Help wanted"! Allgemeines EE 16
D <input type="file"> Problem Allgemeines EE 6
N Struts - Problem mit <html:link> Action Allgemeines EE 3
A Problem / Fehler beim Einbinden einer Klasse in ein JSP Allgemeines EE 20
G Session Problem Allgemeines EE 5
T Ant Compiler Problem Allgemeines EE 9
A Hibernate-Problem mit MySQL-Cluster Allgemeines EE 6
H Servlet problem Allgemeines EE 10
G Problem mit Benutzerverwaltung Allgemeines EE 3
S Hibernate Mapping Problem Allgemeines EE 3
S Hibernate INSERT Problem Allgemeines EE 11
S Dummes JSP-Problem Allgemeines EE 8
P EJB-Installations-Problem Allgemeines EE 4
S CSS Problem in JSP Allgemeines EE 16
C Problem mit html:optionsCollection Allgemeines EE 4
R HILFE: Problem mit JSF examples Allgemeines EE 10
R Problem mit value-expression Allgemeines EE 7
R Problem mit for-schleife in JSP tag Allgemeines EE 8
B Struts Problem: Array in JSP ausgeben (logic:iterate) Allgemeines EE 12
M Redirct-Problem Allgemeines EE 4
M Geronimo v1.1 - Problem mit EAR deployen Allgemeines EE 5

Ähnliche Java Themen

Neue Themen


Oben