Definire interfacce separate per gli EJB (Enterprise JavaBeans) locali e remoti

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