Posts Tagged ‘jee’
This post is only a snapshot of what is available at the time of writing to use Glassfish from maven., seen from the perspective of a simple maven plugin developer (simple plugin or simple developer ?).
Before beginning asadmin-maven-plugin, I searched and tried several ways to use Glassfish from maven. Main use case is simply deployment and undeployment of applications.
There are two ways to do this “programmatically” :
To ease the use of asadmin-maven-plugin I have set up a public repository that you can add to your maven settings / poms / proxies for maven to be able to download the plugin automagically.
The repositories are :
- Releases Repository : http://asadmin-maven-plugin.googlecode.com/svn/trunk/repository/releases – contains nothing ATM
- Snapshots Repository : http://asadmin-maven-plugin.googlecode.com/svn/trunk/repository/snapshots – contains the 0.1-SNAPSHOT
Here is the xml snippet you could add to your pom.xml file :
<pluginRepositories> <pluginRepository> <id>asadmin-maven-plugin-releases-repository</id> <name>asadmin-maven-plugin-releases-repository</name> <url>http://asadmin-maven-plugin.googlecode.com/svn/trunk/repository/releases</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>false</enabled></snapshots> </pluginRepository> <pluginRepository> <id>asadmin-maven-plugin-snapshots-repository</id> <name>asadmin-maven-plugin-snapshots-repository</name> <url>http://asadmin-maven-plugin.googlecode.com/svn/trunk/repository/snapshots</url> <releases><enabled>false</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories>
Plus, if you browse the source tree you’ll find two exemple projects, a WAR and an EAR, that use this plugin.
I’m extensively using Joda-Time for handling time in my Java development, client or server side. Joda-Time is the codebase of the coming RI implementation of JSR-310 that will hopefully ship in Java 7.
I often need to work with dates in web services implementations, here is the JAXB custom binding lines I use to un/marshall JodaTime types to standard xs:date and xs:dateTime XML Schema types.
The glassfish’s wsgen classpath on Glassfish is not by domain, ie. the wsgen tool is not run in the domain class-loader.
When trying to deploy a webservice that returns an entity with a hibernate annotation, I got this following error :
Server logs showed the following trace :
/home/paul/Programs/glassfish-v2-b58g/domains/domain1/applications/j2ee-apps/ear-0.1-SNAPSHOT/lib/entities-0.1-SNAPSHOT.jar(app/model/entities/User.class): warning: Cannot find annotation method 'value()' in type 'org.hibernate.annotations.Fetch': class file for org.hibernate.annotations.Fetch not found Problem encountered during annotation processing; see stacktrace below for more information. java.lang.NullPointerException at com.sun.tools.ws.processor.modeler.annotation.WebServiceAP.isSubtype(WebServiceAP.java:360) ...... SNIP ...... at com.sun.enterprise.management.deploy.DeployThread.run(DeployThread.java:223) error: compilation failed, errors should have been reported Exception occured in J2EEC Phase com.sun.enterprise.deployment.backend.IASDeploymentException: WSGEN FAILED at com.sun.enterprise.webservice.WsUtil.genWSInfo(WsUtil.java:2
Adding the hibernate-annotations.jar file in the glassfish main lib/ directory added the necessary classes to the wsgen classpath.
In an article explicitly titled Building an EJB 3.0 application using GlassFish v2, Apache Maven 2 and NetBeans IDE 6.0, Jacek Laskowski explain in detail how Netbeans 6 can be used by maven users willing to use GlassFish as an EJB3 container.
I’m currently doing these type of things with Netbeans 6 but I didn’t know it was feasible with so few command line maven invocations.
As Leon pointed in comments, it’s not a good idea to put the hibernate jars in the app server classpath like in this post. Hibernate community had published a howto explaining how to use Hibernate in Glassfish but the link has expired. Here is a copy from google cache:
To use hibernate with glassfish, all you have to do is put hibernate and its dependencies into your EAR file. This might also with with a WAR file.
In your persistence.xml, specify hibernate using this tag:
You can also specify hibernate properties as usual, for example:
<properties> <property name=”hibernate.hbm2ddl.auto” value=”none”/></properties></blockquote>
For my first post here I’ll write a quick and dirty howto for using Hibernate inside the Glassfish V2 container.
- Download Hibernate projects
- Put’em in the domain’s lib dir
- Change your persistence.xml file
- Enjoy :)
Details are following :
Read the rest of this entry »