在 Glassfish 中创建可移植 JDBC 连接池
Create Portable JDBC Connection Pool in Glassfish
我正在尝试将我的项目部署到 AWS Elastic Beanstalk,使用 Docker 和预配置的 Glassfish。
由于项目使用JPA,和EJB来创建事务持久化单元;我在 Glassfish 管理控制台中创建了一个数据库连接池,然后将 JNDI 字符串提供给 persistence.xml
.
在我的本地机器上一切正常,Amazon 不允许您使用管理控制台。我读过 this post,它一般性地讨论了如何使用 asadmin
配置 Glassfish,但我发现它很难理解,而且听起来很有侵略性。
是否有一种万能的解决方案来创建在我部署应用程序的任何服务器上自动分配的数据库连接池?
是的。虽然这是不幸的under-documented。
您可以创建一个 应用程序范围内的 连接池,当您将 war 文件部署到它时,Glassfish 会即时创建该连接池。它会在未部署时销毁它。不过,它仅适用于服务器上的 this 应用程序。
这是您应该做的。像这样创建一个名为 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>
我正在尝试将我的项目部署到 AWS Elastic Beanstalk,使用 Docker 和预配置的 Glassfish。
由于项目使用JPA,和EJB来创建事务持久化单元;我在 Glassfish 管理控制台中创建了一个数据库连接池,然后将 JNDI 字符串提供给 persistence.xml
.
在我的本地机器上一切正常,Amazon 不允许您使用管理控制台。我读过 this post,它一般性地讨论了如何使用 asadmin
配置 Glassfish,但我发现它很难理解,而且听起来很有侵略性。
是否有一种万能的解决方案来创建在我部署应用程序的任何服务器上自动分配的数据库连接池?
是的。虽然这是不幸的under-documented。
您可以创建一个 应用程序范围内的 连接池,当您将 war 文件部署到它时,Glassfish 会即时创建该连接池。它会在未部署时销毁它。不过,它仅适用于服务器上的 this 应用程序。
这是您应该做的。像这样创建一个名为 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>