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 :

 

  1. 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 :

 

  1. new-project --named app1 (...) --version JAVAEE_7 --container GLASSFISH  
  2. new-project --named app1 (...) --version JAVAEE_6 --container GLASSFISH  
  3. new-project --named app1 (...) --version JAVAEE_WEBPROFILE_6 --container GLASSFISH  
  4. 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)

 

  1. 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) :

 

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

 

On this comment, 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 :

 

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

 

to

 

  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" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">  
  3.   <persistence-unit name="javaone2013PU" transaction-type="JTA">  
  4.     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>  
  5.     (...)  
  6.   </persistence-unit>  
  7. </persistence>  

 

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

 

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



--
Antonio Goncalves 
Software architect and Java Champion

Web site | Twitter | LinkedIn | Paris JUG | Devoxx France