La propagazione delle transazioni non è supportata per le interfacce remote EJB (Enterprise JavaBeans)

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.

Questa regola contrassegna inoltre i seguenti riferimenti nel file ejb-jar.xml:

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.

Verificare che le interfacce EJB remote siano necessarie

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.

Se le interfacce remote sono realmente necessarie

Comprimere i bean EJB in un servizio web (JAX-WS)

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.

Gestione della propagazione della transazione
Liberty fornisce il supporto WS-AT (Web Services Atomic Transaction) che abilita le transazioni globali distribuite. Quando gli EJB vengono distribuiti come servizi Web, è possibile utilizzare WS-AT per gestire le transazioni. Consultare Web Services Atomic Transaction overview per ulteriori informazioni.

Per ulteriori informazioni sugli argomenti correlati, consultare