2

管理コントロール パネルで JNDI 名: jdbc/shop を使用して jdbc リソースをセットアップしました。「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 is null ?」を取得しています。ログにエントリ。この問題をデバッグ/修正する方法について何か提案はありますか? JNDI名を変更するとjndiエラーが発生するため、私が理解しているように、JNDI名も100%正しいです。

4

1 に答える 1

4

インジェクションは構築後に行われるため、Bean のコンストラクターでリソースを使用できません。

で注釈が付けられた初期化メソッドを使用@PostConstructして、リソースにアクセスします。

import javax.annotation.PostConstruct;
..
@PostConstruct
public void init() {
   if(db == null) {
      System.err.println("db is null ?");
   }
}
于 2012-05-16T07:08:30.983 に答える