Inyección @EJB vs búsqueda: problema de rendimiento
Tengo una pregunta relacionada con un posible problema de rendimiento al usar la anotación @EJB. Imagina el siguiente escenario
public class MyBean1 implements MyBean1Remote{
@EJB
private MyBean2Remote myBean2;
@EJB
private MyBean2Remote myBean3;
...
@EJB
private MyBean20Remote myBean20;
}
Hay un bean con muchas dependencias a otros beans. De acuerdo con las especificaciones de EJB, si quisiera inyectar MyBean1Remote en algún otro bean, el contenedor tendría que tomar todas las dependencias requeridas de su grupo, inyectarlo en MyBean1Remote y luego inyectar la referencia al código auxiliar MyBean1Remote.
así que en el siguiente escenario, el contenedor debe reservar 20 ejbs (myBean1 y sus 19 dependencias)
public class MyAnotherBean implement MyAnotherRemote{
@EJB
private MyBean1Remote myBean1
}
Digamos que en la mayoría de los casos usaremos una sola dependencia por cada método comercial de myBean1. Como resultado, cada vez que queremos inyectar ese bean, forzamos el contenedor a reservar muchos EJB innecesarios. Supongamos también que estamos operando en beans remotos, por lo que probablemente el contenedor también necesitaría realizar un algoritmo de equilibrio de carga antes de inyectar beans dependientes.
Preguntas:
¿No causaría eso una reserva innecesaria de recursos y más problemas de rendimiento durante el funcionamiento en un entorno de clúster?
Quizás el viejo ServiceLocator podría ser una mejor solución porque con este enfoque pediríamos un EJB específico cuando realmente lo necesitemos.