En utilisant la version standard de Glassfish, une erreur va se produire et empêcher le déploiement de l'application:

java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
	at org.hibernate.internal.NamedQueryRepository.checkNamedQueries(NamedQueryRepository.java:149)
	at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:764)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:495)
	at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
	at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:135)
	at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:50)
	at org.glassfish.persistence.jpa.PersistenceUnitLoader.loadPU(PersistenceUnitLoader.java:199)
	at org.glassfish.persistence.jpa.PersistenceUnitLoader.<init>(PersistenceUnitLoader.java:107)
	at org.glassfish.persistence.jpa.JPADeployer$1.visitPUD(JPADeployer.java:223)
	at org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:510)
	at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:230)
	at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:168)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:925)

Il s'agit d'un problème de version entre le package jboss-logging de Glassfish et Hibernate. Ce dernier utilise une version plus récente (3.3.0) et la méthode en question n'existe pas dans le package fournit par Glassfish.

Sans rentrer dans la complexité du classloading, même en incluant le jar jboss-logging d'Hibernate et en déléguant le lookup des classes prioritairement dans l'EAR, cela ne marche pas car la classe en question (org.jboss.logging.Logger) est déjà chargée. Or la délégation ne fonctionne que pour le lookup d'une nouvelle classe (il n'est pas possible d'upgrader le binaire d'une classe déjà chargée durant le runtime. Il faut pour cela dropper le ClassLoader et en faire un nouveau).

Heureusement, cela se corrige assez facilement, il suffit de mettre à jour le jar dans Glassfish:

cp "<hibernate>/required/jboss-logging-3.3.0.Final.jar" \
   "<glassfish>/glassfish/modules/jboss-logging.jar"

Et désormais tout fonctionne normalement !