0
votes

I'm trying to deploy my project to AWS Elastic Beanstalk, using Docker with preconfigured Glassfish.

Since the project uses JPA, and EJB to create a transactional persistence unit; I create a database connection pool in the Glassfish admin console, then supply the JNDI string to persistence.xml.

All good in my local machine, Amazon won't allow you to use the admin console. I've read this post, which discusses generally how to configure Glassfish with asadmin, but I've found it very hard to follow and sounds very invasive.

Is there a one-size-fits-all solution to create a database connection pool that is automatically allocated on any server I deploy my application to?

1

1 Answers

3
votes

Yes. Although this is unfortunately under-documented.

You can create an application scoped connection pool, that Glassfish creates on the fly, when you depoly your war file to it. It will destroy it when undeployed. Though, it is only available to this application on the server.

Here's what you should do. Create a file named glassfish-resources.xml like this (for 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>

And drop it into your WEB-INF directory. You should also place the database connection dependency jar in the lib directory.

Now since this isn't a global JNDI reference, as it is only available to this application, you should access it in persistence.xml with java:app prefix, like this:

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