Ho una domanda relativa a possibili problemi di prestazioni durante l'utilizzo dell'annotazione @EJB. Immaginate il seguente scenario@EJB injection vs lookup - performance issue
public class MyBean1 implements MyBean1Remote{
@EJB
private MyBean2Remote myBean2;
@EJB
private MyBean2Remote myBean3;
...
@EJB
private MyBean20Remote myBean20;
}
C'è un bean con molte dipendenze rispetto agli altri bean. In base alle specifiche EJB se mi piacerebbe iniettare MyBean1Remote su un altro bean, il contenitore dovrebbe prendere tutte le dipendenze richieste dal suo pool per iniettarlo in MyBean1Remote e quindi inserire il riferimento allo stub MyBean1Remote.
così nel seguire le esigenze del contenitore scenario riservati 20 EJB (myBean1 e le sue dipendenze 19)
public class MyAnotherBean implement MyAnotherRemote{
@EJB
private MyBean1Remote myBean1
}
diciamo che nella maggior parte dei casi useremo solo dipendenza da un unico per ogni formula commerciale di myBean1. Di conseguenza, ogni volta che vogliamo iniettare quel bean, forziamo il contenitore a riservare molti EJB non necessari. Supponiamo anche che stiamo operando su bean remoti, quindi probabilmente il contenitore dovrebbe anche eseguire alcuni algoritmi di bilanciamento del carico prima di iniettare i bean dipendenti.
Domande:
Non sarebbe causa prenotazione delle risorse inutili e più oltre problema di prestazioni, mentre operano in ambiente cluster?
Forse il buon vecchio ServiceLocator potrebbe essere la soluzione migliore perché con questo approccio chiederei un EJB specifico quando ne abbiamo davvero bisogno?
+1 Sì, questa è anche una buona risposta :) L'istanza stessa non viene mai iniettata, ma è un proxy. Accanto a questo, come nella mia risposta, le istanze effettive nel pool hanno già risolto tutte le loro dipendenze. –