Thursday, August 11, 2011

Java EE6 / CDI running in OpenShift


Java EE6 runing in JBoss AS7 brings a lot of new interesting technology to the table.  It brings the capabilities of EJB into a dependency injection model with a ton of simplifications.  Think Ruby on Rails simplicity coupled with the power of Java EE...  Add to that OpenShift's ability to build and deploy code server side and you can start writing an EE6 CDI application with the ease of writing a PHP or Rails application.  The syntax is even simplied to the point where I am actually able to get a decent amount of work done in vim.  Don't believe me?  Well, walk through an example with me and I'll let you decide for yourself.


Also, if you'd rather watch a screencast on the this, check out Pete Muir's excellent screencast on the topic:
http://www.vimeo.com/27605997

Step 1. Register on OpenShift

A free account on OpenShift will provide you with a free runtime environment for this demo.  Yep, a free EE6 runtime environment that is pubicly accessible.  Cool, huh?  First, signup for a new account.  You'll need to validate your email address after registering - just click the link in the email you get.  After that, you should get an email once you have been granted access.  Should be quick - we are sending people through as fast as we can.


For some help setting up the client tools, you can check out the following screencasts that walk you through the process for various operating systems:
http://vimeo.com/27478061
http://vimeo.com/27444290
http://vimeo.com/27493566

Step 2. Create your domain

A domain will be used in your url.  I wanted http://<app>-oncloud.rhcloud.com so I ran:

rhc-create-domain -n oncloud -l <my-email>

Step 3. Create a JBoss application template

I want my URL to be http://seamrocks-oncloud.rhcloud.com so I ran:

rhc-create-app -a seamrocks -t jbossas-7.0


At this point, you will have our 'Hello World' application running.  It's a very simple, Maven-based application.  You will see a pom.xml that specifies how to build and deploy the application as well as a 'src' directory that contains the application structure.
Step 4. Switch your application to the Seam Booking Quickstart

We maintain a lot of OpenShift quickstart applications out on GitHub.  This gives people an easy way to get fairly sophisticated applications running in minutes.  Here is how to get the Seam Booking example running (also documented in the GitHub readme):

cd seamrocks
git remote add upstream -m master git://github.com/openshift/seambooking-example.git
git pull -s recursive -X theirs upstream master
git push

Step 5. Wait for it...

Now is where the really cool part happens.  You just pushed up a bunch of Java source file with a POM file.  OpenShift will detect this and automatically kick off your Maven build.  Be warned, downloading all the dependencies and doing the build will take about 20 minutes the first time you build.  After the dependencies are downloaded, subsequent builds just take seconds.  Kick back, grab a cup of coffee and wonder what you are going to do with that old build system...

When the build is done, your application will be automatically deployed and running.  In my case, that application is running at:


Step 6. Fire up your text editor

That's right - let's actually do some Java editing with just a text editor!  To keep this simple, we will just change something that requires a new build to be visible.  You could just as easily change a JSF template, or one of the Java files - it all works the same.  In this case, we are going to change the message bundle to put our mark on the demo app.

Open up your favorite editor and load the file src/main/resources/messages.properties

Next, change the following text in the file:

  from:
    home_header=About this example application
  to:
    home_header=MY APP!!

Now save the file and close it.  Lastly, let's commit and push the change:

git commit -a -m "Making my mark"
git push

Gotchas

One gotcha is that is that while JBoss is deploying, an error response (or 404) can sometimes be cached at our proxy and you'll see an erroneous error when you hit your app in the browser.  We're working on correcting this but in the meantime, if you hit it just run:

rhc-ctl-app -a <app> -c restart

Also, if something strange is happening, you can always tail the server logs with:

rhc-tail-files -a <app>

What now?  Read more about OpenShift at http://red.ht/nP7D2t

No comments:

Post a Comment