【问题标题】:Create Portable JDBC Connection Pool in Glassfish在 Glassfish 中创建可移植的 JDBC 连接池
【发布时间】:2017-06-11 03:11:13
【问题描述】:

我正在尝试使用带有预配置 Glassfish 的 Docker 将我的项目部署到 AWS Elastic Beanstalk。

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

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

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

【问题讨论】:

    标签: java jdbc glassfish connection-pooling


    【解决方案1】:

    是的。尽管不幸的是,这没有充分记录。

    您可以创建一个 应用程序范围 连接池,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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 2018-03-22
      • 1970-01-01
      • 2017-09-08
      相关资源
      最近更新 更多