2013-06-05 42 views
0

我正在尝试为JSF 2.1应用程序实现连接池,该应用程序中嵌入了H2数据库和Jetty 9 Web服务器。我有两个选项来实现h2数据库的连接池。让Jetty为我实现连接池的选项,或者我定义了一个创建连接池的应用程序作用域管理bean。我想知道哪种方法可以更好地处理连接池?使用应用程序范围内管理的bean哪一种更好的方式来处理连接池?

连接池:

JdbcConnectionPool cp = JdbcConnectionPool.create(
      "jdbc:h2:~/test", "sa", "sa"); 
     for (String sql : args) { 
      Connection conn = cp.getConnection(); 
      conn.createStatement().execute(sql); 
      conn.close(); 
     } 
     cp.dispose(); 

回答

1

无论是连接池的做法是很好。有许多连接池实现(每一个都有优点和缺点),使用你想使用的任何东西。

如果你有一个要执行的语句的列表,那么我不会为每个语句打开一个新的连接。相反,执行与相同的连接(和声明)的所有语句:

JdbcConnectionPool cp = JdbcConnectionPool.create(
    "jdbc:h2:~/test", "sa", "sa"); 
... 
Connection conn = cp.getConnection(); 
Statement stat = conn.createStatement(); 
for (String sql : args) { 
    stat.execute(sql); 
} 
conn.close(); 
... 
cp.dispose(); 

连接池可以启动/停止:

  • 以外的Web应用程序,作为一种资源(这是多一点在我看来是复杂的),例如在文章"Database Connection Pooling with Tomcat"中描述的那样。你会发现类似的Jetty文件。

  • 使用ServletContextListener(也在H2文档中描述)。在我看来,这有点简单。缺点是连接池不能被多个Web应用程序使用。

+0

我试图用码头端实现了连接池,我坚持这个error.13:51:19.689:警告:oejx.XmlConfiguration:主:在<新的ID =“myds配置错误“class =”org.eclipse.jetty.webapp.WebAppContext“> java:comp/env/jdbc/MyH2DS | ??? jdbc:h2:/ data/test sa |? java.lang.IllegalStateException:没有合适的构造函数 – FiendFyre

+0

我想在Web应用程序启动时用连接池打开数据库,并在Web应用程序停止时关闭它。我检查了H2文档和Jetty,但找不到如何实现这个 – FiendFyre

+0

我已经添加了有关如何在Web应用程序中启动/停止连接池的信息。 –

相关问题