main website home
  • About this blog

    This blog features updates, opinions, and technical notes from Caucho engineers about Caucho products, the enterprise Java industry, and PHP. Caucho Technology is the creator of the Resin Application Server and the Quercus PHP in Java engine. A leader in Java performance since 1998, Caucho is a Sun JavaEE licensee with over 9000 customers worldwide.
  • Tags

    ajaxworld bam candi cdi cloud cluster comet configuration deploy devoxx eclipse ejb embedded flash flex google app engine hessian hmtp ioc java ee 6 javaone javazone jms messaging newsletter nyjug osgi php pomegranate quercus resin resin 4.0 REST servlet sfjug silicon valley code camp spring testing training tssjs watchdog webbeans web profile websockets wordpress
  • Meta

    • Register
    • Log in
    • Entries RSS
    • Comments RSS
    • WordPress.org
« Simplifying Resin XML With Dynamic Configuration - Part 1
Resin Cloud deployment with Amazon WS EC2 and Euca Tools »

Resin Cloud Deployment with Amazon WS (EC2)

This tutorial is going to cover the basics of using Resin with Amazon Web Services for cloud deployment. If you are new to cloud computing and IaaS, follow along and you will soon be deploying Java web applications in the cloud. You wil create an EC2 instance. You will download and install Resin on Ubuntu on a local machine. You will install Resin on an Amazon Linux AMI instance (EC2 instance). You will use Roo to create a simple application and deploy it.

We use Roo because Spring is fairly widely used, and Roo is a quick way to generate a sample app. Future tutorials will use other common Java tools as well as show you how to configure and manage a complete Resin cluster. Think of this as the first tutorial in a series of tutorials.

For this tutorial you will need Resin 4.0.24 or later. Check back periodically because as we are going to expand the tutorial and improve Resin’s support of cloud deployments. The Resin engineering team plans on improving cloud support continuously.

Many of the steps in this tutorial would be similar even if you were using Eucalyptus, CloudStack with CloudBridge, RightScale myCloud, OpenNebula, or OpenStack, this guide should help you along as they all support the Amazon EC2 REST APIs. Also any cloud computing environment (private or public, on premises or hosted) will have similar characteristics. Thus even if you are using a private cloud using OpenStack like Project Olympus, the principles will be the same. In fact even using remote servers deployed in a datacenter or virtualized servers with Xen Server, Xen Cloud orVMWare vSphere the steps will be very similar.

For this tutorial we expect you are familiar with starting, and stoping Amazon WS instances. If you are not, go through this tutorial from Amazon WS. You will need an Amazon WS account. Amazon WS allows you to have free tier so you can learn Amazon WS (EC2, S3, Elastic Load Balancer, Block Storage, SimpleDB, Simple Queue Service, Simple Notification Service).

The second tutorial in this series will use Euca2ools to start and stop VM instances from the command line.

Fire up an Amazon Instance

Fire up an Amazon Instance using Amazon Linux (basically CentOS 5.4). Then install Resin as follows using RPM:

$ sudo rpm --import http://caucho.com/download/rpm/RPM-GPG-KEY-caucho $ sudo yum install http://caucho.com/download/rpm/4.0.24/x86_64/resin-pro-4.0.24-1.x86_64.rpm

Install Resin on a Local Box

Install Resin locally so you test locally and deploy. Feel free to install it on any supported OS. For this tutorial I am going to use Ubuntu locally.

Add Caucho’s Debian repository to your system’s repositories to use automated update tools like Synaptic and apt-get. To do this, add the following line to your /etc/apt/sources.list

deb http://caucho.com/download/debian unstable multiverse

Then install Resin as follows:

apt-get update apt-get install resin-pro

It is a good idea to make sure the version you install on Amazon AMI matches the version you install locally.

You can see that Resin is installed as follows:

$ ls /etc/resin app-default.xml local.d resin.properties resin.xml $ ls /var/www/ doc licenses log resin-data watchdog-data webapps $ ls /etc/init.d/resin /etc/init.d/resin $ ls -l /usr/local/share/resin lrwxrwxrwx 1 root root 16 2011-11-18 09:03 /usr/local/share/resin -> resin-pro-4.0.24

Also at this point, Resin should be running as well, and you can verify this with resinctl status:

$ resinctl status Resin/4.0.24 status for watchdog at 127.0.0.1:6600 watchdog: watchdog-pid: 7383 server 'app-0' : ACTIVE password: missing watchdog-user: root user: www-data(www-data) root: /var/www conf: /etc/resin/resin.xml pid: 7590 uptime: 0 days 00h19

Install Maven 3

Install maven. Maven is not in the public Ubuntu repository.

$ sudo add-apt-repository "deb http://build.discursive.com/apt/ lucid main" $ sudo apt-get update $ sudo apt-get install maven

Create a symbolic link:

$ sudo ln -s /usr/local/maven/bin/mvn /usr/local/bin/mvn

Install Spring Roo

Download and install Spring Roo using directions at the Spring Roo site.

This is how I install roo:

$ unzip spring-roo-1.2.0.RC1.zip $ sudo mv spring-roo-1.2.0.RC1 /usr/local/share/ $ sudo ln -s /usr/local/share/spring-roo-1.2.0.RC1/ /usr/local/share/spring-roo $ sudo ln -s /usr/local/share/spring-roo/bin/roo.sh /usr/bin/roo

At the roo prompt, type hint.

$ roo ____ ____ ____ / __ \/ __ \/ __ \ / /_/ / / / / / / / / _, _/ /_/ / /_/ / /_/ |_|\____/\____/ 1.2.0.RC1 [rev dcaa483] Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER. ... roo> hint ..

Hint should always let you know what you might want to do next. Please feel free to read the Roo docs for details or just follow along and read the Roo docs later.

Create the project, this generates maven project files and Spring starter project.

roo> project --topLevelPackage com.example.blog Created ROOT/pom.xml Created SRC_MAIN_RESOURCES Created SRC_MAIN_RESOURCES/log4j.properties Created SPRING_CONFIG_ROOT Created SPRING_CONFIG_ROOT/applicationContext.xml

Next setup the database and JPA, keep it simple to minimize the amount of things we need to configure later.

roo> jpa setup --database H2_IN_MEMORY --provider HIBERNATE Created SPRING_CONFIG_ROOT/database.properties Updated SPRING_CONFIG_ROOT/applicationContext.xml Created SRC_MAIN_RESOURCES/META-INF/persistence.xml Updated ROOT/pom.xml [added dependencies com.h2database:h2:1.3.161, org.hibernate:hibernate-core:3.6.8.Final, ...]

Create a entity class called blog.

roo> entity jpa --class ~.domain.Blog Created SRC_MAIN_JAVA/com/example/blog/domain Created SRC_MAIN_JAVA/com/example/blog/domain/Blog.java Created SRC_MAIN_JAVA/com/example/blog/domain/Blog_Roo_Configurable.aj Created SRC_MAIN_JAVA/com/example/blog/domain/Blog_Roo_Jpa_ActiveRecord.aj Created SRC_MAIN_JAVA/com/example/blog/domain/Blog_Roo_ToString.aj Created SRC_MAIN_JAVA/com/example/blog/domain/Blog_Roo_Jpa_Entity.aj

Add two fields to the Blog class.

~.domain.Blog roo> field string --fieldName title Updated SRC_MAIN_JAVA/com/example/blog/domain/Blog.java Created SRC_MAIN_JAVA/com/example/blog/domain/Blog_Roo_JavaBean.aj ~.domain.Blog roo> field string --fieldName message Updated SRC_MAIN_JAVA/com/example/blog/domain/Blog.java Updated SRC_MAIN_JAVA/com/example/blog/domain/Blog_Roo_JavaBean.aj

Create the web tier

~.domain.Blog roo> web mvc setup Created ROOT/src/main/webapp/WEB-INF/spring Created ROOT/src/main/webapp/WEB-INF/spring/webmvc-config.xml Created ROOT/src/main/webapp/WEB-INF/web.xml ... Updated ROOT/src/main/webapp/WEB-INF/web.xml Updated ROOT/pom.xml [added dependencies org.springframework:spring-webmvc:${spring.version}, ...] Updated SRC_MAIN_WEBAPP/WEB-INF/views/footer.jspx

Generate the web tier.

~.domain.Blog roo> web mvc all --package ~.web Created SRC_MAIN_JAVA/com/example/blog/web Created SRC_MAIN_JAVA/com/example/blog/web/BlogController.java ... Created SRC_MAIN_WEBAPP/WEB-INF/views/blogs Created SRC_MAIN_WEBAPP/WEB-INF/views/blogs/views.xml Updated SRC_MAIN_WEBAPP/WEB-INF/views/blogs/views.xml ... Updated SRC_MAIN_WEBAPP/WEB-INF/views/blogs/views.xml ... Created SRC_MAIN_WEBAPP/WEB-INF/views/blogs/update.jspx

Package our web app

roo> perform package

Exit roo.

roo> exit

Deploy locally and test

Deploy the example Roo app with Resin.

$ resinctl deploy target/blog-0.1.0.BUILD-SNAPSHOT.war -name blog Deployed production/webapp/default/blog from target/blog-0.1.0.BUILD-SNAPSHOT.war to hmux://127.0.0.1:6800

You can see if the app was actually deployed:

$ resinctl deploy-list production/webapp/default/blog

Now you should be able to load the Roo blog example.

http://localhost:8080/blog/

Create an Elastic IP and assign it to your Amazon WS Linux instance

Create an Elastic IP and assign it to the Amazon WS Linux instance using the Amazon web console.

I got this IP address. 50.19.222.26

Create password

$ resinctl generate-password -user admin -password roofoo admin_user : admin admin_password : {SSHA}BGBKQdCr0a5orH99eqIFwR/fffffffff

Create a properties file and put it into user-data of Amazon AMI

See Resin properties for more detail or read Paul Cowan’s post about properties and dynamic config.

log_level : info dev_mode : true resin_doc : true app_tier : 127.0.0.1 web_tier : cache_tier : setuid_user : resin setuid_group : resin http : 8080 https : 8443 admin_user : admin admin_enable : true admin_password : {SSHA}BGBKQdCr0a5orH99eqIFwR/ffffffff admin_external : true admin_remote_enable : true session_store : true

Create an amazon.xml as follows:

<resin xmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <resin:properties path="http://169.254.169.254/latest/user-data" optional="true"/> </resin>

Log into Amazon AMI instance and add the above contents to /etc/resin/local.d/amazon.xml.

$ ssh -i resin2.pem ec2-user@50.19.222.26 $ sudo nano /etc/resin/local.d/amazon.xml

From your local machine execute this command:

$ resinctl deploy target/blog-0.1.0.BUILD-SNAPSHOT.war -name blog -address 50.19.222.26 -port 8080 -user admin -password roofoo

Now it works in the cloud:

http://50.19.222.26:8080/blog/

This entry was posted on Wednesday, November 30th, 2011 at 1:21 am and is filed under Uncategorized. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

One Response to “Resin Cloud Deployment with Amazon WS (EC2)”

  1. Caucho Technology » Blog Archive » Resin Cloud deployment with Amazon WS EC2 and Euca Tools Says:
    November 30th, 2011 at 11:21 am

    [...] « Resin Cloud Deployment with Amazon WS (EC2) [...]

Leave a Reply

You must be logged in to post a comment.


Caucho Technology is proudly powered by WordPress and Quercus®
Entries (RSS) and Comments (RSS).

  • HOME |
  • CONTACT US |
  • DOCUMENTATION |
  • BLOG |
  • WIKI 4 |
  • WIKI 3 |
  • Resin: Java Application Server
Copyright (c) 1998-2012 Caucho Technology, Inc. All rights reserved.
caucho® , resin® and quercus® are registered trademarks of Caucho Technology, Inc.
resin® is a cloud optimized, java® application server that supports the java ee webprofile ®