Como configurar um EJB local e remoto no WebSphere
-
26-09-2019 - |
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?
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.