【问题标题】:Centralize in a single class the lookup of a resource in Tomcat 7 jdni在单个类中集中查找 Tomcat 7 jndi 中的资源
【发布时间】:2012-12-10 14:53:58
【问题描述】:

我正在使用 NetBeans 和 Tomcat 7 创建一个 Web 应用程序,并且我想创建我的第一个连接池。 我已按照此处的 tomcat 文档中的所有步骤进行操作: http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html

但是在我的应用程序中,我将有许多 DAO 对象,每个对象都有许多不同的方法,所以我想避免编写代码来查找数据源并在每个访问数据库的方法中获取连接,所以我创建了一个类来集中这个操作并返回到不同 DAO 对象的连接。

您可以看到下面的代码,但正如我所说,这是我第一次使用这个,所以我不确定......这对你有意义吗?有没有更好的方法来做这样的事情?还是在每个方法中都写这段代码更好?

如果这确实有意义,我可以使用 Context 甚至 DataSource 作为静态属性来避免连续查找吗?

非常感谢!

我的 ConnectionPool 类:

package dao.mysql;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.tomcat.jdbc.pool.DataSource;


public class ConnectionPool {

    public static Connection getConnection() {
        Connection connection = null;
        try {            
            Context initCtx = new InitialContext();
            Context envCtx = (Context) initCtx.lookup("java:comp/env");
            DataSource ds = (DataSource)envCtx.lookup("jdbc/EmployeeDB");

            connection = ds.getConnection();

        } catch (SQLException ex) {
            Logger.getLogger(ConnectionPool.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NamingException ex) {
            Logger.getLogger(ConnectionPool.class.getName()).log(Level.SEVERE, null, ex);
        }
        return connection;
    }
}

【问题讨论】:

    标签: java tomcat7 jndi connection-pooling


    【解决方案1】:

    您可以将 JDBC 连接池用作单例 bean,如此处所述 in this article.

    【讨论】:

    • 谢谢@anubhava,但我现在很困惑,因为实际上我的第一种方法类似于您发布的链接中的内容,其他用户说我试图“重新发明轮子”。请在此处查看我的第一篇文章:stackoverflow.com/questions/13792469/… 并告诉我我的第一种方法是否正确。非常感谢!
    • @MikO:我同意最好使用通过 JNDI 定义的数据源,就像您在上面的代码中所做的那样。但是,我提供了该链接以向您展示如何将连接池与 ServletContextListener 一起使用,以便您可以干净地初始化和销毁​​所有数据库连接。
    • 好的,所以我上面的代码是正确的并且有意义吗?使用 JDNI 并将查找集中在一个类中?再次非常感谢。
    • 是的,尽管我建议它在 ServletContextListener 中用于干净的初始化和销毁​​,但对于您的用例集中它确实有意义(我赞成您的问题)。
    • 非常感谢@anubhava!我将看一下 ServeltContextListener 类,因为我以前从未使用过它...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2014-04-18
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多