Внедрение Java EE 6 в абстрактный класс

В проекте 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
  }
}

Есть ли какие-либо правила, которые я пропустил в отношении внедрения, определенного в абстрактном классе?

Что-нибудь еще кричит "нуб"?

Если явных ошибок нет, есть идеи, как это исправить?

8
задан rusty_turkey 2 May 2012 в 00:04
поделиться