gpt4 book ai didi

jakarta-ee - Glassfish 3.1 @Resource(..) DataSource 在运行时为空

转载 作者:行者123 更新时间:2023-12-04 18:21:23 24 4
gpt4 key购买 nike

我已经在管理控制面板中使用 JNDI 名称设置了 jdbc 资源: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 ?");
}
}

所以正如你猜到的那样,我不断得到
“分贝为空?”日志中的条目。
有什么建议可以调试/修复这个问题吗?
据我了解,JNDI 名称也是 100% 正确的,因为更改它会导致 jndi 错误。

最佳答案

您的资源在 bean 的构造函数中不可用,因为注入(inject)发生在构造之后。

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

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

关于jakarta-ee - Glassfish 3.1 @Resource(..) DataSource 在运行时为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10600204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com