Une interface ne peut pas être locale et distante à la fois. Toutefois, vous pouvez définir toutes les méthodes dans une interface unique, puis étendre cette interface pour créer des interfaces locale et distante que vous pouvez référencer sur des annotations ou des éléments.
Cette règle marque les interfaces qui sont utilisées sur les annotations javax.ejb.Local et javax.ejb.Remote d'une même classe.
Elle marque également les éléments business-local et business-remote qui font référence à la même interface au sein du même élément session dans le fichier ejb-jar.xml.
Dans le code Java ci-dessous, la référence à MyInterface.class est marquée sur les annotations javax.ejb.Local et javax.ejb.Remote.
interface publique MyInterface () { .. }
@Stateless(name = "MyEJB")
@Remote(MyInterface.class) @Local(MyInterface.class) la classe finale publique MyEJB implémente MyInterface {
...
}
Dans le fichier ejb-jar.xml ci-dessous, les éléments business-local et business-remote sont marqués par cette règle.
<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; Sans état</session-type>
< transaction-typegt; Conteneur</transaction-type> </session>
Pour résoudre ce problème, étendez l'interface de manière à créer des interfaces locale et distante, puis référencez-les sur les annotations ou les éléments :
public interface MyInterfaceLocal extends MyInterface()
{ .. }
public interface MyInterfaceRemote extends MyInterface()
{ .. }