Bonjour,


j'ai crée un Stateless bean, packagé dans un ear, le déploiement au sein de glassfish ne pose pas de soucis et les opérations de persistences fonctionnent à merveille en utilisant l'annotation @PersistenceContext(unitName="CaddyFoxEE-ejbPU") pour injecter les ressources à mon entity manager.

L'étape suivante se corse par contre:

je voudrais remplacer l'annotation par un EntityManagerFactory et récupéré ainsi un entity manager ...

voyez plutot ...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="CaddyFoxEE-ejbPU" transaction-type="JTA">
    <provider>oracle.toplink.essentials.PersistenceProvider</provider>
    <jta-data-source>jdbc/CaddyFoxWarehouseDS</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="toplink.ddl-generation" value="drop-and-create-tables"/>
    </properties>
  </persistence-unit>
</persistence>

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
@Stateless
public class CaddyfoxUserBean implements CaddyfoxUserRemote, CaddyfoxUserLocal {
 
   // @PersistenceContext(unitName="CaddyFoxEE-ejbPU")
    private EntityManager em;
 
    private final String cname = this.getClass().getName();
    private Logger logger = Logger.getLogger(Constants.LOGGER_STATELESS);
 
    public CaddyfoxUserBean() {
        EntityManagerFactory emf=null;
        try{
        emf=Persistence.createEntityManagerFactory("CaddyFoxEE-ejbPU");
        }
        catch(Exception e){
            System.out.println("---seb---erreur createEntityManagerFactory:"+e.getMessage());
        }
 
          try{
        em=emf.createEntityManager();
        }
        catch(Exception e){
            System.out.println("---seb---erreur createEntityManage:"+e.getMessage());
        }
 
    }
public CaddyfoxUser createCaddyfoxUser(final CaddyfoxUser caddyfoxUser) {
        final String mname = "createCaddyfoxUser";
        logger.entering(cname, mname, caddyfoxUser);
 
        // On s'assure de la validitÈ des paramËtres
        if (caddyfoxUser == null)
            throw new ValidationException("CaddyfoxUser object is null");
 
        try{
        em.persist(caddyfoxUser);
      //  em.close();
        }
        catch (Exception e){
            System.out.println("---seb----em.persist probleme:"+e.getMessage());
        }
 
        logger.exiting(cname, mname, caddyfoxUser);
 
 
 
        return caddyfoxUser;
    }
}

malheureusement, je me ramasse misérablement avec cette erreur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
 lundi 27 avril 2009 17 h 11 min 41 s Europe/Brussels 
[#|2009-04-27T17:11:49.164+0200|INFO|sun-appserver2.1|javax.enterprise.system.tools.admin|_ThreadID=16;_ThreadName=httpWorkerThread-4848-1;/Users/seb/glassfish/domains/CaddyFoxWarehouse/generated/xml/j2ee-apps/CaddyFoxEE/CaddyFoxEEClient.jar;|ADM1040 : Emplacement du jar client :[/Users/seb/glassfish/domains/CaddyFoxWarehouse/generated/xml/j2ee-apps/CaddyFoxEE/CaddyFoxEEClient.jar]|#]
 
[#|2009-04-27T17:11:56.519+0200|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=41;_ThreadName=p: thread-pool-1; w: 34;|
---seb---erreur createEntityManagerFactory:No Persistence provider for EntityManager named CaddyFoxEE-ejbPU: Provider named oracle.toplink.essentials.PersistenceProvider threw unexpected exception at create EntityManagerFactory: 
javax.persistence.PersistenceException
javax.persistence.PersistenceException: Exception [TOPLINK-28017] (Oracle TopLink Essentials - 2.1 (Build b60e-fcs (12/23/2008))): oracle.toplink.essentials.exceptions.EntityManagerSetupException
Exception Description: Attempted to predeploy PersistenceUnit [CaddyFoxEE-ejbPU] while being in the wrong state [DeployFailed].
	at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:537)
	at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createEntityManagerFactory(EntityManagerFactoryProvider.java:195)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:110)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
	at com.caddyfox.stateless.caddyfoxuser.CaddyfoxUserBean.<init>(CaddyfoxUserBean.java:37)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
	at java.lang.Class.newInstance0(Class.java:350)
	at java.lang.Class.newInstance(Class.java:303)
	at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:509)
	at com.sun.ejb.containers.StatelessSessionContainer.access$100(StatelessSessionContainer.java:111)
	at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:772)
	at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:199)
	at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:486)
	at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:1700)
	at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1229)
	at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:202)
	at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:77)
	at $Proxy283.createCaddyfoxUser(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154)
	at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687)
	at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088)
	at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567)
	at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)
Caused by: Exception [TOPLINK-28017] (Oracle TopLink Essentials - 2.1 (Build b60e-fcs (12/23/2008))): oracle.toplink.essentials.exceptions.EntityManagerSetupException
Exception Description: Attempted to predeploy PersistenceUnit [CaddyFoxEE-ejbPU] while being in the wrong state [DeployFailed].
	at oracle.toplink.essentials.exceptions.EntityManagerSetupException.cannotPredeploy(EntityManagerSetupException.java:220)
	... 36 more
 
 
 The following providers:
oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider
Returned null to createEntityManagerFactory.
|#]
 
[#|2009-04-27T17:11:56.519+0200|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=41;_ThreadName=p: thread-pool-1; w: 34;|
---seb---erreur createEntityManage:null|#]
 
[#|2009-04-27T17:11:56.519+0200|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=41;_ThreadName=p: thread-pool-1; w: 34;|
---seb----em.persist probleme:null|#]
Si quelqu'un pouvait m'éclairer, ce serait

Les logs sont générés à l'appel de la méthode distante "createCaddyfoxUser".

D'après les logs, il y a un soucis de persistence provider... puis un autre probleme, "predeploy PersistenceUnit [CaddyFoxEE-ejbPU] while being in the wrong state" ...