Transaktionen mit zweiphasiger Festschreibung (XA) sind in Liberty auf Cloudplattformen nicht aktiviert. Standardmäßig schreibt der Transaktionsmanager von Liberty die Transaktionsprotokolldatei in das lokale Dateisystem. Da das lokale Dateisystem auf Cloudplattformen ephemer ist, ist die Transaktionsprotokolldatei nach dem Absturz einer Anwendung oder der Java Virtual Machine nicht verfügbar. Obwohl der Transaktionsmanager so konfiguriert werden kann, dass er für die Speicherung der Transaktionsprotokolle Datenbankservices verwendet, erstellen Cloudplattformen nach dem Absturz automatisch eine vollständig neue Instanz der Anwendung. Deshalb kann der Transaktionsmanager nicht erkennen, welches Protokoll er zum Wiederherstellen der Transaktionen der ausgefallenen Instanz verwenden muss.
Standardmäßig sind Enterprise JavaBeans (EJB) containergesteuert und haben ein Transaktionsattribut Required, d. h.,
sie verwenden JTA-Transaktionen. JTA-Transaktionen, die sich nur über eine einzige Ressource erstrecken, werden vollständig unterstützt. JTA-Transaktionen,
die sich über mehrere Ressourcen erstrecken, setzen eine zweiphasige Festschreibung voraus, die nicht unterstützt wird. Diese Regel markiert ejb-jar.xml-Dateien und Java-Code, der Referenzen auf das Paket javax.ejb enthält.
Diese Regel markiert auch Java-Code mit Referenzen auf die Klasse javax.transaction.UserTransaction.
Prüfen Sie, ob Ihre Anwendung XA-Transaktionen verwendet, und entfernen Sie gegebenenfalls vorhandene XA-Transaktionen.
Die folgenden expliziten Annotationen weisen in Java-Code auf die Verwendung von JTA-Transaktionen hin.
javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.MANDATORY)javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.REQUIRED)javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.REQUIRES_NEW)javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.SUPPORTS)javax.ejb.TransactionManagement(javax.ejb.TransactionManagementType.CONTAINER)Die folgenden expliziten Elemente weisen in der Datei ejb-jar.xml auf die Verwendung von JTA-Transaktionen hin:
<trans-attribute>Mandatory|Required|RequiresNew|Supports</trans-attribute><transaction-type>Container</transaction-type>Hinweis: Wenn Ihre Anwendung die Klasse javax.transactionUserTransaction nicht verwendet, und alle Ihre Anwendungs-EJB-Beans Bean-verwaltet oder mit den Transaktionsattributen „Never“ oder „NotSupported“ containergesteuert sind, verwendet Ihre Anwendung keine XA-Transaktionen und die Markierung dieser Regel kann ignoriert werden.
Die folgenden expliziten Annotationen weisen darauf hin, dass eine EJB-Bean keine XA-Transaktionen verwendet:
javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.NOT_SUPPORTED)javax.ejb.TransactionManagement(javax.ejb.TransactionManagementType.BEAN)<trans-attribute>Never|NotSupported</trans-attribute><transaction-type>Bean</transaction-type>