ActiveBlog

Stackato 2.0 and Apache TomEE
by Jérémy Aubert

Jérémy Aubert, August 1, 2012

TomEE on Stackato One of the new features of Stackato 2.0 is the support of JEE applications.

Java Enterprise Edition is the enterprise side of Java. This platform provides an API and runtime environment for developing and running enterprise software.

There are a number of servers supporting JEE applications (like GlassFish and Geronimo) but in our case, we decided the use the new Apache baby: TomEE. It is light, fast, and reliable!

So what is TomEE?

Apache TomEE is the Java Enterprise Edition of Apache Tomcat. It's a Java EE 6 Web Profile server, and it supports all the JEE features (J2EE, JEE5, JEE6).

Deploying a JEE application to Stackato

You can deploy your application just like you did with previous versions of Stackato. You build your WAR file and push it to Stackato. The Stackato Java EE framework will be detected if there is a persistence.xml file located in src/main/resources/META-INF/.

There is however, something you need to know about packaging your application.

Packaging

Your JEE application (EJBs and Servlets) has to be contained in one WAR file as one application. This is different from the J2EE and JEE5 packaging, as there is no EAR file anymore. There is no separation between servlets and EJBs. They can share all third-party libraries. They can see each other.

This packaging approch is truly JEE6 certified.

Push to Stackato

Again, the basic idea is the same as previous versions of Stackato. Build you application, then push it to Stackato. It's still that easy!

The Numberguess example in the Stackato-Apps samples on Github show how this is done.

To run this application:

  git clone https://github.com/Stackato-Apps/Numberguess
  cd Numberguess
  mvn clean package (or ant clean package)
  stackato push -n

We have also added a cool feature in Stackato 2.0 for Java EE applications which makes it much easier to use database services!

How to use database services

First create your database service in Stackato with a specific name. For our example, let's say this is a mysql service which is called 'mysql-service'.

For each service you create, Stackato creates a resource in the TomEE configuration:

<Resource id="mysql-service" type="DataSource">
  JdbcDriver com.mysql.jdbc.Driver
  JdbcUrl jdbc:mysql://url:port/database
  UserName user
  Password password
  JtaManaged true
</Resource>

Next, create your persistence.xml file in src/main/resources/META-INF/ and refer to this resource:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
        <persistence-unit name="my-unit" >
          <jta-datasource>mysql-service</jta-datasource>
        </persistence-unit>
</persistence>

NOTE: If there is only one service, there is no need to write the 'jta-datasource' tag. As there is only one service, JEE knows it's this one you want to use.

Finally, in you java code, you create your EntityManager and refer to the persistence-unit you want to use:

  @PersistenceContext(unitName="my-unit")
  private EntityManager em;

NOTE: If there is only one persistence-unit, there is no need to write the 'unitName'.

We added a simple example with a MySQL service, and the well-known JEE6 pet-catalog in the Stackato-Apps samples on Github.

Subscribe to ActiveState Blogs by Email

Share this post:

Category: stackato
About the Author: RSS

Jérémy has just finished his masters degree at Rennes University and joins ActiveState as an intern working on Stackato.

Comments

1 comments for Stackato 2.0 and Apache TomEE