EJB3 et Hibernate sous Eclipse
Bonjour,
Voilà après presque 3 jours de souffrance, je ne trouve toujours pas de solution, en fait j'ai un projet existant sur NetBeans sur lequel je travaille, j'ai repris ce projet pour ajouter des fonctionnalités avec un plugin qui marche sur Eclipse, contraint de faire une migration vers Eclipse de NetBeans de tout le projet EJB3 (entity + sessionBean), mais 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 ...moi je ne suis pas douillé dans ce domaine :(
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 aussi un projet HelloEJBEAR et HelloEJBCLient en annexe pour tester, jusqu'ici tout va bien, le problème c'est quand je voulais tester les entity avec ma base MySQL, j'ai crée une JNDI sur le serveur GlassFish avec le pool de connexion comme elle était avec netBeans, je l'ai fait 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:
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:
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 104 105 106 107 108 109 110 111
|
package entities;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
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:
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
|
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
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:
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
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) |
mainteant même sans les entity le projet ne marche pas !!!
j'attends votre retour je suis un peu pressé pour faire cette migration car elle me prends la tête, merci
Remarque : la table Param existe dans ma base mySQL