Home » cloud » Configuring JNDI DataSource with OpenShift Tomcat Cartridge

Configuring JNDI DataSource with OpenShift Tomcat Cartridge

Sign up for OpenShift Account

Blog Stats

  • 238,298 hits

My Tweets


This short blog post will tell you how to configure JNDI datasource with OpenShift Tomcat cartridge. After configuring, we will also make it work with a sample Spring MVC application. Let’s get started.

Step 1 : Create Tomcat Application

After you have signed up for OpenShift and setup your account. Execute the rhc app create command as shown below to create tomcat application as shown below.

rhc app create -a tomcatjndidemo -t jbossews-1.0

Step 2 : Adding PostgreSQL Cartridge

Next we will add postgresql cartridge to our application by executing the command as shown below.

rhc cartridge add -a tomcatjndidemo -c postgresql-8.4

Step 3 : Defining Datasource in Tomcat Configuration Files

OpenShift gives you the flexibility to edit the tomcat configuration files. These files are location in .openshift/config folders inside tomcatjndidemo folder. If you look into this directory you will find that there are 5 files. For adding datasource we have to make changes in two files — context.xml and server.xml

In server.xml you have to define a resource under GlobalNamingResource as shown below.

<Resource name="jdbc/postgresqldb" auth="Container" type="javax.sql.DataSource"
	username="${env.OPENSHIFT_POSTGRESQL_DB_USERNAME}"        password="${env.OPENSHIFT_POSTGRESQL_DB_PASSWORD}"
	url="jdbc:postgresql://${env.OPENSHIFT_POSTGRESQL_DB_HOST}:${env.OPENSHIFT_POSTGRESQL_DB_PORT}/${env.OPENSHIFT_APP_NAME}"
	driverClassName="org.postgresql.Driver" initialSize="5" maxWait="5000"
	maxActive="120" maxIdle="5" validationQuery="select 1"
	poolPreparedStatements="true">
</Resource>

Next change that you have to make is in context.xml. You have to define resource link to the datasource as shown below.

 <ResourceLink name="jdbc/postgresqldb" global="jdbc/postgresqldb" type="javax.sql.DataSource"/>

Step 4 : Updating Tomcat Classpath with PostgreSQL JDBC Driver

Tomcat will require PostgreSQL JDBC driver jar to make connection with PostrgreSQL. You can’t copy the jars to tomcat lib directory as it is not writable. To do that, first ssh into the application instance and then download the jar in $OPENSHIFT_DATA_DIR as shown below.

cd $OPENSHIFT_DATA_DIR
wget http://repo1.maven.org/maven2/postgresql/postgresql/8.4-702.jdbc4/postgresql-8.4-702.jdbc4.jar

Next update the catalina.properties in your application .openshift/config folder to scan the OPENSHIFT_DATA_DIR as shown below. Please replace the openshift path with value of you OPENSHIFT_DATA_DIR environment variable.

common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,/var/lib/openshift/2e110c16da18478aa607f742d34b70fb/app-root/data/*.jar

Step 5 : Pushing Changes to OpenShift

Now you can push the changes to OpenShift as shown below.

git commit -am "made changes for tomcat jndi datasource"
git push

Step 6 : Testing the DataSource

The last step in this blog is to test the datasource configuration we added in step 3 and step 4. To do that pull the code from my github repository. The code is a simple Spring MVC application which do CRUD operations on Member entity. Please note that the code also contains the tomcat configuration changes. So, please update the catalina.properties with your $OPENSHIFT_DATA_DIR value.

git remote add jndi git://github.com/shekhargulati/tomcatjndidemo.git
git pull -s recursive -X theirs jndi master

Next do git push which will build the war file and deploy the application to tomcat. The application should be accessible at http://tomcatjndidemo-cix.rhcloud.com/

About these ads

9 Comments

  1. scott says:

    Hi, I modified the server.xml and when I start tomcat I get the error:

    WARNING: Unexpected exception resolving reference
    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Illegal connection port value ‘${env.OPENSHIFT_MYSQL_DB_PORT}’)

    • whyjava says:

      To me it looks like you have not added mysql cartridge to the application. You need to add mysql cartridge to the application using rhc cartridge add -a appname -c mysql-5.1

  2. Nice article man! Thanks for sharing!

  3. Excellent items from you, man. I’ve be aware your stuff previous to and you are just extremely great. I really like what you have acquired right here, certainly like what you are saying and the best way in which you say it. You are making it entertaining and you still take care of to stay it smart. I can’t wait to learn much
    more from you. This is actually a terrific site.

  4. Edwina says:

    Wow that was strange. I just wrote an extremely long comment
    but after I clicked submit my comment didn’t appear. Grrrr… well I’m not writing
    all that over again. Anyhow, just wanted to say wonderful blog!

  5. Hello! I know this is somewhat off topic but I was wondering which blog platform are you using for this site?

    I’m getting fed up of WordPress because I’ve had problems with hackers
    and I’m looking at options for another platform. I would be fantastic if you could point me in the direction of a good platform.

  6. Your means of explaining the whole thing in this article is
    genuinely pleasant, every one be able to simply be aware of it, Thanks a
    lot.

  7. Lakesha says:

    I tend not to comment, but after reading a ton of
    comments on Configuring JNDI DataSource with OpenShift Tomcat Cartridge « Shekhar Gulati : OpenShift Evangelist, Software Developer, Writer, and Speaker.
    I actually do have some questions for you if it’s allright. Could it be simply me or do some of the responses appear like they are coming from brain dead people? :-P And, if you are writing at additional sites, I’d
    like to follow everything new you have to post. Could you list
    of all of your social networking sites like your
    Facebook page, twitter feed, or linkedin profile?

  8. Wow, this post is good, my sister is analyzing these kinds
    of things, so I am going to inform her.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 265 other followers

%d bloggers like this: