在我正在处理的 Java EE 6 项目中,有一个用 @EJB 注释的单独字段没有被注入。注射在其他任何地方都可以正常工作。
作为 Java EE 的新手,我不知道它是否与抽象类中的字段有关,也找不到 Glassfish(3.1.2)关于为什么没有发生这种注入的任何输出。
在发生 NullPointerException 之前,服务器日志中没有错误或警告,因为 dataSourceControl 字段为空。我已经通过将日志记录到它的构造函数中来验证 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
}
}
关于抽象类中定义的注入,我是否遗漏了任何规则?
还有什么叫“菜鸟”的吗?
如果没有明显的错误,关于如何调试的任何想法?