Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Tomcat7JDNI中资源的查找集中在一个类中_Java_Tomcat7_Jndi_Connection Pooling - Fatal编程技术网

Java 将Tomcat7JDNI中资源的查找集中在一个类中

Java 将Tomcat7JDNI中资源的查找集中在一个类中,java,tomcat7,jndi,connection-pooling,Java,Tomcat7,Jndi,Connection Pooling,我正在使用NetBeans和Tomcat7创建一个web应用程序,我想创建我的第一个连接池。 我在这里遵循了tomcat文档中的所有步骤: 但在我的应用程序中,我将有许多DAO对象,每个对象都有许多不同的方法,因此我希望避免编写代码来查找数据源,并在访问DB的每个方法中获取连接,因此我创建了一个类来集中此操作,并返回到不同DAO对象的连接 你可以看到下面的代码,但正如我说的,这是我第一次使用这个,所以我不确定。。。这对你有意义吗?有没有更好的方法来做这样的事情?或者最好在每个方法中编写此代码

我正在使用NetBeans和Tomcat7创建一个web应用程序,我想创建我的第一个连接池。 我在这里遵循了tomcat文档中的所有步骤:

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

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

如果这是有意义的,我可以使用上下文甚至数据源作为静态属性来避免连续查找吗

非常感谢

我的连接池类:

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;
    }
}

您可以将JDBC连接池用作此处所述的单例bean

您可以将JDBC连接池用作此处所述的单例bean

谢谢@anubhava,但我现在感到困惑,因为事实上,我的第一种方法与您发布的链接类似,其他用户说我试图“重新发明轮子”。请看我在这里的第一篇帖子:并告诉我我的第一个方法是否正确。非常感谢@MikO:我同意使用通过JNDI定义的数据源更好,就像您在上面的代码中所做的那样。然而,我给出了这个链接,向您展示了如何使用ServletContextListener的连接池,以便您可以干净地初始化和销毁所有DB连接。好的,那么我上面的代码是正确的,有意义吗?使用JDNI并在类中集中查找?再次非常感谢。虽然我建议在ServletContextListener中使用它进行干净的初始化和销毁,但您的用例将其集中化是有意义的(我对您的问题投了赞成票)。非常感谢@anubhava!我将看一看ServeltContextListener类,因为我以前从未使用过它……谢谢@anubhava,但我现在感到困惑,因为事实上我的第一个方法类似于你发布的链接中的内容,其他用户说我试图“重新发明轮子”。请看我在这里的第一篇帖子:并告诉我我的第一个方法是否正确。非常感谢@MikO:我同意使用通过JNDI定义的数据源更好,就像您在上面的代码中所做的那样。然而,我给出了这个链接,向您展示了如何使用ServletContextListener的连接池,以便您可以干净地初始化和销毁所有DB连接。好的,那么我上面的代码是正确的,有意义吗?使用JDNI并在类中集中查找?再次非常感谢。虽然我建议在ServletContextListener中使用它进行干净的初始化和销毁,但您的用例将其集中化是有意义的(我对您的问题投了赞成票)。非常感谢@anubhava!我将看一看ServeltContextListener类,因为我以前从未使用过它。。。