Hi Edward any object passed between JVMs over network has to be "serializable". Since resultset does not implement java.io.Serializable, you cannot pass it around from your EJB to the servlet. What you need to do is read the data from the resultset object on the EJB side, and pack inside some object which implements Serializable; this could be a ready object from the Java API like a String array or a arraylist of hashtables, or a custom made class which implements Serializable interface. Then pass it back to the servlet from inside the EJB.
Hope this helps Sanjeev -----Original Message----- From: Edward [mailto:[EMAIL PROTECTED]] Sent: Saturday, June 01, 2002 1:33 PM To: [EMAIL PROTECTED] Subject: Why I got java.rmi.MarshalException error Importance: High I want to get ResultSet by search data from Oracle DB,my steps are follows:first I visit Servlet with IE,then call EJB from Servlet,at last search data from Oracle through EJB.But I got many errors, //Servlet file which named "GetUserIdentity.java" public class GetUserIdentity extends HttpServlet { public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { try { Properties prop=new Properties(); prop.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFact ory"); prop.put(Context.PROVIDER_URL,"t3://192.168.39.152:7001"); Context ctx=new InitialContext(prop); Object objref=ctx.lookup("CheckPassword"); CheckPasswordHome home=(CheckPasswordHome)javax.rmi.PortableRemoteObject. narrow( objref,CheckPasswordHome.class); CheckPassword ss=home.create(); ResultSet message; message=ss.TableInfo(); ... } catch(Exception e) { e.printStackTrace(); } } } //EJB file which named "CheckPassword.java" package loginEJB; import java.rmi.RemoteException; import java.sql.ResultSet; import java.util.Enumeration; import java.util.Properties; public interface CheckPassword extends javax.ejb.EJBObject { ResultSet TableInfo() throws java.rmi.RemoteException; } //The file "CheckPasswordEJB.java" import java.sql.Statement; import java.sql.ResultSet; import java.util.Enumeration; import java.util.Properties; public class CheckPasswordEJB implements javax.ejb.SessionBean { public void ejbCreate() { System.out.println("ejbCreate() called"); } ... public ResultSet TableInfo() throws java.rmi.RemoteException { String driverClass="oracle.jdbc.driver.OracleDriver"; String url="jdbc:oracle:thin:@as_server:1526:db817"; Connection connection; try { // Oracle Client - Server Thin Driver Class.forName(driverClass); } catch(ClassNotFoundException e) { e.printStackTrace(); } try { connection=DriverManager.getConnection(url,"eino","eino"); Statement stmt=connection.createStatement(); stmt.executeQuery("select * from table_info_tbl"); ResultSet rs=stmt.getResultSet(); return rs; } catch(SQLException e) { e.printStackTrace(); return null; } } } When I visit EJB,I got errors: Starting service Tomcat-Standalone Apache Tomcat/4.0.1 Starting service Tomcat-Apache Apache Tomcat/4.0.1 java.rmi.MarshalException: error marshalling return; nested exception is: java.io.NotSerializableException: oracle.jdbc.driver.OracleResultSetImpl Start server side stack trace: java.rmi.MarshalException: error marshalling return; nested exception is: java.io.NotSerializableException: oracle.jdbc.driver.OracleResultSetImpl java.io.NotSerializableException: oracle.jdbc.driver.OracleResultSetImpl at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1148) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:366) at weblogic.common.internal.ChunkedObjectOutputStream.writeObject(Chunke dObjectOutputStream.java:102) at weblogic.common.internal.ChunkedObjectOutputStream.writeObject(Chunke dObjectOutputStream.java:108) at loginEJB.CheckPasswordEJB_28r6w3_EOImpl_WLSkel.invoke(Unknown Source) at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:296) at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerR ef.java:93) at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.jav a:265) at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest .java:22) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120) End server side stack trace ; nested exception is: java.io.NotSerializableException: oracle.jdbc.driver.OracleResultSetImpl Start server side stack trace: java.io.NotSerializableException: oracle.jdbc.driver.OracleResultSetImpl at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1148) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:366) at weblogic.common.internal.ChunkedObjectOutputStream.writeObject(Chunke dObjectOutputStream.java:102) at weblogic.common.internal.ChunkedObjectOutputStream.writeObject(Chunke dObjectOutputStream.java:108) at loginEJB.CheckPasswordEJB_28r6w3_EOImpl_WLSkel.invoke(Unknown Source) at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:296) at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerR ef.java:93) at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.jav a:265) at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest .java:22) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120) End server side stack trace java.io.NotSerializableException: oracle.jdbc.driver.OracleResultSetImpl Start server side stack trace: java.io.NotSerializableException: oracle.jdbc.driver.OracleResultSetImpl at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1148) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:366) at weblogic.common.internal.ChunkedObjectOutputStream.writeObject(Chunke dObjectOutputStream.java:102) at weblogic.common.internal.ChunkedObjectOutputStream.writeObject(Chunke dObjectOutputStream.java:108) at loginEJB.CheckPasswordEJB_28r6w3_EOImpl_WLSkel.invoke(Unknown Source) at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:296) at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerR ef.java:93) at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.jav a:265) at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest .java:22) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120) End server side stack trace <<no stack trace available>> I don't know why my program is error. Any idea will be appreciated! How to correct ? Edward ___________________________________________________________________________ To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff SERVLET-INTEREST". Archives: http://archives.java.sun.com/archives/servlet-interest.html Resources: http://java.sun.com/products/servlet/external-resources.html LISTSERV Help: http://www.lsoft.com/manuals/user/user.html ___________________________________________________________________________ To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff SERVLET-INTEREST". Archives: http://archives.java.sun.com/archives/servlet-interest.html Resources: http://java.sun.com/products/servlet/external-resources.html LISTSERV Help: http://www.lsoft.com/manuals/user/user.html
