Anwendungen auf "versionsspezifisches" setRollbackOnly-Verhalten von WebSphere umstellen

Verwenden Sie diese Task, um Anwendungen einer EJB-Version nach Version 3.0 zu ermöglichen, das Verhalten von EJB-Anwendungen vor Version 3.0 zu simulieren, und Anwendungen einer EJB-Version vor Version 3.0 zu ermöglichen, das Verhalten von EJB-Anwendungen nach Version 3.0 zu simulieren. Die Schritte in dieser Task, die dieses Verarbeitungsverhalten ermöglichen, basieren auf einem sehr speziellen Verarbeitungsszenario, das im Abschnitt "Informationen zur diese Task" erläutert wird.

Informationen zu diesem Vorgang

Verarbeitungsszenario: Die Basis für diese Task ist das folgende Verarbeitungsszenario.

Es wird eine EJB-Methode aufgerufen, die eine globale Transaktion startet. Während der Ausführung dieser Methode wird eine weitere EJB-Methode aufgerufen, die in derselben Transaktion ausgeführt wird. Während der Ausführung dieser Methode wird die Methode "setRollbackOnly()" aufgerufen. Das Verhalten des EJB-Containers in diesem Szenario wird von der EJB-Spezifikation vorgegeben. Dieses Verhalten ist jedoch erforderlich, um in WebSphere Application Server die Unterstützung für EJB 3.0 zu ändern.

Abschnitt 13.6.2.8 des Dokuments JSR 220: Enterprise JavaBeans™, Version 3.0 EJB Core Contracts and Requirements sowie die vorherigen Versionen der EJB-Spezifikation enthalten folgende Vorgaben:

"If the container initiated the transaction immediately before dispatching the business method to the instance (as opposed to the transaction being inherited from the caller), the container must note that the instance has invoked the setRollbackOnly method. When the business method invocation completes, the container must roll back rather than commit the transaction. If the business method has returned normally or with an application exception, the container must pass the method result or the application exception to the client after the container performed the rollback." Außerdem enthält Abschnitt 14.3.11 folgende Angaben: "However, the container should not throw the javax.ejb.EJBException or java.rmi.RemoteException or if the container performs a transaction rollback because the instance has invoked the setRollbackOnly method on its EJBContext object. In this case, the container must rollback the transaction and pass the business method result or the application exception thrown by the business method to the client."

WebSphere Application Server hat die vorherigen Abschnitte der Spezifikation bisher so interpretiert, dass das setRollbackOnly-Verhalten nur dann angewendet wird, wenn die Transaktion innerhalb der Methode, die die Transaktion startet, als "RollbackOnly" markiert ist. Die Compatibility Test Suite für die Spezifikation EJB 3.0 erfordert jedoch, dass eine als "RollbackOnly" markierte Transaktion immer das setRollbackOnly-Verhalten aufweist, unabhängig davon, ob die Transaktion innerhalb der Methode, die die Transaktion startet, oder in einer anderen Methode in derselben Transaktion, die mit der ursprünglichen EJB-Methode aufgerufen wird, als "RollbackOnly" markiert wird.

Sehen Sie sich zur Veranschaulichung dieser Anforderung das folgende Beispiel an:
  • Eine Anwendung ruft eine Methode art in EJB A mit Unterstützung containergesteuerter Transaktionen (TX_REQUIRED) auf.
  • Der Container startet eine Transaktion und ruft die Methode auf.
  • Methode A.art() ruft eine Methode bob in EJB B mit Unterstützung containergesteuerter Transaktionen (TX_REQUIRED) auf.
  • In B.bob() wird die Methode "setRollbackOnly" in der Transaktion aufgerufen und ausgeführt.

Verhalten vor EJB 3.0: Da die Transaktion nicht mit der Methode B.bob() eingeleitet wird, wird eine Ausnahme des Typs "TransactionRolledbackException" für A.art() und letztendlich an die Clientanwendung ausgelöst.

Verhalten ab EJB 3.0: Methode B.bob() kehrt normalerweise zur Methode A.art() zurück. Methode A.art() führt ein Rollback der Transaktion durch und gibt, wie in der EJB-Spezifikation vorgegebenen, die Ergebnisse an den Client zurück, ohne eine Ausnahme für die Clientanwendung auszulösen.

Da diese Verarbeitung eine Änderung des Verhaltens für Anwendungen bedingt, die von einer früheren Version auf EJB 3.0 oder höher migriert wurden, werden die folgenden JVM-Systemeigenschaften bereitgestellt, damit Sie dieses Verhalten an Ihre Anforderungen anpassen können:
  • com.ibm.websphere.ejbcontainer.limitSetRollbackOnlyBehaviorToInstanceFor: Mit dieser Eigenschaft kann der Benutzer Namen von Anwendungen angeben, in denen die EJBs in den EJB-3.0-Modulen das "setRollbackOnly"-Verhalten vor EJB 3.0, das oben im Abschnitt beschrieben wurde, aufweisen sollen.
  • com.ibm.websphere.ejbcontainer.extendSetRollbackOnlyBehaviorBeyondInstanceFor: Mit dieser Eigenschaft kann der Benutzer Namen von Anwendungen angeben, in denen die EJBs in Modulen einer Version vor EJB 3.0 das zuvor in diesem Abschnitt beschriebene setRollbackOnly-Verhalten der Spezifikation EJB 3.0 aufweisen sollen.
Die Werte dieser Eigenschaften sind die Namen der Anwendungen (Anwendungsname1:Anwendungsname2:Anwendungsname3), die das gewünschte Verhalten aufweisen müssen.

Vorgehensweise

  1. Öffnen Sie die Administrationskonsole.
  2. Wählen Sie Server aus.
  3. Wählen Sie Servertypen aus.
  4. Wählen Sie WebSphere-Anwendungsserver aus.
  5. Wählen Sie den Server aus, den Sie konfigurieren möchten.
  6. Wählen Sie unter "Serverinfrastruktur" die Einträge Java- und Prozessverwaltung > Prozessdefinition aus.
  7. Wählen Sie unter "Weitere Eigenschaften" die Einträge Java Virtual Machine > Angepasste Eigenschaften > Neu aus.
  8. Geben Sie im Feld Name die JVM-Systemeigenschaft ein.

    com.ibm.websphere.ejbcontainer.limitSetRollbackOnlyBehaviorToInstanceFor

    oder

    com.ibm.websphere.ejbcontainer.extendSetRollbackOnlyBehaviorBeyondInstanceFor

  9. Geben Sie im Feld Wert (Anwendungsname1:Anwendungsname2:Anwendungsname3...) ein. Dies sind die Namen der Anwendungen, die das gewünschte Verhalten aufweisen sollen.
  10. Wählen Sie OK aus.
  11. Speichern Sie die Konfiguration.
  12. Starten Sie den Server erneut.

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_version_specific
Dateiname:tejb_version_specific.html