В проекте Java EE 6, над которым я работаю, есть одиночное поле, аннотированное @EJB, которое не внедряется. Инжектор работает нормально везде.
Будучи новичком в Java EE, я не знаю, связано ли это с тем, что поле находится в абстрактном классе, и я не могу найти какие-либо данные от Glassfish (3.1.2 )о том, почему эта инъекция не происходит.
В журнале сервера нет ошибок или предупреждений, пока не возникнет исключение NullPointerException, поскольку поле dataSourceControl равно null. Я проверил, что создается экземпляр DataSourceControl Singleton, помещая журнал в его конструктор.
Насколько я могу судить, поле dataSourceControl не внедряется, но в журналах нет причин, по которым это происходит.
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
}
}
Есть ли какие-либо правила, которые я пропустил в отношении внедрения, определенного в абстрактном классе?
Что-нибудь еще кричит "нуб"?
Если явных ошибок нет, есть идеи, как это исправить?