1 Interfaccia 2 Implementazioni e un'eccezione EJB

1

Nel mio progetto JavaEE ho un'interfaccia simile a questa:

@Local
public interface DataAccess { ... }

E due bean stateless che lo implementano:

@Stateless
public class DataAccess_Online implements DataAccess { ... }

@Stateless
public class DataAccess_Offline implements DataAccess { ... }

E ottengo l'eccezione:

Cannot resolve reference Local ejb-ref.... because there are 2 ejbs in the application with interface ...DataAccess

Il problema è chiaro, potrebbe esserci solo una classe che implementa DataAccess. Ma sarebbe conveniente se potessi usare due. Nel client voglio lavorare solo su Interface DataAccess, quindi non devo distinguere tra online / offline nel mio codice, entrambi offrono gli stessi metodi.

Nel client ho un'iniezione di dipendenza:

@EJB
DataAccess da;

E vedo come questo è un problema con due implementazioni per DataAccess, ma cosa dovrei cambiare per farlo funzionare? Il client inizia sempre con la versione online di DataAccess, ma dopo un po 'potrebbe richiedere la versione offline, quindi la versione offline richiede solo la stessa interfaccia, se ho bisogno di un'iniezione DataAccess sarà sempre la versione online.

Come posso utilizzare due implementazioni di un'interfaccia insieme all'iniezione di dipendenza @EJB?

    
posta Puckl 24.02.2013 - 12:10
fonte

2 risposte

5

Puoi usare:

@Stateless(name="online")
public class DataAccess_Online implements DataAccess { ... }

@EJB(beanName="online")
DataAccess da;
    
risposta data 24.02.2013 - 15:55
fonte
1

Bene, la soluzione era semplice, dovevo solo introdurre una nuova interfaccia:

public interface DataAccessOffline extends DataAccess

L'errore è scomparso e posso inserirmi in DataAccess con @EJB, ma posso comunque passare tra le implementazioni online e offline.

    
risposta data 24.02.2013 - 15:31
fonte

Leggi altre domande sui tag