En un proyecto de Java EE 6 en el que estoy trabajando, hay un campo solitario anotado con @EJB que no se está inyectando. La inyección funciona bien en todos lados.Inyección de Java EE 6 en la clase abstracta
Siendo nuevo en Java EE, no sé si está relacionado con que el campo esté en una clase abstracta, ni puedo encontrar ningún resultado de Glassfish (3.1.2) acerca de por qué esta inyección no está ocurriendo.
No hay errores o advertencias en el registro del servidor hasta que se produzca la excepción NullPointerException porque el campo dataSourceControl es nulo. He verificado que DataSourceControl Singleton está siendo instanciado al poner logging en su constructor.
Por lo que puedo decir, el campo dataSourceControl no se está inyectando, pero los registros no me dan ninguna razón para esto.
public abstract class AbstractDataMap<T> {
@EJB
private DataSourceControl dataSourceControl; // This is not being injected
DataSourceControl getDataSourceControl() {
return dataSourceControl;
}
// Other methods
}
public abstract class AbstractDataMapDBProd<T> extends AbstractDataMap<T> {
@Override
protected Connection getDBConnection() {
return getDataSourceControl().getConnectionX(); // NullPointerException here
}
// Other methods
}
@Stateless
public class CountryMap extends AbstractDataMapDBProd<Country> {
public boolean update(final Country current, final Country legacy) {
Connection connection = getDBConnection();
// More code 'n stuff
}
}
¿Hay alguna regla que haya omitido con respecto a la inyección que se define en una clase abstracta?
¿Algo más que llora 'noob'?
Si no hay errores obvios, ¿alguna idea sobre cómo depurar esto?
Esto debería funcionar SI obtiene una instancia de 'CountryMap' del contenedor (es decir, inyección o búsqueda) en lugar de hacerlo a través de' new CountryMap'. ¿Cómo está obteniendo una instancia de 'CountryMap'? –
¡bkail, lo resolvió! Seguí mi código en la otra dirección y mis clases CountryMap (y otras clases de Map) fueron creadas manualmente. –
@bkail ¿puede por favor publicar una respuesta para que pueda marcarla como correcta? Gracias. –