[forge-dev] How to choose which Java EE version ?

Antonio Goncalves antonio.mailing at gmail.com
Sun Aug 25 10:06:49 EDT 2013

Hi all,

I've realized that I wrote on the forum (
https://community.jboss.org/thread/231843), but maybe the development ML
would have been more appropriate. Here are some thoughts and questions
about "how to ask Forge to generate a Java EE 6 or Java EE 7 application" :


Java EE 7 is out... and one day will come Java EE 8, 9 and so on. So we
should be able to ask JBoss Forge to either generate a Java EE 6 or 7
application... and if we want to be more precise, you could even go into
choosing from Java EE 6, Web Profile 6, Java EE 7 and a Web Profile 7
application. But how to choose a version with JBoss Forge ?

Today, with JBoss Forge 1.x, you create a project with a CLI without giving
any version indication :

   1. new-project --named app1 --topLevelPackage org.app1 --type war

Then, when you setup your project, you give Forge some hints :

   persistence setup --provider ECLIPSELINK --container GLASSFISH_3
--named testPU ;
   2. validation setup --provider HIBERNATE_VALIDATOR ;

If the idea is to use Forge to create Java EE applications running in a
container (and not just in standalone Java SE), the CLI to create a project
misses some information, and the setup is redundant. I would think of
something like :

   new-project --named app1 (...) --version JAVAEE_7 --container GLASSFISH
   new-project --named app1 (...) --version JAVAEE_6 --container GLASSFISH
   new-project --named app1 (...) --version JAVAEE_WEBPROFILE_6
--container GLASSFISH
   new-project --named app1 (...) --version JAVAEE_WEBPROFILE_7
--container GLASSFISH

Note that I didn't put the version of GlassFish because the version of Java
EE implies the version of GlassFish (eg. Java EE 6 == GlassFish 3, Java EE
7 == GlassFish 4). But note that you could also specify the container if
needed (e.g. generate a Java EE 6 app running on GlassFish 4)

   new-project --named app1 (...) --version JAVAEE_6 --container GLASSFISH_4

And, of course, the following would be illegal (GF 3 cannot run a Java EE 7
app) :

   new-project --named app1 (...) --version JAVAEE_7 --container GLASSFISH_3

On this comment<https://issues.jboss.org/browse/FORGE-1067?focusedCommentId=12794855&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-12794855>,
Lincoln says that the application should only depend on Java EE APIs. So I
think the pom.xml should only contain one of the following dependency
(depending on the version of Java EE 7) :

   1. <dependency>
   2.   <groupId>javax</groupId>
   3.   <artifactId>javaee-api</artifactId>
   4.   <version>7.0</version>
   5. </dependency>
   6. <dependency>
   7.   <groupId>javax</groupId>
   8.   <artifactId>javaee-api</artifactId>
   9.   <version>6.0</version>
   10. </dependency>
   11. <dependency>
   12.   <groupId>javax</groupId>
   13.   <artifactId>javaee-web-api</artifactId>
   14.   <version>7.0</version>
   15. </dependency>
   16. <dependency>
   17.   <groupId>javax</groupId>
   18.   <artifactId>javaee-web-api</artifactId>
   19.   <version>6.0</version>
   20. </dependency>

You do not need any extra dependency if you want an application to depend
only on Java EE. So that means the following commands can also be changed
from :

   persistence setup --provider ECLIPSELINK --container GLASSFISH_3
--named testPU ;
   2. validation setup --provider HIBERNATE_VALIDATOR ;


   1. persistence setup --named testPU ;
   2. validation setup ;

No need to specify the provider. That's because you will use the JPA/Bean
Validation/... default implementation of the container (GlassFish uses
EclipseLink, JBoss uses Hibernate...). And to ease the configuration and
portability, this means that you don't need the <provider> element in the
persistence.xml :

   1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
   2. <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi=
   "http://www.w3.org/2001/XMLSchema-instance" version="2.0"
   3.   <persistence-unit name="javaone2013PU" transaction-type="JTA">
   4.     <provider>org.eclipse.persistence.jpa.PersistenceProvider</
   5.     (...)
   6.   </persistence-unit>
   7. </persistence>

Nor do you use the <default-provider> element in the validation.xml (and so

I think the Java EE version should be specified when the project is
created, and then all the setups would use the default container

Antonio Goncalves
Software architect and Java Champion

Web site <http://www.antoniogoncalves.org/> |
 | LinkedIn <http://www.linkedin.com/in/agoncal> | Paris
 | Devoxx France <http://www.devoxx.fr/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/forge-dev/attachments/20130825/f3cfef1d/attachment-0001.html 

More information about the forge-dev mailing list