使用MySQL进行JDBC连接池的Jetty时,JNDI查找失败?

使用MySQL进行JDBC连接池的Jetty时,JNDI查找失败?,第1张

使用MySQL进行JDBC连接池的Jetty时,JNDI查找失败?

这是嵌入式Jetty特有的问题的组合。

首先,在我实际启动Web服务器之前(即在调用之前),正在配置和启动Web服务器的启动器代码正在执行JNDI查找

server.start()
,因此在该阶段未初始化JNDI配置。

但是,即使进行此更改也不起作用,因为

envCtx.lookup("jdbc/DataSource")
需要从与WebApp关联的线程中进行调用。因此,我将该代码移到了静态块,该静态块在Web服务器请求首次请求数据库连接时被调用。

最后,我在 启动器代码中得到了以下内容

public static void main(String[] args) {    Server server = new Server();    //Enable parsing of jndi-related parts of web.xml and jetty-env.xml    ClassList classlist = ClassList.setServerDefault(server);    classlist.addAfter( "org.eclipse.jetty.webapp.FragmentConfiguration",  "org.eclipse.jetty.plus.webapp.EnvConfiguration",  "org.eclipse.jetty.plus.webapp.PlusConfiguration");......server.start();

无法通过该主线程进行JNDI查找,因此将其放置在类似于

init
servlet请求的方法的地方,或者像我一样,将其放置在servlet使用的静态数据库访问器类的同步方法中,例如

public class DatabaseUtils {    private static DataSource datasource;    private static synchronized Connection getDBConnection() throws SQLException {        if (datasource == null) { initDataSource();        }        return datasource.getConnection();    }    public static void initDataSource() {        try {  datasource = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/DataSource");  LOG.info("Database connection pool initalized successfully");        } catch (Exception e) { LOG.error("Error while initialising the database connection pool", e);        }    }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5105467.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存