Migration to glassfish v3 and JSF 2 - richfaces 4.

Eclipse projects

Each eclipse project must change its dependencies

Replace glassfish 2 dependencies to glassfish 3 dependencies

GlassFishLink -> GlassFish3Link
Glassfish 2 library -> Glassfish 3 library

In tests projects

add gf-client.jar dependency in all tests projects (do not forget "cicero tests").

Persistence API migration

All the persistence.xml files must rename their toplink reference to eclipselink. In the tests projects.

<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/imagedatabase" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.user" value="user" />
<property name="javax.persistence.jdbc.password" value="..." />
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
</properties>

Additionnaly, we have to add the persistence units in a project when dependencies need them. This means
to add a persitence unit for mrisessions in virtual_file_system_services_unit_tests, cicero_file_manage_system_website etc.

The query.getSingleResult() method from JPA now return an Object of property type instead of a Vector of Object.

Strange behavior

It seems that the acquisition of persistence context via the createEntityManagerFactory("pu") search for
the pu persistence unit in all the persistence.xml files of the path. And not only of the current project. And so it can use a persistence.xml file of an EJB project with JTA source.
To correct this we can change the persistence unit name in persistence.xml files of test projects and during the createEntityManagerFactory() call.

Organisation of EAR files

Glassfish 3 seems not to support lib files at root of the ear file.
And the interface JARs must also be in lib dir.
They need to be placed in lib/ folder.

for example cicero.ear

lib/cicero-library.jar
lib/data_transfer_interface.jar
data_transfer_services.jar

etc.

Organisation of the WAR file

The richfaces library have to be in WEB-INF/lib folder.

New libraries to perform a lookup

In glassfish v2.x, we used the appserv-rt.jar and javaee.jar libraries to perform a lookup. In glassfish v3.x, we need tu use gf-client.jar which import many others libraries (with MANIFEST file). This is impacting all tests projects.

Global JNDI names

In JavaEE6, global JNDI names are available to reference EJB.
For example:
Access to fr.cnrs.mri.service.virtualfileSystem.VirtualFileSystemService
become java:global/cicero/virtual_file_system_services/VirtualFileSystemBean

Migration to JSF 2.0

Some explanation resource:
http://www.laliluna.de/articles/posts/jsf-2-evaluation-test.html

First of all, It's necessary to upgrade eclipse to Helios in order to use Project Facets for jsf 2.0.

Add taglib headers or better use ui:composition tag

It is better to use the ui:composition tag which come from facelets lib, as a root tag.

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">

</ui:composition>

New organisation of resources

Two new jsf tags appears: <h:outputScript> and <h:outputStylesheet>. They need a resources folder (in WebContent). Inside it we can create folders (like css/, javascript/ etc.)
and these resources will be accessible by the attribute library of the new tags.
see http://www.ibm.com/developerworks/java/library/j-jsf2fu1/index.html

To include jQuery we can use inside the <h:head> tag, the
<rich:jQuery /> tag.