Liberty non supporta la propagazione in uscita o in entrata delle transazioni per le interfacce remote EJB. Per impostazione predefinita, i bean EJB sono gestiti dal contenitore ed utilizzano l'attributo di transazione Obbligatorio. Di conseguenza, le definizioni EJB esistenti che non specificano
alcuna proprietà
container-transaction
sono configurate per impostazione predefinita in modo da utilizzare le transazioni, sebbene non siano supportate.
Questa regola contrassegna il codice Java che fa riferimento alle seguenti annotazioni EJB che indicano l'utilizzo di interfacce home o business remote.
javax.ejb.Remotejavax.ejb.RemoteHomeQuesta regola contrassegna inoltre i seguenti riferimenti nel file ejb-jar.xml:
<remote/><business-remote/>
La specifica EJB richiede prodotti che supportino la propagazione delle transazioni in uscita per poter inviare un contesto transazioni null.
Questo contesto deve essere respinto dai componenti EJB che utilizzano gli attributi di transazione Required (predefinito), Mandatory o Supports. Un client con una transazione globale attiva non può avviare un bean EJB con gli attributi di transazione predefiniti se il client o server è in Liberty.
Per abilitare il client all'avvio del bean EJB, modificare il bean EJB affinché utilizzi gli attributi di transazione RequiresNew o NotSupported. Sebbene tali attributi consentano di avviare il bean EJB,
il lavoro transazionale eseguito dal bean EJB non è sottoposto a commit come parte delle transazioni del client.
Notare che la propagazione della transazione è supportata per le interfacce remote EJB in esecuzione nella stessa JVM, tuttavia questo può essere determinato solo con ulteriori analisi del funzionamento dell'applicazione.
Spesso, i bean EJB 2.x configurano le interfacce remote in ejb-jar.xml anche quando non sono utilizzate.
Le interfacce remote sono necessarie solo se si dispone di codice in esecuzione su due JVM differenti.
In WebSphere, questo si verifica tra due server delle applicazioni differenti o tra un'applicazione client ed
un server delle applicazioni in esecuzione in JVM differenti.
Anche le informazioni CORBA, come un URL provider iiop://, in una ricerca di EJB rappresentano un indicatore
dell'utilizzo di bean EJB remoti.
Se si fa riferimento ai bean EJB utilizzando un'interfaccia remota in esecuzione nella stessa JVM,
è possibile utilizzare l'interfaccia locale, che offre prestazioni migliori.
Ove possibile, modificare le annotazioni da @Remote e @Local e da @RemoteHome a @LocalHome e verificare tutti gli
scenari di codice.
Allo stesso modo per la configurazione ejb-jar.xml, rimuovere le definizioni <remote/> e <business-remote/>
e verificare tutti gli scenari.
Mentre la propagazione della transazione è supportata per questo scenario, la procedura ottimale è quella di convertire nell'utilizzo delle interfacce locali
per migliorare le prestazioni e rimuovere la percezione che i metodi possano essere richiamati esternamente dalla stesa JVM.
Per i bean EJB che richiedono l'accesso remoto, la procedura ottimale è la compressione in un servizio Web. Fare riferimento a Annotating an EJB bean to create a web service per istruzioni sull'utilizzo di WebSphere Application Server Developer Tools for Eclipse per apportare queste modifiche al codice. Una volta compressi i bean EJB nei servizi Web, utilizzare il client del servizio Web per richiamare il servizio Web EJB. Dopo la verifica, è possibile rimuovere la configurazione o le annotazioni remote EJB.
Per ulteriori informazioni sugli argomenti correlati, consultare