Interfejs nie może być jednocześnie lokalny i zdalny. Jednak można zdefiniować wszystkie metody w jednym interfejsie, a następnie rozszerzyć interfejs w celu utworzenia oddzielnych interfejsów zdalnych i lokalnych, do których można się odwoływać w adnotacjach lub elementach.
Ta reguła powoduje oznaczenie flagą interfejsów, które są używane zarówno w adnotacjach javax.ejb.Local, jak i javax.ejb.Remote w tej samej klasie. Powoduje ona również oznaczenie flagą elementów business-local i business-remote odwołujących się do tego samego interfejsu w tym samym elemencie session w pliku ejb-jar.xml.
W poniższym kodzie Java odwołanie do klasy MyInterface.class zostało oznaczone flagą w adnotacjach javax.ejb.Local i javax.ejb.Remote.
public interface MyInterface () { .. }
@Stateless(name = "MyEJB")
@Remote(MyInterface.class) @Local(MyInterface.class) public final class MyEJB implements MyInterface {
...
}
W poniższym pliku ejb-jar.xml elementy business-local i business-remote są oznaczane flagą przez tę regułę.
<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; Kontener</transaction-type> </session>
Aby rozwiązać ten problem, należy rozszerzyć interfejs w celu utworzenia oddzielnych interfejsów lokalnych i zdalnych oraz przywoływać je w adnotacjach lub elementach:
public interface MojInterfejslokalny extends MojInterfejs()
{ .. }
public interface MojInterfejsZdalny extends MojInterfejs()
{ .. }