Has anybody else ran into this?  This is a big problem for us, and I'm
catching a lot of flack since I recommended we use OJB.

It appears that OJB is generating a getCollection query even though the code
specifies a single object.

I'm not sure where to begin debugging, so any assistance would be greatly
appreciated.

-------- Original Message --------
Subject: [RC3] Works with MySql, Fails with ClassCastException with Oracle
Date: Thu, 29 May 2003 11:41:00 -0400
From: Brown, Melonie S. - Contractor <[EMAIL PROTECTED]>
Reply-To: OJB Users List <[EMAIL PROTECTED]>
Newsgroups: gmane.comp.jakarta.ojb.user

I have code that works perfectly fine in MySQL but crashes and dies against
an Oracle database.  I'm getting a java.lang.ClassCastException at
GetCollectionByQuery which doesn't make sense since I'm calling
broker.getObjectbyQuery.   Also, no SQL statements show in the spy.log file.
Suggestions would be greatly appreciated.

This is the code:
public static RcioDB retrieveRcio(RcioDB sRcio) throws DataStoreException
    {
        PersistenceBroker broker = GetAccess.getPersistenceBroker();

        try
        {
            broker.beginTransaction();

            Criteria crit = new Criteria();

            crit.addEqualTo(
                Constants.RCIO_ID,
                String.valueOf(sRcio.getRcio_ID()));

            System.out.println("criteria set");
            QueryByCriteria query = QueryFactory.newQuery(RcioDB.class,
crit);
            System.out.println("query created");

            Object theRcioToBeFetched = broker.getObjectByQuery(query);
            System.out.println("after fetch");
            System.out.println(theRcioToBeFetched.getClass());
            return (RcioDB)theRcioToBeFetched;
        }
        catch (Throwable t)
        {
            t.printStackTrace();
            throw new DataStoreException(t.toString());
        }
        finally
        {
            broker.close();
        }

This is the output from the log:

criteria set
query created
[org.apache.ojb.broker.accesslayer.ConnectionManagerImpl] INFO: Rollback was
called, do rollback on current connection
[EMAIL PROTECTED]
org.apache.ojb.broker.PersistenceBrokerException:
java.lang.ClassCastException
        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis
tenceBrokerImpl.java:1467)
        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis
tenceBrokerImpl.java:1496)
        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis
tenceBrokerImpl.java:1485)
        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getObjectByQuery(Persistenc
eBrokerImpl.java:1747)
        at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByQuery(Dele
gatingPersistenceBroker.java:271)
        at
mil.army.forscom.tsamsweb.rcio.database.RcioCRUD.retrieveRcio(RcioCRUD.java:
131)
        at
mil.army.forscom.tsamsweb.rcio.tests.InsertRciosTest.testInsertRcios(InsertR
ciosTest.java:59)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at junit.framework.TestCase.runTest(TestCase.java:154)
        at junit.framework.TestCase.runBare(TestCase.java:127)
        at junit.framework.TestResult$1.protect(TestResult.java:106)
        at junit.framework.TestResult.runProtected(TestResult.java:124)
        at junit.framework.TestResult.run(TestResult.java:109)
        at junit.framework.TestCase.run(TestCase.java:118)
        at junit.framework.TestSuite.runTest(TestSuite.java:208)
        at junit.framework.TestSuite.run(TestSuite.java:203)
        at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu
nner.java:392)
        at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.
java:276)
        at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner
.java:167)
Caused by: java.lang.ClassCastException
        at
oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement
.java:2804)
        at
oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement
.java:2905)
        at
com.p6spy.engine.spy.P6PreparedStatement.setObject(P6PreparedStatement.java:
282)
        at
org.apache.ojb.broker.platforms.PlatformDefaultImpl.setObjectForStatement(Pl
atformDefaultImpl.java:230)
        at
org.apache.ojb.broker.platforms.PlatformOracleImpl.setObjectForStatement(Pla
tformOracleImpl.java:130)
        at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatementValue(Statem
entManager.java:262)
        at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatement(StatementMa
nager.java:296)
        at
org.apache.ojb.broker.accesslayer.StatementManager.bindSelectionCriteria(Sta
tementManager.java:474)
        at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatement(StatementMa
nager.java:438)
        at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatement(StatementMa
nager.java:410)
        at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccessImpl
.java:258)
        at
org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:199)
        at
org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(RsIterator
FactoryImpl.java:95)
        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(Pers
istenceBrokerImpl.java:2311)
        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(Persis
tenceBrokerImpl.java:1657)
        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis
tenceBrokerImpl.java:1305)
        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis
tenceBrokerImpl.java:1460)

My repository.xml:
<jdbc-connection-descriptor
                platform="Oracle"
                jdbc-level="2.0"
                driver="com.p6spy.engine.spy.P6SpyDriver"               
                protocol="jdbc"
                subprotocol="Oracle"            
                dbalias="thin:@machinestuff"
                username="user"
                password="password"
                jcd-alias="default"
                default-connection="true"       
                batch-mode="false"
        useAutoCommit="1"
        ignoreAutoCommitExceptions="false"        
   >
  
   <sequence-manager 
 
className="org.apache.ojb.broker.util.sequence.SequenceManagerNextValImpl">
    </sequence-manager>
   
   </jdbc-connection-descriptor> 

The repository_user file:
<class-descriptor  class="foo.RcioDB"     table="rcio"   >
      <field-descriptor
         name="Rcio_ID"
         column="RCIO_ID"
         jdbc-type="INTEGER"
         primarykey="TRUE"
         autoincrement="false"
         indexed="true"
      />
      <field-descriptor
         name="Rcio_Short_Name"
         column="RCIO_SHORT_NAME"
         jdbc-type="VARCHAR"
         primarykey="false"
         autoincrement="false"
      />
      <field-descriptor
         name="Rcio_Desc"
         column="RCIO_DESC"
         jdbc-type="VARCHAR"
         primarykey="false"
         autoincrement="false"
      />
   </class-descriptor>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to