我尝试将我的项目部署到AWS Elastic Beanstalk,使用Docker和预先配置的Glassfish。
由于项目使用JPA和EJB来创建事务持久性单元;我在Glassfish管理控制台中创建一个数据库连接池,然后将JNDI字符串提供给persistence.xml
。
在我的本地机器上都很好,亚马逊不允许你使用管理控制台。我已经阅读了this帖子,其中一般性地讨论了如何使用asadmin
配置Glassfish,但我发现它非常难以理解,听起来非常具有侵略性。
是否有一个万能的解决方案来创建一个数据库连接池,该池在我部署应用程序的任何服务器上自动分配?
答案 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>