Running Maven Applications on OpenShift PaaS
Join the DZone community and get the full member experience.
Join For FreeAs you know I'm in the middle of completely overhauling and open-sourcing my PhD thesis system (more here: Qualitas).
I didn't work at Gdańsk University of Technology any more and I had to
find some kind of a server where I could setup a live demo of the
system.
Two weeks ago I stumbled upon OpenShift. It's a division of Red Hat which offers you free cloud PaaS services for your applications. By default OpenShift comes with pre-defined platforms for Java EE, PHP, Python, Perl, Node.js, Ruby, and Do-It-Yourself (DIY) applications. DIY applications turned out to be extremely powerful. As a proof of concept I decided to deploy my Apache Camel route (with Apache CXF endpoint as a front-end).
There was one trick to make it all work, but thanks to the OpenShift community I got it working like a charm. See how I did it.
Using OpenShift is pretty straight forward. You create an account, then you create an application. Next you get OpenShift Git address where you upload your code. OpenShift automatically exposes all applications (even old school C) which listen on 8080 port. DIY application comes with a few action hooks. They all are stored in a hidden directory .openshift/action_hooks. The most important hooks are:
OK, so I started from writing simple start and stop action hooks respectively:
After I finish my 0.0.5-SNAPSHOT development I definitely will try to setup all Qualitas modules on OpenShift! Stay tuned!
cheers,
Łukasz
Two weeks ago I stumbled upon OpenShift. It's a division of Red Hat which offers you free cloud PaaS services for your applications. By default OpenShift comes with pre-defined platforms for Java EE, PHP, Python, Perl, Node.js, Ruby, and Do-It-Yourself (DIY) applications. DIY applications turned out to be extremely powerful. As a proof of concept I decided to deploy my Apache Camel route (with Apache CXF endpoint as a front-end).
There was one trick to make it all work, but thanks to the OpenShift community I got it working like a charm. See how I did it.
Running DIY applications on OpenShift
Using OpenShift is pretty straight forward. You create an account, then you create an application. Next you get OpenShift Git address where you upload your code. OpenShift automatically exposes all applications (even old school C) which listen on 8080 port. DIY application comes with a few action hooks. They all are stored in a hidden directory .openshift/action_hooks. The most important hooks are:
.openshift/action_hooks/start .openshift/action_hooks/stopNames speak for themselves. And in case you haven't figure it out yet, OpenShift, as a Red Hat division, uses Linux machines :)
Running Maven
OK, so I started from writing simple start and stop action hooks respectively:
nohup mvn -f qualitas-internal-monitor-camel/pom.xml camel:run &and
kill `ps aux | grep camel:run | awk '{print $2}'`When I pushed my application, I saw Maven message complaining about not being able to create .m2/repository directory. Now, to cut long story short Maven installed on your platform doesn't have write permissions to your home directory. Setting M2_REPO to a writable directory $OPENSHIF_DATA_DIR did not help either because Maven installed on your platform ignores it. The trick (thanks Ram!) was to create settings file and pass it to Maven. The final start action hook looked like this:
mkdir -p $OPENSHIFT_DATA_DIR/m2/repository echo -e "<settings><localrepository>$OPENSHIFT_DATA_DIR/m2/repository</localrepository>\n</settings>\n" > $OPENSHIFT_DATA_DIR/settings.xml cd $OPENSHIFT_REPO_DIR nohup mvn -s $OPENSHIFT_DATA_DIR/settings.xml -f qualitas-internal-monitor-camel/pom.xml camel:run &
Points to note
- $OPENSHIFT_DATA_DIR - is persisted between deployments and is a perfect place for Maven repository :)
- Check the directory you're in. After I fixed repository stuff, Maven couldn't find my pom.xml file. That is why in the above start hook I change directory to $OPENSHIFT_REPO_DIR.
- First my CXF endpoint was listening on localhost:8080, this endpoint
of course was not exposed. On my local Linux I changed CXF endpoint to
0.0.0.0:8080 and everything was working like a charm, but when I ran my
Camel route I got address already in use error. I had to explicitly use
the $OPENSHIFT_INTERNAL_IP variable to define the IP address.
Summary
After I finish my 0.0.5-SNAPSHOT development I definitely will try to setup all Qualitas modules on OpenShift! Stay tuned!
cheers,
Łukasz
Topics:
Published at DZone with permission of Łukasz Budnik, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments