Šíření transakce není podporováno pro vzdálená rozhraní Enterprise JavaBeans (EJB)

Server Liberty nepodporuje odchozí nebo příchozí šíření transakcí pro vzdálená rozhraní EJB. Při výchozím nastavení jsou objekty EJB bean spravovány kontejnerem a používají atribut transakce Required. V důsledku toho budou existující definice EJB, které neurčují žádné vlastnosti container-transaction, standardně nakonfigurovány pro použití transakcí, i když nejsou podporovány.

Toto pravidlo značí kód Java, který odkazuje na následující anotace EJB, které označují použití vzdálených obchodních nebo domovských rozhraní:

Toto pravidlo také značí následující odkazy v souboru ejb-jar.xml:

Specifikace EJB vyžaduje, aby produkty, které podporují odchozí šíření transakcí, stále posílaly kontext transakce s hodnotou Null. Tento kontext musí být odmítnut komponentami EJB, které používají atributy transakce Required (výchozí), Mandatory nebo Supports. Klient s aktivní globální transakcí nemůže spustit objekt typu EJB bean s výchozími atributy transakce, je-li klient nebo server na platformě Liberty.

chcete-li povolit, aby klient spouštěl objekt EJB bean, změňte objekt EJB pro použití atributu transakce RequiresNew nebo NotSupported. Ačkoli tyto atributy povolí spuštění objektu typu EJB bean, není transakční zpracování provedené objektem EJB bean potvrzeno v rámci transakcí klienta.

Všimněte si, že šíření transakce je podporováno pro vzdálená rozhraní EJB, která jsou spuštěna ve stejném prostředí JVM, avšak tato možnost může být určena pouze s dalším vyšetřováním chování aplikace.

Ujistěte se, že jsou vyžadována vzdálená rozhraní EJB

Objekty typu EJB 2.x bean často konfigurují vzdálená rozhraní v souboru ejb-jar.xml i v případě, že nejsou použity. Vzdálená rozhraní potřebujete pouze v případě, že máte kód spuštěný přes dvě různá prostředí JVM. Ve výrazech WebSphere to znamená buď mezi dvěma různými aplikačními servery, nebo mezi aplikací klienta a aplikačním serverem spuštěnými v různých prostředích JVM. Informace CORBA, jako např. adresa URL poskytovatele iiop://, ve vyhledávání objektů EJB je také indikátorem, že se používají vzdálené objekty EJB bean.

Pokud odkazujete na objekty EJB bean spuštěné ve stejném prostředí JVM pomocí vzdáleného rozhraní, může být použito lokální rozhraní s lepším výkonem. Je-li to možné, změňte anotace z @Remote na @Local a z @RemoteHome na @LocalHome a otestujte všechny vaše scénáře kódu. Podobně pro konfiguraci ejb-jar.xml odeberte definice <remote/> a <business-remote/> a otestujte všechny scénáře. Zatímco šíření transakcí je podporováno pro tento scénář, nejlepším postupem je převod na použití lokálních rozhraní pro zlepšení výkonu a odebrání dojmu, že metody lze volat externě ze stejného prostředí JVM.

Pokud opravdu potřebujete vzdálená rozhraní

Zalomte objekty typu EJB ve webové službě (JAX-WS)

V případě objektů typu EJB bean, které vyžadují vzdálený přístup, je nejlepší postup je zabalit do webové služby. Viz Anotace objektu typu EJB bean k vytvoření webové služby, kde naleznete pokyny k použití produktu WebSphere Application Server Developer Tools for Eclipse ke změně těchto změn kódu. Po zabalení objektů typu EJB bean ve webových službách použijte klienta webové služby k volání webové služby EJB. Po testování můžete odebrat vzdálené anotace nebo konfiguraci EJB.

Zpracování šíření transakce
Liberty poskytuje podporu Web Services Atomic Transaction (WS-AT), která umožňuje distribuované globální transakce. Je-li váš objekt EJB implementován jako webové služby, lze pro správu transakcí použít standard WS-AT. Další informace viz Přehled Web Services Atomic Transaction.

Další informace k souvisejícím tématům viz