Zdefiniuj osobne interfejsy dla lokalnych i zdalnych komponentów EJB (Enterprise JavaBeans)

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