Hi,
   i too have just struck this problem. It only seems to happen when i
have already loaded the super class of the object, if only loading the
sub-class all is ok.

db

--- Neil Aggarwal <[EMAIL PROTECTED]> wrote:
> Hello:
> 
> When I try to load a subclass object in my transaction, I get a
> persistence
> exception.
> I wrote a simple test case that illustrates it.  It is contrived but
> it is
> doing the same
> thing my app is doing.
> 
> Here is the exception I get:
> org.exolab.castor.jdo.PersistenceException: Requested to load/fetch
> an
> object of type persistent.Administrator, where persistent storage
> returned
> an object of type class persistent.Subscriber
>       at
>
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:62
> 2)
>       at
> org.exolab.castor.persist.QueryResults.fetch(QueryResults.java:229)
>       at
>
org.exolab.castor.jdo.engine.OQLQueryImpl$OQLEnumeration.hasMore(OQLQueryImp
> l.java:641)
>       at
>
org.exolab.castor.jdo.engine.OQLQueryImpl$OQLEnumeration.hasMore(OQLQueryImp
> l.java:624)
>       at action.SubclassTest.doGet(SubclassTest.java:30)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>       at
>
org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java
> :466)
>       at
>
org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:180)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>       at
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
> FilterChain.java:247)
>       at
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
> ain.java:193)
>       at
>
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
> va:260)
>       at
>
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
> eNext(StandardPipeline.java:643)
>       at
>
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
>       at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>       at
>
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
> va:191)
>       at
>
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
> eNext(StandardPipeline.java:643)
>       at
>
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
>       at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>       at
>
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
>       at
>
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180
> )
>       at
>
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
> eNext(StandardPipeline.java:643)
>       at
>
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.
> java:170)
>       at
>
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
> eNext(StandardPipeline.java:641)
>       at
>
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172
> )
>       at
>
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
> eNext(StandardPipeline.java:641)
>       at
>
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
>       at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>       at
>
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
> :174)
>       at
>
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
> eNext(StandardPipeline.java:643)
>       at
>
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
>       at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>       at
> org.apache.catalina.connector.warp.WarpRequestHandler.handle(Unknown
> Source)
>       at org.apache.catalina.connector.warp.WarpConnection.run(Unknown
> Source)
>       at java.lang.Thread.run(Thread.java:536)
> 
> You can see it for yourself here:
>       http://dev.jammconsulting.com/castorTest/servlet/action.SubclassTest
> 
> I am using Castor 0.9.4.3 on Tomcat 4.1.8 with MySql 3.23.55, Apache
> 2.0.44
> and RedHat Linux 8.0.
> 
> Here is my test code:
> package action;
> 
> import java.io.*;
> import java.net.*;
> import javax.servlet.*;
> import javax.servlet.http.*;
> import org.exolab.castor.jdo.*;
> import persistent.*;
> import util.*;
> 
> public class SubclassTest extends HttpServlet {
>   protected void doGet(HttpServletRequest req, HttpServletResponse
> res)
>   throws ServletException, IOException {
>     res.setContentType("text/html");
>     PrintWriter writer = res.getWriter();
>     try {
>       Database db = DbUtil.getDatabase();
>       OQLQuery query = db.getOQLQuery("select s from
> "+Subscriber.class.getName()+" s where s.emailAddress = $1" );
>       query.bind("[EMAIL PROTECTED]");
>       QueryResults results = query.execute();
>       if( results.hasMore() ) {
>         Subscriber subscriber = (Subscriber) results.next();
>         writer.println( "<P>Found subscriber:
> "+subscriber.getEmailAddress() );
>       }
> 
>       query = db.getOQLQuery("select a from
> "+Administrator.class.getName()+" a where a.emailAddress = $1 and
> a.password
> = $2" );
>       query.bind("[EMAIL PROTECTED]");
>       query.bind("test");
>       results = query.execute();
>       if( results.hasMore() ) {
>         Administrator administrator = (Administrator) results.next();
>         writer.println( "<P>Found administrator:
> "+administrator.getEmailAddress()+" with password:
> "+administrator.getPassword() );
>       }
>       db.commit();
>       db.close();
> 
>     } catch( Exception e ) {
>       writer.println( "Caught exception: "+e );
>       writer.println( "<PRE>" );
>       e.printStackTrace(writer);
>       writer.println( "</PRE>" );
>     } finally {
>       writer.close();
>     }
>   }
> }
> 
> The code that loads the database is here:
> package util;
> 
> import java.net.*;
> import org.exolab.castor.jdo.*;
> import org.exolab.castor.mapping.*;
> 
> public class DbUtil {
>   private static JDO jdo = null;
> 
>   public static synchronized Database getDatabase()
>   throws Exception {
>     if( jdo == null ) {
>       jdo = new JDO();
>       jdo.setDatabaseName("castorTest");
>       ClassLoader loader = DbUtil.class.getClassLoader();
>       URL url = loader.getResource("database.xml");
>       jdo.loadConfiguration(url.toString());
>     }
>     Database db = jdo.getDatabase();
>     db.begin();
>     return db;
>   }
> }
> 
> Here is the Subscriber class:
> package persistent;
> 
> import java.util.*;
> 
> public class Subscriber {
>   private int id;
>   private String emailAddress;
> 
> 
=== message truncated ===


__________________________________________________
Do you Yahoo!?
Yahoo! Shopping - Send Flowers for Valentine's Day
http://shopping.yahoo.com

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to