Pregunta

Tengo un EJB sin estado SessionBean con bith @ local y @Remote anotaciones. El código está trabajando muy bien en el servidor WebLogic. Sin embargo, en su despliegue en WebSphere da siguiente excepción.

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

La clase de interfaz de negocio oracle.odc.session.ODCSession no puede ser a la vez local y remoto.

¿Hay alguna solución disponible para que funcione sin necesidad de escribir EJB separadas para la invocación remota y local?

¿Fue útil?

Solución

Una solución es tener una interfaz de base con las declaraciones de métodos y luego tener una interfaz local y un inteface a distancia, que se extienden la interfaz de base, por ejemplo.

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

@Local
public interface MyEJBLocal extends MyEJBBase {}

@Remote
public interface MyEJBRemote extends MyEJBBase {}

Otros consejos

Que yo sepa no hay manera, el error parece bastante descriptiva.

A partir de la sección 4.9.7 de la especificación EJB 3.2:

  

La misma interfaz de negocio no puede ser a la vez un local y un mando a distancia   interfaz de negocio del grano.

Se puede usar subinterfaces como solución alternativa:

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

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

Nota que los parámetros y valores de retorno de los métodos de la interfaz remoto se pase por valor pero los parámetros y valores de retorno de los métodos de la interfaz local será pase por referencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top