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 MojInterfejs () { .. }
@Stateless(name="MojEJB")
@Remote(MojInterfejs.class)
@Local(MojInterfejs.class)
public final class MojEJB implements MojInterfejs {
...
}
|
W poniższym pliku ejb-jar.xml elementy business-local i business-remote są oznaczane flagą przez tę regułę.
<session>
<ejb-name>MojEJB</ejb-name>
<business-local>com.ibm.sample.MojInterfejs</business-local>
<business-remote>com.ibm.sample.MojInterfejs</business-remote>
<ejb-class>com.ibm.sample.MojEJB</ejb-class>
<session-typegt;Stateless</session-type>
<transaction-typegt;Container</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()
{ .. }