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()
{ .. }