EJB, Lomboz and collection
tomtomtomy Jun 29, 2005 3:47 AMHello everyone.
I'm using Lomboz for a few time, and I can't get through this problem. I am sure that some people know how to solve it but I didn't manage to find a solution on the net.
I'm using Eclipse 3.0.1, Lomboz 3.0.1 and JBoss 3.2.1
The problem I encounter is that when I create an EJB that contains a method that returns a complex type (i.e : a Collection), the method just doesn't work...
I am using a TestClient created thanks to one of Lomboz's wizards.
In the TestClient, I only write :
System.out.println("Before");
Collection test = myBean.getListeVentes()
System.out.println("After");And when I run the TestClient, "Before" is written, but "After" isn't.
Moreover, the EJB method I wrote seems to work since I made some System.out.println(...) that appears.
I made several tests and it appears that when the method return nothing or a simple type (int or String) it works peferctly.
Here is the code of my class that stands for the business part of my EJB :
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();
//create a connection to the DB
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;
}
}I really don't see what can be wrong...
The error I get is :
java.lang.reflect.UndeclaredThrowableException at $Proxy1.getVenteBean(Unknown Source) at serviceCommercial.Test14.testBean(Test14.java:55) at serviceCommercial.Test14.main(Test14.java:68) 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"
Last thing, here is the code of the class "VenteBean.java" I use in my EJB
/*
* 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;
}
}Does anybody know how to slove this problem?
Thanks for helping.