Wrox Home  
Search P2P Archive for: Go

  Return to Index  

servlets thread: Help


Message #1 by Edward <zhangsc@n...> on Sat, 01 Jun 2002 16:05:43 +0800
You can't return a resultSet working with rmi.  It doesn't work with no
serializable objects. It only return serializable objects.

You can try reading the recordSet into a Vector and return the vector.



> ----------
> From: 	Edward
> Reply To: 	Servlets
> Sent: 	Saturday, June 01, 2002 3:05 AM
> To: 	Servlets
> Subject: 	[servlets] Help
> Importance: 	High
> 
> Hello every:
>  
>  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.WLInitialContextFa
> ctory");
>    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
> 
> 

  Return to Index