[Jonas] Impossible de déployer une Entity Bean CMP2
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:
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:
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:
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:
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:
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> |