OVH Cloud OVH Cloud

Problème de bean CMP

5 réponses
Avatar
Bernard Koninckx
Bonjour à tous,

Je suis débutant dans en programmation J2EE.

J'ai créé un bean entité CMP et déclaré une méthode de recherche EJB-QL qui
me retourne une collection d'objets. Comment puis-je faire pour retrouver
toutes les occurences d'objets retournées par l'exécution de la requête dans
l'application cliente. Je n'ai développé que l'inteface remote. Faut-il
également développer une interface home ?

Merci à tous.

Bernard Koninckx

5 réponses

Avatar
Alexandre Touret
Bernard Koninckx wrote:
Bonjour à tous,

Bonjour

Je suis débutant dans en programmation J2EE.

J'ai créé un bean entité CMP et déclaré une méthode de recherche EJB-QL qui
me retourne une collection d'objets.
Un truc du genre

SELECT OBJECT(o) FROM EJBUser o
Comment puis-je faire pour retrouver
toutes les occurences d'objets retournées par l'exécution de la requête dans
l'application cliente.
En associant une methode findAll() dans les fichier de description

(ejb-jar.Xml et l autre specifique au containeur dedie aux EB CMP)
Je n'ai développé que l'inteface remote. Faut-il
également développer une interface home ?
Ou lala Oui sinon ca ne va jamais marcher.Je pense que tu devrais faire

un tour du cote des tutoriaux de SUN
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/


Merci à tous.
De rien, bon courage


Bernard Koninckx


Alexandre Touret


Avatar
Bernard Koninckx
Merci.

Mais quand je disais que je n'avait développé que l'interface remote. Il
s'agit en fait des interfaces remote et remote home.

Les interfaces Home sont elles uniquement utilisée par le Conteneur EJB ?

Comment puis-je effectuer la validation de mes données avec ce bean CMP ?
Dois je implémenter une nouvelle classe Serializable ?

Bernard Koninckx

"Alexandre Touret" a écrit dans le message
de news: bte6fv$qe4$


Bernard Koninckx wrote:
Bonjour à tous,

Bonjour

Je suis débutant dans en programmation J2EE.

J'ai créé un bean entité CMP et déclaré une méthode de recherche EJB-QL
qui


me retourne une collection d'objets.
Un truc du genre

SELECT OBJECT(o) FROM EJBUser o
Comment puis-je faire pour retrouver
toutes les occurences d'objets retournées par l'exécution de la requête
dans


l'application cliente.
En associant une methode findAll() dans les fichier de description

(ejb-jar.Xml et l autre specifique au containeur dedie aux EB CMP)
Je n'ai développé que l'inteface remote. Faut-il
également développer une interface home ?
Ou lala Oui sinon ca ne va jamais marcher.Je pense que tu devrais faire

un tour du cote des tutoriaux de SUN
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/


Merci à tous.
De rien, bon courage


Bernard Koninckx


Alexandre Touret




Avatar
Bernard Koninckx
En fait voici le code :

package ejb.server.biblio;

/**
*
* @author Pat et Ben
*/
public abstract class BookBean implements javax.ejb.EntityBean {
private static final double idGenStart (double)System.currentTimeMillis();
private static double idGen = idGenStart;

public Double ejbCreate (String title) throws javax.ejb.CreateException
{
setId(new Double(idGen++));
setTitle(title);
return null;
}

public void ejbPostCreate(String tile) {}

public abstract Double getId();
public abstract void setId(Double id);
public abstract String getTitle();
public abstract void setTitle(String title);


public void ejbLoad() {}
public void ejbPassivate() {}
public void ejbRemove() {}
public void ejbStore() {}
public void setEntityContext(javax.ejb.EntityContext entityContext) {}
public void unsetEntityContext() {}
}

-----------------------------------------------------------


package ejb.server.biblio;

/**
*
* @author Pat et Ben
*/

// Address EJB's local interface
public interface BookRemote extends javax.ejb.EJBObject
{
public String getTitle() throws java.rmi.RemoteException;
public void setTitle(String title) throws java.rmi.RemoteException;

public Double getId() throws java.rmi.RemoteException;
}


------------------------------------------------------------------


package ejb.server.biblio;

import java.util.Collection;

/**
*
* @author Pat et Ben
*/
public interface BookHomeRemote extends javax.ejb.EJBHome {
public BookRemote create(String title)
throws javax.ejb.CreateException, java.rmi.RemoteException;

public BookRemote findByPrimaryKey(Double primaryKey)
throws javax.ejb.FinderException, java.rmi.RemoteException;

public Collection findByTitle(String title)
throws javax.ejb.FinderException, java.rmi.RemoteException;

}



-------------------------------------------------------------


Mon ejb-jar


<?xml version="1.0"?>

<!DOCTYPE ejb-jar PUBLIC
"-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
"http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar>
<enterprise-beans>
<entity>
<ejb-name>Book</ejb-name>
<home>ejb.server.biblio.BookHomeRemote</home>
<remote>ejb.server.biblio.BookRemote</remote>
<ejb-class>ejb.server.biblio.BookBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Double</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Book</abstract-schema-name>
<cmp-field><field-name>id</field-name></cmp-field>
<cmp-field><field-name>title</field-name></cmp-field>
<primkey-field>id</primkey-field>
<query>
<query-method>
<method-name>findByTitle</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</query-method>
<result-type-mapping>Remote</result-type-mapping>
<ejb-ql>
SELECT OBJECT(b) FROM Book AS b
WHERE b.title LIKE '%?1%'
</ejb-ql>
</query>
<security-identity><use-caller-identity/></security-identity>
</entity>
</enterprise-beans>
<assembly-descriptor>
<security-role>
<role-name>Users</role-name>
</security-role>
<method-permission>
<role-name>Users</role-name>
<method>
<ejb-name>Book</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>
<container-transaction>
<method>
<ejb-name>Book</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>


---------------------------------------------------------------------

Et le code du client :

/*
* Biblio.java
*
* Created on 5 janvier 2004, 10:39
*/

package com.client.biblio;

import ejb.server.biblio.BookHomeRemote;
import ejb.server.biblio.BookRemote;

import javax.naming.Context;
import java.util.Properties;
import java.util.Collection;
import java.util.Iterator;

/**
*
* @author Pat et Ben
*/
public class TestBook {

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws
javax.naming.NamingException {
// Obtenir l'objet Book
Context jndiContext = getInitialContext();
Object obj = jndiContext.lookup("BookHomeRemote");
BookHomeRemote home (BookHomeRemote)javax.rmi.PortableRemoteObject.narrow(obj,
BookHomeRemote.class);
try{
BookRemote book = home.create("Java In A Nutshell");
Double primaryKey = book.getId();
BookRemote bookSearch = home.findByPrimaryKey(primaryKey);
System.out.println("Id : " + bookSearch.getId().toString());
System.out.println("Titre : " + bookSearch.getTitle());
Collection bookSearch2 = home.findByTitle("%in%");
Iterator iterator = bookSearch2.iterator();
BookRemote bookEntry;
while(iterator.hasNext()){
bookEntry = (BookRemote)iterator.next();
System.out.println(" ID : " + bookEntry.getId().toString());
System.out.println(" Title : " + bookEntry.getTitle());
}
} catch (Exception excpt){
excpt.printStackTrace();
}
}

public static Context getInitialContext() throws
javax.naming.NamingException {
Properties p = new Properties();
return new javax.naming.InitialContext(p);
}
}


Si quelqu'un y trouve une erreur ou quelque chose de plus à faire , ce
serait sympa.

J'ai déjà plusieurs occurences dans ma base de données, mais mon client
n'affiche que la première occurence trouvée. Je ne comprends pas pourquoi !

Bernard Koninckx
Avatar
Bernard Koninckx
En fait voici le code :

package ejb.server.biblio;

/**
*
* @author Pat et Ben
*/
public abstract class BookBean implements javax.ejb.EntityBean {
private static final double idGenStart (double)System.currentTimeMillis();
private static double idGen = idGenStart;

public Double ejbCreate (String title) throws javax.ejb.CreateException
{
setId(new Double(idGen++));
setTitle(title);
return null;
}

public void ejbPostCreate(String tile) {}

public abstract Double getId();
public abstract void setId(Double id);
public abstract String getTitle();
public abstract void setTitle(String title);


public void ejbLoad() {}
public void ejbPassivate() {}
public void ejbRemove() {}
public void ejbStore() {}
public void setEntityContext(javax.ejb.EntityContext entityContext) {}
public void unsetEntityContext() {}
}

-----------------------------------------------------------


package ejb.server.biblio;

/**
*
* @author Pat et Ben
*/

// Address EJB's local interface
public interface BookRemote extends javax.ejb.EJBObject
{
public String getTitle() throws java.rmi.RemoteException;
public void setTitle(String title) throws java.rmi.RemoteException;

public Double getId() throws java.rmi.RemoteException;
}


------------------------------------------------------------------


package ejb.server.biblio;

import java.util.Collection;

/**
*
* @author Pat et Ben
*/
public interface BookHomeRemote extends javax.ejb.EJBHome {
public BookRemote create(String title)
throws javax.ejb.CreateException, java.rmi.RemoteException;

public BookRemote findByPrimaryKey(Double primaryKey)
throws javax.ejb.FinderException, java.rmi.RemoteException;

public Collection findByTitle(String title)
throws javax.ejb.FinderException, java.rmi.RemoteException;

}



-------------------------------------------------------------


Mon ejb-jar


<?xml version="1.0"?>

<!DOCTYPE ejb-jar PUBLIC
"-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
"http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar>
<enterprise-beans>
<entity>
<ejb-name>Book</ejb-name>
<home>ejb.server.biblio.BookHomeRemote</home>
<remote>ejb.server.biblio.BookRemote</remote>
<ejb-class>ejb.server.biblio.BookBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Double</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Book</abstract-schema-name>
<cmp-field><field-name>id</field-name></cmp-field>
<cmp-field><field-name>title</field-name></cmp-field>
<primkey-field>id</primkey-field>
<query>
<query-method>
<method-name>findByTitle</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</query-method>
<result-type-mapping>Remote</result-type-mapping>
<ejb-ql>
SELECT OBJECT(b) FROM Book AS b
WHERE b.title LIKE '%?1%'
</ejb-ql>
</query>
<security-identity><use-caller-identity/></security-identity>
</entity>
</enterprise-beans>
<assembly-descriptor>
<security-role>
<role-name>Users</role-name>
</security-role>
<method-permission>
<role-name>Users</role-name>
<method>
<ejb-name>Book</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>
<container-transaction>
<method>
<ejb-name>Book</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>


---------------------------------------------------------------------

Et le code du client :

/*
* Biblio.java
*
* Created on 5 janvier 2004, 10:39
*/

package com.client.biblio;

import ejb.server.biblio.BookHomeRemote;
import ejb.server.biblio.BookRemote;

import javax.naming.Context;
import java.util.Properties;
import java.util.Collection;
import java.util.Iterator;

/**
*
* @author Pat et Ben
*/
public class TestBook {

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws
javax.naming.NamingException {
// Obtenir l'objet Book
Context jndiContext = getInitialContext();
Object obj = jndiContext.lookup("BookHomeRemote");
BookHomeRemote home (BookHomeRemote)javax.rmi.PortableRemoteObject.narrow(obj,
BookHomeRemote.class);
try{
BookRemote book = home.create("Java In A Nutshell");
Double primaryKey = book.getId();
BookRemote bookSearch = home.findByPrimaryKey(primaryKey);
System.out.println("Id : " + bookSearch.getId().toString());
System.out.println("Titre : " + bookSearch.getTitle());
Collection bookSearch2 = home.findByTitle("%in%");
Iterator iterator = bookSearch2.iterator();
BookRemote bookEntry;
while(iterator.hasNext()){
bookEntry = (BookRemote)iterator.next();
System.out.println(" ID : " + bookEntry.getId().toString());
System.out.println(" Title : " + bookEntry.getTitle());
}
} catch (Exception excpt){
excpt.printStackTrace();
}
}

public static Context getInitialContext() throws
javax.naming.NamingException {
Properties p = new Properties();
return new javax.naming.InitialContext(p);
}
}


Si quelqu'un y trouve une erreur ou quelque chose de plus à faire , ce
serait sympa.

J'ai déjà plusieurs occurences dans ma base de données, mais mon client
n'affiche que la première occurence trouvée. Je ne comprends pas pourquoi !

Bernard Koninckx
Avatar
Bernard Koninckx
Merci pour les infos ...

Bernard

"Alexandre Touret" a écrit dans le message
de news: bte6fv$qe4$


Bernard Koninckx wrote:
Bonjour à tous,

Bonjour

Je suis débutant dans en programmation J2EE.

J'ai créé un bean entité CMP et déclaré une méthode de recherche EJB-QL
qui


me retourne une collection d'objets.
Un truc du genre

SELECT OBJECT(o) FROM EJBUser o
Comment puis-je faire pour retrouver
toutes les occurences d'objets retournées par l'exécution de la requête
dans


l'application cliente.
En associant une methode findAll() dans les fichier de description

(ejb-jar.Xml et l autre specifique au containeur dedie aux EB CMP)
Je n'ai développé que l'inteface remote. Faut-il
également développer une interface home ?
Ou lala Oui sinon ca ne va jamais marcher.Je pense que tu devrais faire

un tour du cote des tutoriaux de SUN
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/


Merci à tous.
De rien, bon courage


Bernard Koninckx


Alexandre Touret