Bonjour à tous.
Je débute depuis peu avec les EJB.
Les Session Bean ne m'ont pas posé trop de problème en revanche j'ai toutes les peines du monde à faire touner une Entity Bean CMP2.
Je travaille sous Eclipse avec le plugin JOPE.
J'ai bien réussi à générer le jar de l'Entity Bean mais lorsque je tente de la déployer dans Jonas j'obtiens l'erreur suivante:
java.lang.Exception: Cannot create Container:
javax.ejb.EJBException: Impossible to instanciate the entity factory: jorm.rdb.hsql.EtudiantsMapping; nested exception is: java.lang.ClassNotFoundException: jorm.rdb.hsql.EtudiantsMapping
Comme vous pouvez le voir je travaille avec hsqldb. Mon HSQL1.properties et jonas.properties sont je pense corrects:
pour le premier j'ai:
datasource.name jdbc_1
datasource.url jdbc:hsqldb:hsql://localhost/db_jonas
datasource.classname org.hsqldb.jdbcDriver
datasource.username jonas
datasource.password jonas
datasource.mapper rdb.hsql
et dans le jonas.properties:
jonas.service.dbm.datasources HSQL1
Dans le build.properties j'ai bien:
mapper.names=rdb.hsql
J'ai egalement mis (comme conseillé sur certain forums...) hsqldb.jar dans %JONAS_ROOT%\lib\ext
Je ne sais plus trop quoi faire et je suis convaincu qu'il s'agit d'une erreur de débutant
Je met aussi mon code pour que vous ayez tous les éléments.
Merci d'avance pour vos précieux éclaircissements.
-----------------------------------------------------------------------------------
La remote interface
-------------------------------------------------------------------------------
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 package etudiant; import java.rmi.RemoteException; import javax.ejb.EJBObject; /** * Etudiant remote interface */ public interface Etudiant extends EJBObject { public String getLogin() throws RemoteException; public void setLogin(String login) throws RemoteException; public String getNom() throws RemoteException; public void setNom(String nom) throws RemoteException; public String getPrenom() throws RemoteException; public void setPrenom(String prenom) throws RemoteException; public int getInscrit() throws RemoteException; public void setInscrit(int inscrit) throws RemoteException; }
l'interface home
-------------------------------------------------------------------------------------
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 package etudiant; import java.rmi.RemoteException; import java.util.Collection; import javax.ejb.CreateException; import javax.ejb.EJBHome; import javax.ejb.FinderException; public interface EtudiantHome extends EJBHome { Etudiant create(String login, String nom, String prenom, int inscrit) throws CreateException, RemoteException; Etudiant findByPrimaryKey(String login) throws FinderException, RemoteException; Collection findAll() throws FinderException, RemoteException; }
L'implémentation
---------------------------------------------------------------------------
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 package etudiant; //import java.rmi.RemoteException; public abstract class EtudiantEJB implements javax.ejb.EntityBean { javax.ejb.EntityContext ejbContext; public java.lang.String ejbCreate(String login, String nom, String prenom, int inscrit) throws javax.ejb.CreateException{ //Initialisation des attributs de la Bean setLogin(login); setNom(nom); setPrenom(prenom); setInscrit(inscrit); return null; } public void ejbPostCreate(String login, String nom, String prenom, int inscrit) { } // ------------------------------------------------------------------ // Persistent fields (gérés par les methodes abstract) // ------------------------------------------------------------------ public abstract String getLogin(); public abstract void setLogin(String login); public abstract String getNom(); public abstract void setNom(String nom); public abstract String getPrenom(); public abstract void setPrenom(String prenom); public abstract int getInscrit(); public abstract void setInscrit(int inscrit); // ------------------------------------------------------------------ // Standard call back methods // ------------------------------------------------------------------ public void setEntityContext(javax.ejb.EntityContext ctx) { ejbContext = ctx; } public void unsetEntityContext() { ejbContext = null; } public void ejbRemove() throws javax.ejb.RemoveException { } public void ejbLoad() { } public void ejbStore() { } public void ejbPassivate() { } public void ejbActivate() { } }
Le fichier de déploiement
-----------------------------------------------------------------------------------
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 <?xml version="1.0" encoding="ISO-8859-15"?> <!-- Velocity tempate: $Id: ejb-jar.vm,v 1.8 2005/08/10 16:24:21 el-vadimo Exp $ --> <ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" version="2.1"> <description>Describe here the content of this file</description> <display-name>Etudiant</display-name> <enterprise-beans> <entity> <description>Describe here the entity bean Etudiant</description> <ejb-name>EtudiantEJB</ejb-name> <home>etudiant.EtudiantHome</home> <remote>etudiant.Etudiant</remote> <ejb-class>etudiant.EtudiantEJB</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.String</prim-key-class> <reentrant>false</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>etudiants</abstract-schema-name> <cmp-field> <field-name>login</field-name> </cmp-field> <cmp-field> <field-name>nom</field-name> </cmp-field> <cmp-field> <field-name>prenom</field-name> </cmp-field> <cmp-field> <field-name>inscrit</field-name> </cmp-field> <primkey-field>login</primkey-field> <query> <query-method> <method-name>findAll</method-name> <method-params/> </query-method> <ejb-ql>SELECT OBJECT(o) FROM etudiants o</ejb-ql> </query> </entity> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>EtudiantEJB</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>
Le fichier de déploiement Jonas
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 <?xml version="1.0" encoding="ISO-8859-15"?> <!-- Velocity template: $Id: jonas-ejb-jar.vm,v 1.6 2005/08/10 16:24:21 el-vadimo Exp $ --> <jonas-ejb-jar xmlns="http://www.objectweb.org/jonas/ns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.objectweb.org/jonas/ns http://www.objectweb.org/jonas/ns/jonas-ejb-jar_4_0.xsd" > <jonas-entity> <ejb-name>EtudiantEJB</ejb-name> <jndi-name>EtudiantHome</jndi-name> <jdbc-mapping> <jndi-name>jdbc_1</jndi-name> </jdbc-mapping> </jonas-entity> </jonas-ejb-jar>
Partager