1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

TransactionRequiredException bei Oracle

Dieses Thema im Forum "Enterprise Java (JEE, J2EE, Spring & Co.)" wurde erstellt von BLR, 14. Februar 2016.

  1. BLR

    BLR Erfahrenes Mitglied

    Hallo :)

    ich habe bisher mit dem MySQL und Microsoft-SQL Datenbankmanagmentsystemen und dem EntityManager gearbeitet.
    Nun habe ich das mal an einer einfachen Oracle Datenbank ausprobiert und festgestellt, dass
    wenn ich mit dem EntityManager persistieren möchte, unbedingt den "UserTransaction" bemi "begin" und "comit" brauche. Lasse ich das aus, kann ich nicht sagen: "em.persist(Objekt)".

    Das ganze verwundert mich, weil ich bei MySql und Microsoft-Sql noch nie "UserTransaction" verwendet habe.
    Ist das Oracle-Spezifisch oder mache ich was falsch?
    Mein Code ist einfach:
    Code (Java):
    1. userTransaction.begin();
    2. entityManager.persist(Objekt);
    3. userTransaction.commit();
     
  2. saftmeister

    saftmeister Nutze den Saft! Premium-User

    Wie sieht deine Datasource-Konfiguration aus?
     
  3. BLR

    BLR Erfahrenes Mitglied

    Ich benutze einen Glassfisch- Server.
    Er hat eine Default-Datasource, die ich nicht mehr über @ressource(mappedBy="meineDataSource) injezieren muss.

    In der Domain.xml steht folgendes:

    Code (Text):
    1. <resources>
    2. <jdbc-resource pool-name="MyPoolName" object-type="system-all" jndi-name="jdbc/__default"></jdbc-resource>
    3.  
    4. <jdbc-connection-pool datasource-classname="oracle.jdbc.pool.OracleDataSource" name="MyPoolName" res-type="javax.sql.ConnectionPoolDataSource">
    5.   <property name="User" value="onlineshop"></property>
    6.   <property name="URL" value="jdbc:oracle:thin:@//localhost:1521/xe"></property>
    7.   <property name="Password" value="admin123"></property>
    8.   </jdbc-connection-pool>
    9. </resources>
    oder wie meinst du das genau, wie die datasource aussieht?
     
  4. BLR

    BLR Erfahrenes Mitglied

    Ich habe die Lösung gefunden, alledings verwundert mich diese etwas.
    Wenn ich in einer BackingBean direkt persestiere, dann muss ich das so tun:
    Code (Java):
    1. @RequestCsoped
    2. @Named
    3. class meineClasse{
    4.  
    5.        void meineMethode(){
    6.                
    7.             @Resource
    8.             private UserTransaction ut;
    9.             ut.begin();
    10.             em.persist(object);
    11.             ut.commit();
    12.  
    13.  
    14.        }
    15. }
    Wenn ich aber die Methode "meineMethode" in eine @stateless Bean verschiebe,
    dann benötige ich auch bei Oracle "UserTransaction" nicht.
    Dann fliegt eine Exception. Ich kann direkt mit dem EntityManager persistieren.
     
    sheel gefällt das.
Die Seite wird geladen...