Question

J'ai un apatride EJB SessionBean avec bith @local et @Remote annotations. Le code fonctionne bien dans le serveur weblogic. Cependant sur le déploiement à Websphere donne suite à une exception.

bm.ejs.container.EJBConfigurationException: BUSINESS_INTERFACE_DESIGNATED_AS_BOTH_REMOTE_AND_LOCAL: 'oracle.odc.session.ODCSession'

La classe d'interface d'affaires oracle.odc.session.ODCSession ne peut pas être à la fois à distance et locale.

Y at-il solution disponible pour le faire fonctionner sans écrire séparés pour l'appel EJBs à distance et local?

Était-ce utile?

La solution

Une solution de contournement est d'avoir une interface de base avec les déclarations de méthode et ensuite avoir une interface locale et une inteface à distance, qui étend l'interface de base, par exemple.

public interface MyEJBBase {
    public void foo();
    public void bar();
}

@Local
public interface MyEJBLocal extends MyEJBBase {}

@Remote
public interface MyEJBRemote extends MyEJBBase {}

Autres conseils

AFAIK il n'y a aucun moyen, l'erreur semble assez descriptif.

De la section 4.9.7 de la spécification EJB 3.2:

  

La même interface d'affaires ne peut pas être à la fois local et à distance   interface métier du bean.

Vous pouvez utiliser subinterfaces comme solution de contournement:

public interface MyInterface { /* all the methods */ }
public interface MyRemoteInterface extends MyInterface { /* empty */ }

@Stateless
@Remote(MyRemoteInterface.class)
@Local(MyInterface.class)
public class MyBean { /* ... */ }

Notez que les paramètres et les valeurs de retour des méthodes sur l'interface distante seront passe par valeur, mais les paramètres et les valeurs de retour des méthodes sur l'interface locale sera passée par référence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top