J'ai écrit un statefulbean EJB3 qui accède à une base de donnée.
Mon serveur d'application est JONAS et je me sers des Easybeans afin de programmer les EJB3.
J'ai un problème lors du déploiement de cet EJB dans le conteneur Easybeans. En effet lors du déploiement, un message d'erreur se produit.
Voici le message d'erreur qui apparaît lors du déploiement dans le conteneur Easybeans :
2006-07-28 14:55:58,590 : CommonsLoggerImpl.info : Creating container for archive /project/geomobile/soft/JONAS_4_7_4/ejb3s/geo.jar. 2006-07-28 14:55:58,712 : CommonsLoggerImpl.info : Analyze elapsed during : 117 ms 2006-07-28 14:55:58,823 : CommonsLoggerImpl.info : Enhancement elapsed during : 106 ms 2006-07-28 14:55:59,111 : CommonsLoggerImpl.info : No transaction-type defined. Set to default JTA transaction-type 2006-07-28 14:55:59,500 : CommonsLoggerImpl.info : No persistence provider was set, set to value org.hibernate.ejb.HibernatePersistence. 2006-07-28 14:55:59,503 : CommonsLoggerImpl.info : Found a default configuration for the persistence provider org.hibernate.ejb.HibernatePersistence 2006-07-28 14:55:59,507 : CommonsLoggerImpl.info : Setting the property hibernate.transaction.manager_lookup_class with value org.hibernate.transaction.JOTMTransactionManagerLookup 2006-07-28 14:55:59,509 : CommonsLoggerImpl.info : Setting the property hibernate.cache.provider_class with value org.hibernate.cache.HashtableCacheProvider 2006-07-28 14:55:59,513 : Ejb3Configuration.createContainerEntityManagerFactory : Processing PersistenceUnitInfo [ name: geo ...] 2006-07-28 14:55:59,547 : Ejb3Configuration.scanForClasses : found EJB3 Entity bean: java.geomobile.domain.Cabin 2006-07-28 14:55:59,606 : Ejb3Configuration.scanForClasses : found EJB3 Entity bean: java.geomobile.domain.Cabin Exception in thread "Thread-44" javax.persistence.PersistenceException: [PersistenceUnit: geo] class or package not found at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:965) at org.hibernate.ejb.Ejb3Configuration.addClassesToSessionFactory(Ejb3Configuration.java:768) at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:654) at org.hibernate.ejb.Ejb3Configuration.createContainerEntityManagerFactory(Ejb3Configuration.java:350) at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:119) at org.objectweb.easybeans.persistence.JPersistenceContext.init(JPersistenceContext.java:72) at org.objectweb.easybeans.persistence.JPersistenceContext.<init>(JPersistenceContext.java:65) at org.objectweb.easybeans.persistence.PersistenceUnitManager.<init>(PersistenceUnitManager.java:60) at org.objectweb.easybeans.persistence.xml.PersistenceXmlFileAnalyzer.analyzePersistenceXmlFile(PersistenceXmlFileAnalyzer.java:178) at org.objectweb.easybeans.container.JContainer3.start(JContainer3.java:234) at org.objectweb.easybeans.server.ContainersMonitor.scanNewContainers(ContainersMonitor.java:156) at org.objectweb.easybeans.server.ContainersMonitor.run(ContainersMonitor.java:109) Caused by: java.lang.ClassNotFoundException: java.geomobile.domain.Cabin at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:242) at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:117) at org.hibernate.ejb.Ejb3Configuration.classForName(Ejb3Configuration.java:881) at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:953) ... 11 more
try { // recherche du client dans la base de données Query q = entityManager .createQuery("from T_Client c where c.id = :id and c.name = :name" ); q.setParameter("id", id); q.setParameter("name", name); this.client = (Cabin) q.getSingleResult();
add = true; } catch (NoResultException notFound) { // client non existant dan sl a base de données // création du client
this.client = new Cabin(); this.client.setId(id); this.client.setName(name); entityManager.persist(this.client);
Ce problème est d'autant plus bizarre que j'ai écrit auparavant un statefulbean qui fonctionnait correctement, ainsi qu'un entitybean. Mais à partir du moment où j'essaye les deux en un, cela ne fonctionne plus.
Quelqu'un pourrait-il m'aider , svp ???
Merci pour vos réponses.
Message édité par Flash Gourdin le 31-07-2006 à 16:58:22
Marsh Posté le 31-07-2006 à 16:53:21
Bonjour,
J'ai écrit un statefulbean EJB3 qui accède à une base de donnée.
Mon serveur d'application est JONAS et je me sers des Easybeans afin de programmer les EJB3.
J'ai un problème lors du déploiement de cet EJB dans le conteneur Easybeans. En effet lors du déploiement, un message d'erreur se produit.
Voici le message d'erreur qui apparaît lors du déploiement dans le
conteneur Easybeans :
2006-07-28 14:55:58,590 : CommonsLoggerImpl.info : Creating container
for archive /project/geomobile/soft/JONAS_4_7_4/ejb3s/geo.jar.
2006-07-28 14:55:58,712 : CommonsLoggerImpl.info : Analyze elapsed
during : 117 ms
2006-07-28 14:55:58,823 : CommonsLoggerImpl.info : Enhancement elapsed
during : 106 ms
2006-07-28 14:55:59,111 : CommonsLoggerImpl.info : No transaction-type
defined. Set to default JTA transaction-type
2006-07-28 14:55:59,500 : CommonsLoggerImpl.info : No persistence
provider was set, set to value org.hibernate.ejb.HibernatePersistence.
2006-07-28 14:55:59,503 : CommonsLoggerImpl.info : Found a default
configuration for the persistence provider
org.hibernate.ejb.HibernatePersistence
2006-07-28 14:55:59,507 : CommonsLoggerImpl.info : Setting the property
hibernate.transaction.manager_lookup_class with value
org.hibernate.transaction.JOTMTransactionManagerLookup
2006-07-28 14:55:59,509 : CommonsLoggerImpl.info : Setting the property
hibernate.cache.provider_class with value
org.hibernate.cache.HashtableCacheProvider
2006-07-28 14:55:59,513 :
Ejb3Configuration.createContainerEntityManagerFactory : Processing
PersistenceUnitInfo [
name: geo
...]
2006-07-28 14:55:59,547 : Ejb3Configuration.scanForClasses : found EJB3
Entity bean: java.geomobile.domain.Cabin
2006-07-28 14:55:59,606 : Ejb3Configuration.scanForClasses : found EJB3
Entity bean: java.geomobile.domain.Cabin
Exception in thread "Thread-44" javax.persistence.PersistenceException:
[PersistenceUnit: geo] class or package not found
at
org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:965)
at
org.hibernate.ejb.Ejb3Configuration.addClassesToSessionFactory(Ejb3Configuration.java:768)
at
org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:654)
at
org.hibernate.ejb.Ejb3Configuration.createContainerEntityManagerFactory(Ejb3Configuration.java:350)
at
org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:119)
at
org.objectweb.easybeans.persistence.JPersistenceContext.init(JPersistenceContext.java:72)
at
org.objectweb.easybeans.persistence.JPersistenceContext.<init>(JPersistenceContext.java:65)
at
org.objectweb.easybeans.persistence.PersistenceUnitManager.<init>(PersistenceUnitManager.java:60)
at
org.objectweb.easybeans.persistence.xml.PersistenceXmlFileAnalyzer.analyzePersistenceXmlFile(PersistenceXmlFileAnalyzer.java:178)
at
org.objectweb.easybeans.container.JContainer3.start(JContainer3.java:234)
at
org.objectweb.easybeans.server.ContainersMonitor.scanNewContainers(ContainersMonitor.java:156)
at
org.objectweb.easybeans.server.ContainersMonitor.run(ContainersMonitor.java:109)
Caused by: java.lang.ClassNotFoundException: java.geomobile.domain.Cabin
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at
org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:117)
at
org.hibernate.ejb.Ejb3Configuration.classForName(Ejb3Configuration.java:881)
at
org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:953)
... 11 more
Voici le code mon Satefulbean :
package java.geomobile.login;
import java.geomobile.domain.Cabin;
import javax.ejb.Remote;
import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@Stateful
@Remote(LoginRemote.class)
public class LoginBean implements LoginRemote {
@PersistenceContext(unitName="geo" )
private EntityManager entityManager;
private Cabin client;
private boolean add = false;
@Remove
//public T_Client findOrCreateClient(String noTel, String email) {
public boolean findOrCreateClient(int id, String name) {
try {
// recherche du client dans la base de données
Query q = entityManager
.createQuery("from T_Client c where c.id = :id and c.name = :name" );
q.setParameter("id", id);
q.setParameter("name", name);
this.client = (Cabin) q.getSingleResult();
add = true;
} catch (NoResultException notFound) {
// client non existant dan sl a base de données
// création du client
this.client = new Cabin();
this.client.setId(id);
this.client.setName(name);
entityManager.persist(this.client);
add = false;
}
//return this.client;
return add;
}
}
Ce problème est d'autant plus bizarre que j'ai écrit auparavant un statefulbean qui fonctionnait correctement, ainsi qu'un entitybean.
Mais à partir du moment où j'essaye les deux en un, cela ne fonctionne plus.
Quelqu'un pourrait-il m'aider , svp ???
Merci pour vos réponses.
Message édité par Flash Gourdin le 31-07-2006 à 16:58:22