【发布时间】:2016-04-18 07:51:13
【问题描述】:
我是 JSF/Facelets 的新手,我正在创建一个对(无 SQL)数据库执行常规 CRUD 操作的应用程序。数据库有一个 API 允许创建一个连接池,然后我的操作可以从这个对象获取和释放连接。我想这个池必须在部署时为整个应用程序创建一次,共享(作为静态?)并在应用程序被销毁后关闭。我的方法正确吗?这样做的最佳做法是什么?我不知道应该将代码放在哪里以及应该如何调用它。
使用我的旧 SQL 数据库,我曾经在 context.xml 资源中配置“testOnBorrow”和“validationQuery”,因此我不必以编程方式创建显式池。
我找到了两个很棒的教程(here 和 here),但我无法从中找出创建池的代码应该放在哪里。
注意:我知道这可能只是一个 Servlet 问题,但我将其标记为 JSF,因为我不知道在 JSF 中是否有办法做到这一点(比如一个应用程序范围的 bean)。 谢谢。
编辑
鉴于我找不到带有DataSource 的 JAR 用于通过 context.xml 加载数据库的事实,也许我的问题应该更具体:部署 JSF 应用程序时,我可以在哪里运行一次代码当 JSF 应用程序被销毁时,我可以在哪里运行代码?
【问题讨论】:
-
只要你的连接池是线程安全的,我会选择
@Singletonbean。 -
您使用的是标准 Java EE 堆栈还是基于自定义 Tomcat 的堆栈?答案取决于此。 DAO 文章假定自定义基于 Tomcat 的堆栈。但是您标记了问题 [java-ee],这增加了一些歧义。无论如何,假设Tomcat,这有帮助吗? stackoverflow.com/q/2299469
-
我认为它有帮助,谢谢。我正在使用 TomEE。所以我需要做的就是创建一个创建 ConnectionPool 对象的类,用 @Resource("jdbc/some_name") 标记它,然后从 context.xml 中创建链接“
-
driverClassName代表JDBC驱动的驱动类名。这正是您在纯 Java 应用程序中的Class#forName()调用中使用的值。例如。com.mysql.jdbc.Driver如果您已经安装了 MySQL JDBC 驱动程序。回到服务器,假设您使用的是 TomEE,请考虑转向 JPA/EJB。它可以将所有 JDBC 样板简化为单行。 -
感谢您的建议。我认为我的(NoSQL)数据库没有 JPA 实现。它也有很多 JAR,所以不确定我能找到 jdbc 驱动程序(我认为 JDBC 是面向关系数据库的)。现在我对如何创建池完全感到困惑,但我正在阅读 Tomcat jndi 文档,看看是否能找到一些亮点。我的第一个疑问是如何在 context.xml 中配置资源。我知道如何为 MySQL 做,但不适合这个数据库
标签: jsf servlets jakarta-ee