Domanda

Ho uno stateless EJB SessionBean con bith @local e @Remote annotazioni. Il codice sta funzionando benissimo in WebLogic Server. Tuttavia sulla distribuzione per Websphere dà seguente eccezione.

bm.ejs.container.EJBConfigurationException: BUSINESS_INTERFACE_DESIGNATED_AS_BOTH_REMOTE_AND_LOCAL: 'oracle.odc.session.ODCSession'

La classe di interfaccia di business oracle.odc.session.ODCSession non può essere sia a distanza e locale.

C'è qualche soluzione disponibile per farlo funzionare senza scrivere EJB separati per l'invocazione remota e locale?

È stato utile?

Soluzione

Una soluzione è quella di avere un'interfaccia di base con le dichiarazioni di metodo e quindi avere un'interfaccia locale e un inteface remoto, che si estendono l'interfaccia di base, per esempio.

public interface MyEJBBase {
    public void foo();
    public void bar();
}

@Local
public interface MyEJBLocal extends MyEJBBase {}

@Remote
public interface MyEJBRemote extends MyEJBBase {}

Altri suggerimenti

Per quanto ne sappia non c'è modo, l'errore sembra abbastanza descrittivo.

Dalla sezione 4.9.7 della specifica EJB 3.2:

  

La stessa interfaccia business non può essere sia un locale e un telecomando   interfaccia business del fagiolo.

È possibile utilizzare subinterfaces come una soluzione:

public interface MyInterface { /* all the methods */ }
public interface MyRemoteInterface extends MyInterface { /* empty */ }

@Stateless
@Remote(MyRemoteInterface.class)
@Local(MyInterface.class)
public class MyBean { /* ... */ }

Si noti che i parametri ei valori restituiti dei metodi sull'interfaccia remota sarà passaggio per valore ma i parametri e valori restituiti dei metodi sull'interfaccia locale sarà passaggio per riferimento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top