Wrox Home  
Search P2P Archive for: Go

  Return to Index  

j2ee thread: servlet question


Message #1 by Edward <zhangsc@n...> on Sat, 01 Jun 2002 16:05:57 +0800
create a serializable object and put your info there - you cant send a
result set across rmi because it represents a live connection to the
database!!

chanoch
----- Original Message -----
From: "Edward" <zhangsc@n...>
To: "Java 2 Enterprise Edition" <j2ee@p...>
Sent: Saturday, June 01, 2002 9:05 AM
Subject: [j2ee] servlet question


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


  Return to Index