我应该在JSF应用程序中创建ConnectionPool的位置?

时间:2016-04-18 07:51:14

标签: jsf servlets java-ee

我是JSF / Facelets的新手,我正在创建一个应用程序,它通过(无SQL)数据库执行常规的CRUD操作。数据库有一个API,允许创建连接池,然后从该对象我的操作可以获取和释放连接。我想这个池在部署时只需为整个应用程序创建一次,共享(作为静态?)并在应用程序被销毁后关闭。我的方法是否正确?这样做的最佳做法是什么?我不知道我应该在哪里放置代码以及我应该如何调用它。

使用旧的SQL数据库,我曾在context.xml资源中配置“testOnBorrow”和“validationQuery”,因此我不必以编程方式创建显式池。

我找到了两个很棒的教程(herehere),但是我无法从中找出创建池的代码的位置。

注意:我知道可能只是一个Servlet问题,但我将其标记为JSF,因为我不知道是否有办法在JSF中执行此操作(如应用程序范围的bean)。谢谢。

修改

考虑到我无法通过DataSource找到一个context.xml的JAR来加载数据库的事实,或许我的问题应该更具体:我可以在哪里运行代码一次,当一个部署了JSF应用程序,在销毁JSF应用程序时我可以在哪里运行代码?

1 个答案:

答案 0 :(得分:0)

您可以实现weblistner(即ServletContextListener)。并且可以使用contextInitialized,contextDestroyed方法来创建和销毁连接池

示例:

@WebListener
public class ContextWebListner implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        // initialize connection pool.
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // Destroy connection pool.
    }

}