Wie ein ejb konfiguriert sowohl lokale als auch Remote auf Websphere
-
26-09-2019 - |
Frage
Ich habe ein stateless EJB SessionBean mit bith @local und @Remote Anmerkungen. Der Code funktioniert gut in WebLogic Server. Jedoch darauf Websphere Bereitstellung gibt es folgende Ausnahme.
bm.ejs.container.EJBConfigurationException: BUSINESS_INTERFACE_DESIGNATED_AS_BOTH_REMOTE_AND_LOCAL: 'oracle.odc.session.ODCSession'
Die oracle.odc.session.ODCSession Business-Interface-Klasse kann nicht gleichzeitig remote und lokal sein.
Gibt es eine Abhilfe zur Verfügung, um es für Remote- und lokalen Aufruf ohne das Schreiben eigenes EJBs funktioniert?
Lösung
Eine Abhilfe ist, eine Basis-Schnittstelle mit der Methode Erklärungen haben und dann eine lokale Schnittstelle hat und ein Remote-inteface, die die Basis-Schnittstelle erweitern, z.
public interface MyEJBBase {
public void foo();
public void bar();
}
@Local
public interface MyEJBLocal extends MyEJBBase {}
@Remote
public interface MyEJBRemote extends MyEJBBase {}
Andere Tipps
AFAIK gibt es keine Möglichkeit, die Fehler scheint ziemlich beschreibend.
Aus dem Bereich 4.9.7 der EJB 3.2-Spezifikation:
Das gleiche Business Interface kann sowohl eine lokale und eine Fern Business Interface der Bohne.
Sie können Subinterfaces als Abhilfe verwenden:
public interface MyInterface { /* all the methods */ }
public interface MyRemoteInterface extends MyInterface { /* empty */ }
@Stateless
@Remote(MyRemoteInterface.class)
@Local(MyInterface.class)
public class MyBean { /* ... */ }
Beachten Sie, dass die Parameter und Rückgabewerte der Methoden auf dem Remote-Schnittstelle Pass-by-Wert sein, aber die Parameter und Rückgabewerten der Methoden auf dem lokalen Schnittstelle werden Pass-by-reference sein.