Glassfish 3.1 @Resource(..)DataSource在运行时为null

时间:2012-05-15 11:58:52

标签: java-ee glassfish-3

我在管理员控制面板中设置了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错误。

1 个答案:

答案 0 :(得分:3)

您的资源在bean的构造函数中不可用,因为在构造之后进行了注入。

使用带@PostConstruct注释的初始化方法来访问您的资源:

import javax.annotation.PostConstruct;
..
@PostConstruct
public void init() {
   if(db == null) {
      System.err.println("db is null ?");
   }
}