Liberty nu suportă
propagarea tranzacţiei de intrare sau de ieşire pentru interfeţe la distanţă EJB. Implicit, bean-urile EJB
sunt gestionate de container şi utilizează atributul de tranzacţie
Required. Ca rezultat, definiţiile EJB existente care nu
specifică nicio proprietate container-transaction sunt configurate
implicit pentru a utiliza tranzacţii, deşi nu sunt suportate.
Această regulă semnalează codul Java care face referire la următoarele adnotări EJB care indică utilizarea interfeţelor la distanţă sau interfeţelor home:
javax.ejb.Remotejavax.ejb.RemoteHomeAceastă regulă, de asemenea, semnalează următoarele referinţe în fişierul ejb-jar.xml:
<remote/><business-remote/>
Specificaţia EJB necesită produse care suportă propagarea
tranzacţiei de ieşire pentru a trimite în continuare un context de
tranzacţie null.
Acest context trebuie să fie refuzat de componentele EJB care utilizează
atributele de tranzacţie Required
(implicit),
Mandatory
sau
Supports. Un client cu o tranzacţie globală activă nu poate porni
un bean EJB cu atributele de tranzacţie implicită dacă
fie clientul, fie serverul este pe Liberty.
Pentru a activa clientul să pornească bean-ul EJB, modificaţi bean-ul EJB
pentru a utiliza atributul de tranzacţie
RequiresNew
sau
NotSupported. Deşi aceste atribute vor permite bean-ului EJB să
pornească, lucrul tranzacţional care este făcut de bean-ul EJB nu este comis ca
parte a tranzacţiilor client.
Reţineţi că propagarea tranzacţiei este suportată pentru interfeţele la distanţă EJB care rulează în acelaşi JVM, dar acest lucru poate fi determinat doar cu o investigare suplimentară a comportamentului aplicaţiei.
Adesea bean-urile EJB 2.x configurează interfeţele la distanţă în ejb-jar.xml chiar şi atunci când nu sunt utilizate.
Aveţi nevoie de interfeţe la distanţă doar dacă aveţi cod care rulează peste
două JVM-uri diferite. În termeni WebSphere, aceasta este fie între două
servere de aplicaţii diferite, fie între o aplicaţie client şi un server de
aplicaţii care rulează în JVM-uri diferite. Informaţiile CORBA, cum ar fi un URL de furnizor iiop://, într-o căutare EJB este de asemenea un indicator că sunt folosite bean-uri EJB la distanţă.
Dacă faceţi referire la bean-uri EJB care utilizează o interfaţă la distanţă
care rulează în acelaşi JVM, interfaţa Local poate fi folosită şi va performa
mai bine. Acolo unde este posibil, modificaţi adnotările de la @Remote la @Local şi de la @RemoteHome la @LocalHome şi testaţi toate scenariile codului dumneavoastră. De asemenea, pentru configuraţia ejb-jar.xml, înlăturaţi definiţiile <remote/> şi <business-remote/> şi testaţi toate scenariile.
În timp ce propagarea tranzacţiei este suportată pentru acest scenariu, cea mai
bună practică este convertirea la utilizarea de interfeţe locale pentru a
îmbunătăţi performanţa şi a înlătura percepţia că metodele pot fi apelate
extern de la acelaşi JVM.
Pentru acele bean-uri EJB care necesită acces la distanţă, cea mai bună practică este să le înfăşuraţi într-un serviciu web. Consultaţi Annotating an EJB bean to create a web service pentru instrucţiuni pentru utilizarea WebSphere Application Server Developer Tools for Eclipse pentru a face aceste modificări de cod. După înfăşurarea bean-urilor EJB în servicii web, utilizaţi clientul de servicii web pentru a apela serviciul web EJB. După testare, puteţi înlătura adnotările la distanţă EJB sau configuraţia.
Pentru mai multe informaţii despre subiectele înrudite, vedeţi