Wie kommt man JDBC-Verbindungen von einer JNDI-Datenquelle erhielten in einer Usertransaction 10.3 mit Weblogic teilnehmen?

StackOverflow https://stackoverflow.com/questions/1925556

Frage

Ich Abrufen derzeit sowohl eine Usertransaction und eine Datasource aus einem Weblogic 10.3 Server mit JNDI.

Ich habe die Datenquelle bis zu ‚Unterstützung Global Transactions‘ gesetzt und zur Nutzung ‚Protokollierung Letzte Ressource‘

Meine Hoffnung war, dass durch einen UserTranscation beginnen und dann eine JDBC-Verbindung aus der Datenquelle abzurufen die Verbindung in der Transaktion teilnehmen würde.

Dies scheint nicht der Fall zu sein, und meine Einfügeanweisungen verpflichtet werden sofort und Rollback der Transaktion hat keine Auswirkungen.

Sind meine obigen Annahmen korrekt?

Kann jemand Punkt mich in die Richtung einiger Dokumentation oder Muster auf, wie dies zu erreichen?

Vielen Dank im Voraus

UPDATE:

Wie gewünscht hier ein Skelett Umriss des Codes verwende ich:

private void doSomething() {
Connection conn = null;
try {
    Hashtable env = new java.util.Hashtable();
    env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
    env.put(javax.naming.Context.PROVIDER_URL,"t3://localhost:8080");
    InitialContext ctx = InitialContext(env));

    UserTransaction transaction = null;
    transaction = (UserTransaction) ctx.lookup("java:comp/UserTransaction");

    DataSource dataSource = (DataSource) context.lookup("jdbc/xxxxx/DataSource");
    conn = dataSource.getConnection();
    transaction.begin();
    // JDBC code goes here
    transaction.commit();
} catch(Exception e) {
    // TODO
    if (transaction != null) {
    try {
    transaction.rollback();
    } catch (Exception ex) {
    // TODO
    }
} finally {
  if (con != null) {
    conn.close
  }
}
}

UPDATE 2:

Um dieses Problem zu beheben, hatte ich 2 Dinge zu tun:

  1. ändern Sie die Reihenfolge des Codes zunächst die Transaktion Benutzer beginnen und dann eine Verbindung von den Datastor bekommen (Wie von Pascal Thivent).

  2. Ändern Sie die Datenquelle verwiesen wird durch ' "jdbc / xxxxx / Datasource"' zu einem XADataSource. Das ist, weil ich Code innerhalb der Benutzertransaktion aufrufen, die eine andere Datenquelle verwendet, die bereits Unterstützung LLR konfiguriert wurde und wie erwähnt von Pascal Thivent unter Ihnen nur in einem transcation ein LLR-Datenquelle teilnehmen haben kann.

Ich habe Pascal Thivent die akzeptierte Antwort unten, weil es erklärt diese beiden Fragen.

War es hilfreich?

Lösung

Ja, Ihre Annahmen richtig sind und nach erstellen LLR-fähigen Quellen JDBC-Daten , scheint die Datenquelle richtig konfiguriert ist.

Sie erhalten Sie die Verbindung nach der Benutzertransaktion zu beginnen? Können Sie Ihren Code oder Pseudo-Code zeigen?

UPDATE: Wie bereits erwähnt in Programmierung Überlegungen und Einschränkungen für LLR Datenquellen :

  
      
  • Wenn mit einer LLR-Datenquelle programmieren, müssen Sie die globale Transaktion starten, bevor getConnection auf der LLR Datenquelle aufrufen. Wenn Sie getConnection aufrufen, bevor die globale Transaktion beginnen, alle Vorgänge auf der Verbindung außerhalb der globalen Transaktion gemacht werden.
  •   

So, könnten Sie versuchen, diese:

transaction.begin(); //start the global tx before calling getConnection()
conn = dataSource.getConnection(); 
...
transaction.commit();

UPDATE2: Nicht sicher zu verstehen, von wo aus der zweiten Verbindung steht vor der Tür (Ihr Pseudo-Code wird nicht angezeigt). Jedoch nach dem gleichen Programming Überlegungen und Einschränkungen für LLR Datenquellen :

  
      
  • Nur Instanzen einer LLR-Datenquelle kann in einer bestimmten Transaktion teilnehmen. Eine einzelne LLR Datenquelle Instanzen auf mehreren WebLogic Server haben kann, und zwei Datenquellen werden als gleich sein, wenn sie die gleichen konfigurierten Namen haben. Wenn mehr als ein LLR-Datenquelle Instanz festgestellt wird, und sie sind nicht Instanzen derselben Datenquelle, wird der Transaktions-Manager die Transaktion rückgängig zu machen.
  •   

Eigentlich ohne voll repräsentatives Beispiel, ich fühle mich ein bisschen wie zu Fuß im Dunkel:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top