Bonjour,

Voilà après presque 3 jours de souffrance, je ne trouve toujours pas de solution.

Mon problème est que j'ai un projet EJB3 (entity + sessionBean) sur NetBeans que je dois migrer vers Eclipse, pour bénéficier d'un plugin de ce dernier.

Avant ça, j'ai essayé de faire un exemple sour Eclipse avec EJB3 et Hibernate car l'ancien projet a été fait avec Hibernate (je ne sais pas pourquoi), probablement pour piloter le persistance ...

Bref, mon souci c'est qu'avec NetBeans on fait tout avec l'assistant mais sur Eclipse c'est manuel. J'ai créé un projet EJB qui s'appelle HelloEJB ainsi qu'un projet HelloEJBEAR et HelloEJBCLient en annexe pour tester.
Jusqu'ici tout va bien, le problème c'est quand j'ai voulu tester les entity avec ma base MySQL. j'ai créé une JNDI sur le serveur GlassFish avec le pool de connexion comme elle était avec NetBeans. Je l'ai fait avec la console Admin de glassfish (ça je maitrise bien).
Maintenant je cherche comment mettre en relation Hibernate (les librairies déjà importées dans mon lib et aussi le lib de glassfish) ?

J'ai crée un fichier persistence.xml et je l'ai mis dans META-INF dont le contenu est :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
<?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="Sophia2-ejbPU" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>JNDI_sophia</jta-data-source>
    <properties>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>
</persistence>
le code de mes classes :

Param.java (entity)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package entities;
 
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
 
/**
 *
 * @author greg
 */
@Entity
 
@NamedQueries({
    @NamedQuery(name = "Param.allParams", query = "SELECT p FROM Param p")
})
@Table(name="Param")        
public class Param implements Serializable {
 
    private static final long serialVersionUID = 1L;
 
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
 
    private String coordX;
 
    private String coordY;
 
    private String zoom;
 
    private String clef;    
 
    public Long getId() {
        return id;
    }
 
    public void setId(Long id) {
        this.id = id;
    }
 
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }
 
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Param)) {
            return false;
        }
        Param other = (Param) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }
 
    @Override
    public String toString() {
        return "projet.sophia.entityBean.Param[id=" + id + "]";
    }
 
    public String getCoordX() {
        return coordX;
    }
 
    public void setCoordX(String coordX) {
        this.coordX = coordX;
    }
 
    public String getCoordY() {
        return coordY;
    }
 
    public void setCoordY(String coordY) {
        this.coordY = coordY;
    }
 
    public String getZoom() {
        return zoom;
    }
 
    public void setZoom(String zoom) {
        this.zoom = zoom;
    }
 
    public String getClef() {
        return clef;
    }
 
    public void setClef(String clef) {
        this.clef = clef;
    }
 
}
SayHello.java (sessionBean) :
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
package example;
 
import java.util.ArrayList;
import java.util.List;
 
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
 
import entities.Param;
 
 
@Stateless(name="SayHello", mappedName="ejb/SayHello")
public class SayHello implements ISayHello {
 
    @PersistenceContext
    private EntityManager em;
 
    @Override
    public String getMessage() {
 
        return "Hello Man";
    }
 
     @SuppressWarnings("unchecked")
    public List<Param> allParams(){
            List<Param> list_params = new ArrayList<Param>();
            try{
                Query query =  em.createNamedQuery("Param.allParams");
                list_params = query.getResultList();
            }
            catch(Exception e){
                e.printStackTrace();
            }
            return list_params;
        }    
 
 
}
L'interface ISayHello.java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package example;
 
import java.util.List;
 
import javax.ejb.Remote;
 
import entities.Param;
 
@Remote
public interface ISayHello {
 
    public abstract String getMessage ();
    public List<Param> allParams();
}
SayHelloClient.java (pour tester) :

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
 
package client;
 
import javax.naming.InitialContext;
 
import example.ISayHello;
 
public class SayHelloClient {
 
    public void runTest ()throws Exception{
 
        InitialContext ctx = new InitialContext();
        ISayHello bean = (ISayHello) ctx.lookup("ejb/SayHello");
        String result = bean.getMessage();
        System.out.println(result);
        System.out.println("Affichage des parametres");
//        for (Param item : bean.allParams()){
//            System.out.println("KEY "+item.getClef());
//            System.out.println("X "+item.getCoordX());
//            System.out.println("Y "+item.getCoordY());
//        }
    }
 
    public static void main(String[] args) throws Exception {
 
        SayHelloClient test = new SayHelloClient ();
        test.runTest();
 
    }
 
}
hier j'ai encore testé avec les lignes commentées dans le client est j'ai eu 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
Exception in thread "main" javax.naming.NameNotFoundException: SayHello not found
    at com.sun.enterprise.naming.TransientContext.doLookup(TransientContext.java:216)
    at com.sun.enterprise.naming.TransientContext.lookup(TransientContext.java:188)
    at com.sun.enterprise.naming.TransientContext.lookup(TransientContext.java:192)
    at com.sun.enterprise.naming.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:74)
    at com.sun.enterprise.naming.RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:129)
    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:597)
    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)
maintenant même sans les Entity, le projet ne marche pas !

Comment puis-je faire pour m'en sortir ?

Remarque : la table Param existe dans ma base mySQL