Ejb, lomboz et collection

Fermé
Thomas Roosen - 29 juin 2005 à 08:56
 Thomas Roosen - 29 juin 2005 à 09:01
Bonjour,

je rencontre un problème avec des EJB créés avec Lomboz.
Il se trouve que lorsque une méthode de l'EJB renvoie autre chose qu'un type
simple, je rencontre une erreur.
Je teste mon EJB avec un client de Test créé à partir d'un assistant de
Lomboz.
Dans les messages suivants, vous trouverez le code des fichiers "ListerBean.java" correspondant à la partie métier de l'EJB et "VenteBean.java" qui correspond à l'élément de base qui compose ma
liste.

La première méthode (getListe())doit me retourner une collection ==> renvoie
une erreur.
La deuxième méthode (getLeon()) ne doit rien me retourner ==> ok
la troisième méthode (getInt()) doit me retourner un entier ==> ok
la quatrième méthode (getVenteBean()) doit me retourner un "VenteBean" ==>
renvoie une erreur.

De plus, il faut savoir que la méthode en elle même ne semble pas poser de
problème puisque même dans les cas où je rencontre une erreur, les traces
apparaissent bien dans la console.

Voici maintenant l'erreur.

java.lang.reflect.UndeclaredThrowableException 
at $Proxy1.getVenteBean(Unknown Source) 
at serviceCommercial.Test14.testBean(Test14.java:55) 
at serviceCommercial.Test14.main(Test14.java:6 
Caused by: java.io.NotSerializableException: serviceCommercial.VenteBean 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054) 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278) 
at java.rmi.MarshalledObject.<init>(MarshalledObject.java:92) 
at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:363) 
at sun.reflect.GeneratedMethodAccessor77.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:324) 
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:261) 
at sun.rmi.transport.Transport$1.run(Transport.java:148) 
at java.security.AccessController.doPrivileged(Native Method) 
at sun.rmi.transport.Transport.serviceCall(Transport.java:144) 
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460) 
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701) 
at java.lang.Thread.run(Thread.java:536) 
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247) 
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223) 
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:133) 
at org.jboss.invocation.jrmp.server.JRMPInvoker_Stub.invoke(Unknown Source) 
at org.jboss.invocation.jrmp.interfaces.JRMPInvokerProxy.invoke(JRMPInvokerProxy.java:135) 
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:87) 
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:46) 
at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:45) 
at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:100) 
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:85) 
... 3 more 
Exception in thread "main" 


Qu'est a-t-il déjà rencontré (et solutionné) ce problème?
D'avance merci.

1 réponse

Thomas Roosen
29 juin 2005 à 09:01
Ci-dessous le code des fichiers "ListerBean.java" et "VenteBean.java"

********************ListerBean.java*********************
/* 
* Created on 28 juin 2005 
* 
* TODO To change the template for this generated file go to 
* Window - Preferences - Java - Code Style - Code Templates 
*/ 
package serviceCommercial; 

import java.sql.ResultSet; 
import java.util.Collection; 
import java.util.HashSet; 

import javax.ejb.SessionBean; 

import odbc.ODBCConnect; 

/** 
* 
* <!-- begin-user-doc --> A generated session bean <!-- end-user-doc --> * 
<!-- lomboz.beginDefinition --> 
<?xml version="1.0" encoding="UTF-8"?> 
<lomboz:EJB xmlns:j2ee="http://java.sun.com/xml/ns/j2ee" xmlns:lomboz="http://lomboz.objectlearn.com/xml/lomboz"> 
<lomboz:session> 
<lomboz:sessionEjb> 
<j2ee:display-name>Lister</j2ee:display-name> 
<j2ee:ejb-name>Lister</j2ee:ejb-name> 
<j2ee:ejb-class>serviceCommercial.ListerBean</j2ee:ejb-class> 
<j2ee:session-type>Stateless</j2ee:session-type> 
<j2ee:transaction-type>Container</j2ee:transaction-type> 
</lomboz:sessionEjb> 
</lomboz:session> 
</lomboz:EJB> 
<!-- lomboz.endDefinition --> 
* 
* <!-- begin-xdoclet-definition --> 
* @ejb.bean name="Lister" 
* jndi-name="Lister" 
* type="Stateless" 
* transaction-type="Container" 
* 
*-- 
* This is needed for JOnAS. 
* If you are not using JOnAS you can safely remove the tags below. 
* @jonas.bean ejb-name="Lister" 
* jndi-name="Lister" 
* 
*-- 
* <!-- end-xdoclet-definition --> 
* @generated 
*/ 
public abstract class ListerBean implements SessionBean { 

/** 
* @ejb.interface-method 
* view-type="remote" 
**/ 
public Collection getListe(){ 

Collection listeVentes = new HashSet(); 

odbc.ODBCConnect baseServiceComm = new ODBCConnect(); 
baseServiceComm.connectage("ServiceCommercial"); 
System.out.println("avant GS"); 
baseServiceComm.getStatement(); 
ResultSet res = baseServiceComm.ExecuteQ("SELECT * FROM VENTES"); 

try 
{ 
System.out.println("avant while"); 
while (res.next()) 
{ 
System.out.println("while"); 
VenteBean uneVente = new VenteBean(); 
uneVente.setNVendeur(res.getInt(1)); 
uneVente.setTrimestre(res.getInt(2)); 
uneVente.setAnnee(res.getInt(3)); 
uneVente.setCAHT(res.getInt(4)); 

listeVentes.add(uneVente); 
} 
System.out.println("après boucle"); 
System.out.println("taille = " + listeVentes.size()); 
} 
catch (Exception e) 
{ 
System.out.println("Erreur"); 
} 
baseServiceComm.fermeture(); 

return listeVentes; 
} 
/** 
* @ejb.interface-method 
* view-type="remote" 
**/ 
public void getLeon(){ 
Collection listeVentes = new HashSet(); 

odbc.ODBCConnect baseServiceComm = new ODBCConnect(); 
baseServiceComm.connectage("ServiceCommercial"); 
System.out.println("avant GS"); 
baseServiceComm.getStatement(); 
ResultSet res = baseServiceComm.ExecuteQ("SELECT * FROM VENTES"); 

try 
{ 
System.out.println("avant while"); 
while (res.next()) 
{ 
System.out.println("while"); 
VenteBean uneVente = new VenteBean(); 
uneVente.setNVendeur(res.getInt(1)); 
uneVente.setTrimestre(res.getInt(2)); 
uneVente.setAnnee(res.getInt(3)); 
uneVente.setCAHT(res.getInt(4)); 

listeVentes.add(uneVente); 
} 
System.out.println("après boucle"); 
System.out.println("taille = " + listeVentes.size()); 
} 
catch (Exception e) 
{ 
System.out.println("Erreur"); 
} 
baseServiceComm.fermeture(); 

} 
/** 
* @ejb.interface-method 
* view-type="remote" 
**/ 
public int getInt(){ 
Collection listeVentes = new HashSet(); 

odbc.ODBCConnect baseServiceComm = new ODBCConnect(); 
baseServiceComm.connectage("ServiceCommercial"); 
System.out.println("avant GS"); 
baseServiceComm.getStatement(); 
ResultSet res = baseServiceComm.ExecuteQ("SELECT * FROM VENTES"); 

try 
{ 
System.out.println("avant while"); 
while (res.next()) 
{ 
System.out.println("while"); 
VenteBean uneVente = new VenteBean(); 
uneVente.setNVendeur(res.getInt(1)); 
uneVente.setTrimestre(res.getInt(2)); 
uneVente.setAnnee(res.getInt(3)); 
uneVente.setCAHT(res.getInt(4)); 

listeVentes.add(uneVente); 
} 
System.out.println("après boucle"); 
System.out.println("taille = " + listeVentes.size()); 
} 
catch (Exception e) 
{ 
System.out.println("Erreur"); 
} 
baseServiceComm.fermeture(); 

return listeVentes.size(); 
} 
/** 
* @ejb.interface-method 
* view-type="remote" 
**/ 
public VenteBean getVenteBean(){ 
Collection listeVentes = new HashSet(); 

odbc.ODBCConnect baseServiceComm = new ODBCConnect(); 
baseServiceComm.connectage("ServiceCommercial"); 
System.out.println("avant GS"); 
baseServiceComm.getStatement(); 
ResultSet res = baseServiceComm.ExecuteQ("SELECT * FROM VENTES"); 

try 
{ 
System.out.println("avant while"); 
while (res.next()) 
{ 
System.out.println("while"); 
VenteBean uneVente = new VenteBean(); 
uneVente.setNVendeur(res.getInt(1)); 
uneVente.setTrimestre(res.getInt(2)); 
uneVente.setAnnee(res.getInt(3)); 
uneVente.setCAHT(res.getInt(4)); 

listeVentes.add(uneVente); 
} 
System.out.println("après boucle"); 
System.out.println("taille = " + listeVentes.size()); 
} 
catch (Exception e) 
{ 
System.out.println("Erreur"); 
} 
baseServiceComm.fermeture(); 
return new VenteBean(); 
} 
} 



********************VenteBean.java*********************
 
/* 
* Created on 2 juin 2005 
* 
* TODO To change the template for this generated file go to 
* Window - Preferences - Java - Code Style - Code Templates 
*/ 
package serviceCommercial; 

import java.io.Serializable; 

/** 
* @author Administrateur 
* 
* TODO To change the template for this generated type comment go to 
* Window - Preferences - Java - Code Style - Code Templates 
*/ 
public class VenteBean implements Serializable{ 

private int nVendeur; 
private int trimestre; 
private int annee; 
private int CAHT; 

public VenteBean() 
{ 
super(); 
} 

public void setNVendeur(int _vendeur) 
{ 
nVendeur = _vendeur; 
} 

public void setTrimestre(int _trimestre) 
{ 
trimestre = _trimestre; 
} 

public void setAnnee(int _annee) 
{ 
annee = _annee; 
} 

public void setCAHT(int _CAHT) 
{ 
CAHT = _CAHT; 
} 

public int getNVendeur() 
{ 
return nVendeur; 
} 

public int getTrimestre() 
{ 
return trimestre; 
} 

public int getAnnee() 
{ 
return annee; 
} 

public int getCAHT() 
{ 
return CAHT; 
} 

}
0