Liberty unterstützt die Weitergabe abgehender und eingehender Transaktionen für EJB-Remote-Schnittstellen nicht. Standardmäßig sind EJB-Beans containergesteuert und verwenden das Transaktionsattribut Required.
Deshalb sind vorhandene EJB-Definitionen, in denen die Eigenschaft container-transaction nicht angegeben ist, standardmäßig so konfiguriert, dass Transaktionen verwendet werden, obwohl diese nicht unterstützt werden.
Diese Regel markiert Java-Code, der die folgenden EJB-Annotationen referenziert, die die Verwendung von Remote- oder Home-Schnittstellen angeben:
javax.ejb.Remotejavax.ejb.RemoteHomeDiese Regel markiert auch die folgenden Referenzen in der Datei ejb-jar.xml:
<remote/><business-remote/>
Die EJB-Spezifikation erfordert, dass Produkte, die die Weitergabe abgehender Transaktionen unterstützen, weiterhin einen Nulltransaktionskontext senden.
Dieser Kontext muss von EJB-Komponenten, die das Transaktionsattribut
Required
(Standard),
Mandatory
oder
Supports
verwenden, abgelehnt werden. Ein Client mit einer aktiven globalen Transaktion kann keine EJB-Bean mit Standardtransaktionsattributen starten, wenn sich der Client oder der Server in Liberty befindet.
Um dem Client das Starten der EJB-Bean zu ermöglichen, ändern Sie die EJB-Bean so, dass sie das Transaktionsattribut
RequiresNew
oder
NotSupported verwendet.
Obwohl diese Attribute das Starten der EJB-Bean ermöglichen, werden die transaktionsorientierten Arbeitsvorgänge, die von der EJB-Bean ausgeführt werden, im Rahmen der Clienttransaktionen nicht festgeschrieben.
Beachten Sie, dass die Transaktionsweitergabe für EJB-Remote-Schnittstellen unterstützt wird, die in derselben JVM ausgeführt werden, aber dies kann nur durch weitere Untersuchung des Anwendungsverhaltens bestimmt werden.
EJB 2.x-Beans konfigurieren die Remote-Schnittstellen häufig in der Datei ejb-jar.xml, obwohl sie nicht verwendet werden.
Sie benötigen Remote-Schnittstellen nur, wenn Sie Code haben, der in zwei verschiedenen JVMs ausgeführt wird.
In WebSphere-Begriffen bedeutet dies entweder die Ausführung des Codes in zwei verschiedenen Anwendungsservern oder in einer Clientanwendung und in einem Anwendungsserver, die in verschiedenen JVMs ausgeführt werden.
CORBA-Informationen, wie z. B. eine Provider-URL iiop://, in einem EJB-Lookup sind ebenfalls ein Indikator dafür, dass Remote-EJB-Beans verwendet werden.
Wenn Sie EJB-Beans, die eine Remote-Schnittstelle verwenden und in derselben JVM ausgeführt werden, referenzieren,
kann die lokale Schnittstelle verwendet werden, die eine bessere Leistung bietet.
Ändern Sie, sofern möglich, alle Annotationen von @Remote in @Local und von @RemoteHome in @LocalHome und testen Sie alle
Codeszenarien.
Entfernen Sie für die Konfiguration in der Datei "ejb-jar.xml" die Definitionen <remote/> und <business-remote/>
und testen Sie alle Szenarien.
Obwohl die Transaktionsweitergabe für dieses Szenario unterstützt wird, empfiehlt es sich, eine Umstellung auf die lokalen Schnittstellen vorzunehmen,k
um die Leistung zu verbessern und die Auffassung, dass Methoden extern über dieselbe JVM aufgerufen werden können, zu unterbinden.
Für EJB-Beans die Remotezugriff erfordern, empfiehlt es sich, diese in einem Web-Service einzuschließen. Anweisungen zur Verwendung von WebSphere Application Server Developer Tools for Eclipse für diese Codeänderungen finden sie unter EJB-Bean zum Erstellen eines Web-Service annotieren. Nach dem Einschluss der EJB-Beans in Web-Services verwenden Sie den Web-Service-Client, um den EJB-Web-Service aufzurufen. Nach den Tests können Sie die EJB-Remote-Annotationen oder -Konfigurationen entfernen.
Weitere Informationen zu zugehörigen Themen finden Sie in den folgenden Quellen: