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.
public interface MyInterface () { .. }
@Stateless(name="MyEJB")
@Remote(MyInterface.class)
@Local(MyInterface.class)
public final class MyEJB implements 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;Stateless</session-type>
<transaction-typegt;Container</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()
{ .. }