[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 :



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



   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 <http://www.antoniogoncalves.org/> |
Twitter<http://twitter.com/agoncal>
 | LinkedIn <http://www.linkedin.com/in/agoncal> | Paris
JUG<http://www.parisjug.org/>
 | 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