在Glassfish中创建可移植JDBC连接池

时间:2017-01-25 19:29:34

标签: java jdbc glassfish connection-pooling

我尝试将我的项目部署到AWS Elastic Beanstalk,使用Docker和预先配置的Glassfish。

由于项目使用JPA和EJB来创建事务持久性单元;我在Glassfish管理控制台中创建一个数据库连接池,然后将JNDI字符串提供给persistence.xml

在我的本地机器上都很好,亚马逊不允许你使用管理控制台。我已经阅读了this帖子,其中一般性地讨论了如何使用asadmin配置Glassfish,但我发现它非常难以理解,听起来非常具有侵略性。

是否有一个万能的解决方案来创建一个数据库连接池,该池在我部署应用程序的任何服务器上自动分配?

1 个答案:

答案 0 :(得分:2)

是。虽然遗憾的是记录不足。

您可以创建一个应用程序范围的连接池,当您将war文件解密到它时,Glassfish即时创建。在取消部署时会破坏它。但是,它仅适用于服务器上的应用程序。

这是你应该做的。像这样创建一个名为glassfish-resources.xml的文件(对于MySql):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
    <jdbc-connection-pool datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" name="MySQLPool" res-type="javax.sql.DataSource">
      <property name="user" value="someUser"></property>
      <property name="password" value="aPassword"></property>
      <property name="databaseName" value="aDatabase"></property>
      <property name="serverName" value="some.string.you got.from.amazon.rds.amazonaws.com"></property>
      <property name="portNumber" value="3306"></property>
    </jdbc-connection-pool>
    <jdbc-resource pool-name="MySQLPool" jndi-name="jdbc/MySQLPool"></jdbc-resource>
</resources>

将其放入WEB-INF目录。您还应该将数据库连接依赖关系jar放在lib目录中。

既然这不是全局JNDI引用,因为它只适用于此应用程序,您应该使用persistence.xml前缀java:app访问它,如下所示:

<jta-data-source>java:app/jdbc/MySQLPool</jta-data-source>