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

Reply via email to