Pergunta

Eu tenho um EJB de apátrida sessionBean com as anotações Bith @local e @Remote. O código está funcionando bem no servidor WebLogic. No entanto, ao implantá -lo no WebSphere, ele dá a seguir a exceção.

bm.ejs.container.ejbconfigurationException: business_interface_designated_as_both_remote_and_local: 'oracle.odc.session.odcsession'

A classe de interface de negócios Oracle.odc.session.odcsession não pode ser remota e local.

Existe alguma solução alternativa disponível para fazê -lo funcionar sem escrever EJBs separados para invocação remota e local?

Foi útil?

Solução

Uma solução alternativa é ter uma interface básica com as declarações do método e depois ter uma interface local e um inteface remoto, que estendem a interface base, por exemplo,

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

@Local
public interface MyEJBLocal extends MyEJBBase {}

@Remote
public interface MyEJBRemote extends MyEJBBase {}

Outras dicas

Afaik Não há como o erro parece bastante descritivo.

Na seção 4.9.7 da especificação EJB 3.2:

A mesma interface de negócios não pode ser uma interface comercial local e remota do feijão.

Você pode usar subinterfaces como solução alternativa:

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

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

Observe que os parâmetros e os valores de retorno dos métodos na interface remota serão passadas por valor, mas os parâmetros e os valores de retorno dos métodos na interface local serão referidos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top