Un'interfaccia non può essere contemporaneamente sia locale che remota. Tuttavia, è possibile definire tutti i metodi in una singola interfaccia e poi estendere l'interfaccia in modo da creare diverse interfacce locali e remote, a cui è possibile fare riferimento in annotazioni o elementi.
Questa regola contrassegna le interfacce utilizzate sia nell'annotazione javax.ejb.Local che in quella javax.ejb.Remote nella stessa classe. Contrassegna inoltre gli elementi business-local e business-remote che fanno riferimento alla stessa interfaccia nello stesso elemento session nel file ejb-jar.xml.
Nel seguente codice Java, il riferimento a MyInterface.class è contrassegnato nelle annotazioni javax.ejb.Local e javax.ejb.Remote.
interfaccia pubblica MyInterface () { .. }
@Stateless(nome = "MyEJB")
@Remote(MyInterface.class) @Local(MyInterface.class) public final class MyEJB implementa MyInterface {
...
}
Nel seguente file ejb-jar.xml, gli elementi business-local e business-remote sono contrassegnati da questa regola.
<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; Senza stato</session-type>
< transaction-typegt; Contenitore</transaction-type>
</session>
Per risolvere questo problema, estendere l'interfaccia per creare diverse interfacce locali e remote, e farvi riferimento nelle annotazioni o negli elementi:
public interface MyInterfaceLocal extends MyInterface()
{ .. }
public interface MyInterfaceRemote extends MyInterface()
{ .. }