我在管理员控制面板中设置了jdbc资源,其中包含JNDI名称:jdbc / shop,我使用“Ping连接”检查了它并且成功了
这是bean代码摘录:
import javax.annotation.Resource;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import javax.sql.DataSource;
@Named
@RequestScoped
public class IndexBean {
// from glassfish config:
// <jdbc-connection-pool datasource-classname="org.postgresql.ds.PGSimpleDataSource" res-type="javax.sql.DataSource" name="ShopPool"
// <jdbc-resource pool-name="ShopPool" jndi-name="jdbc/shop"
@Resource(name="jdbc/shop")
private DataSource db;
public IndexBean() throws SQLException {
if(db == null) {
System.err.println("db is null ?");
}
}
所以你猜对了,我不断得到 “db是null?”在日志中输入。 有关如何调试/修复此问题的任何建议? 正如我所理解的那样,JNDI名称也是100%正确,因为更改它会导致jndi错误。
答案 0 :(得分:3)
您的资源在bean的构造函数中不可用,因为在构造之后进行了注入。
使用带@PostConstruct
注释的初始化方法来访问您的资源:
import javax.annotation.PostConstruct;
..
@PostConstruct
public void init() {
if(db == null) {
System.err.println("db is null ?");
}
}