Definir interfaces separadas para Enterprise JavaBeans (EJB) locais e remotos

Uma interface não pode ser local e remota ao mesmo tempo. No entanto, é possível definir todos os métodos em uma única interface e, em seguida, ampliar a interface para criar interfaces locais e remotas separadas que possam ser referenciadas em anotações ou elementos.

Essa regra sinaliza interfaces que são usadas em ambas as anotações, javax.ejb.Local e javax.ejb.Remote, na mesma classe. Ela também sinaliza os elementos business-local e business-remote que referenciam a mesma interface dentro do mesmo elemento session no arquivo ejb-jar.xml.

No código Java a seguir, a referência a MyInterface.class é sinalizada nas anotações javax.ejb.Local e javax.ejb.Remote.

interface pública MyInterface () { .. }

@Stateless(nome = "MyEJB")
@Remote(MyInterface.class) @Local(MyInterface.class) classe final pública MyEJB implementa MyInterface {
    ...
}

No arquivo ejb-jar.xml a seguir, os elementos business-local e business-remote são sinalizados por essa regra.

<session> <ejb-name>MyEJB</ejb-name> <business-local>com.ibm.sample.MyInterface</business-local> <business-remote>com.ibm.sample.MyInterface</business-remote> <ejb-class>com.ibm.sample.MyEJB</ejb-class> < session-typegt; Stateless</session-type> .
    < transaction-typegt; Container</transaction-type> </session>

Para resolver esse problema, amplie a interface para criar interfaces locais e remotas separadas e referencie-as nas anotações ou nos elementos:

public interface MyInterfaceLocal extends MyInterface() 
{ .. }
public interface MyInterfaceRemote extends MyInterface() 
{ .. }