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
>
>