Sorry for my ignorance, I just did not expected any problems while switching the databases.

with a simple FieldConversion, now all my Integer-fields also work on Oracle.

that's for help ;-)

with best wishes Kristian



Mahler Thomas wrote:

Hi again,



-----Original Message-----
From: kristian meier [mailto:[EMAIL PROTECTED]
Sent: Thursday, June 05, 2003 11:54 AM
To: OJB Users List
Subject: Re: Possible OJB Bug with Oracle


Hi Thomas,


just to understand, if

repository.xml

is wrongly configured it shouldn't work with mysql, hsqldb as well not oracle.


I don't agree. Oracles datatype NUMBER is something completely different than the INTEGER type on MySql or Hsqldb! Oracle NUMBER expects a BigInt on the java side. If you want something different you definitely need a FielConversion.

cheers,
Thomas



basically the same file (the platform attribute changes respectivly) works fine for mysql, hsqldb, but
not for oracle !!! all java classes are the same in each case, and the underlying java class has an int !!


so I would appreciate some further hints !!


with best wishes Kristian






Mahler Thomas wrote:



Hi Kristian,

For me this does not look like a OJB bug, but as a

configuration problem.


If you have a java attribute of type String but have defined

it as INTEGER


in the repository.xml you've got a problem!

If you want to have a String attribute converted into an

Oracle Number


column you should use a FieldConversion but not change the
PlatformOracleImpl.

cheers,
thomas





-----Original Message-----
From: kristian meier [mailto:[EMAIL PROTECTED]
Sent: Thursday, June 05, 2003 9:46 AM
To: OJB Users List
Subject: Re: Possible OJB Bug with Oracle


Hello,


when I yesterday switch to oracle I came across the same exception and I investigated a bit, and
found an unexpected situation in the PlatformOracleImpl.java


in the setObjectForStatement( .... ) method the sqlType was Type.INTEGER and the value was a String class
both arguments were passed to the PlatformDefaultImpl.java


where they

were passed into the PreparedStatement.

the String class seemed to be already wrong at this place, but a simple hack does work fine for me:

*** PlatformOracleImpl.java Sun May 4 14:08:14 2003
--- src/java/org/apache/ojb/broker/platforms/PlatformOracleImpl.java Thu Jun 5 09:17:58 2003
***************
*** 126,131 ****
--- 126,138 ----
ps.setLong(index, ((Integer) value).intValue());
}
+ else if (sqlType == Types.INTEGER && value instanceof String)
+ {
+ // workaround:
+ ps.setInt(index, Integer.parseInt( (String) value ) );
+ }
else
{
+ this.logger.debug( "using type " + sqlType + " for class " + value.getClass().getName()
+ + "(" + value + ")" );
super.setObjectForStatement(ps, index, value,


sqlType);


}

maybe this also helps to find the real bug !!!

with best wishes Kristian



Brown, Melonie S. - Contractor wrote:





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




nByQuery(Persis




tenceBrokerImpl.java:1467)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectio




nByQuery(Persis




tenceBrokerImpl.java:1496)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectio




nByQuery(Persis




tenceBrokerImpl.java:1485)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getObjectByQ




uery(Persistenc




eBrokerImpl.java:1747)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObj




ectByQuery(Dele




gatingPersistenceBroker.java:271)
at
mil.army.forscom.tsamsweb.rcio.database.RcioCRUD.retrieveRcio




(RcioCRUD.java:




131)
at
mil.army.forscom.tsamsweb.rcio.tests.InsertRciosTest.testInse




rtRcios(InsertR




ciosTest.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcces




sorImpl.java:39




)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMet




hodAccessorImpl




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




ts(RemoteTestRu




nner.java:392)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(Re




moteTestRunner.




java:276)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(R




emoteTestRunner




.java:167)
Caused by: java.lang.ClassCastException
at
oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePr




eparedStatement




.java:2804)
at
oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePr




eparedStatement




.java:2905)
at
com.p6spy.engine.spy.P6PreparedStatement.setObject(P6Prepared




Statement.java:




282)
at
org.apache.ojb.broker.platforms.PlatformDefaultImpl.setObject




ForStatement(Pl




atformDefaultImpl.java:230)
at
org.apache.ojb.broker.platforms.PlatformOracleImpl.setObjectF




orStatement(Pla




tformOracleImpl.java:130)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatem




entValue(Statem




entManager.java:262)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatem




ent(StatementMa




nager.java:296)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindSelect




ionCriteria(Sta




tementManager.java:474)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatem




ent(StatementMa




nager.java:438)
at
org.apache.ojb.broker.accesslayer.StatementManager.bindStatem




ent(StatementMa




nager.java:410)
at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery




(JdbcAccessImpl




.java:258)
at
org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterato




r.java:199)




at
org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIter




ator(RsIterator




FactoryImpl.java:95)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIterato




rFromQuery(Pers




istenceBrokerImpl.java:2311)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorF




romQuery(Persis




tenceBrokerImpl.java:1657)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectio




nByQuery(Persis




tenceBrokerImpl.java:1305)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectio




nByQuery(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.SequenceManage




rNextValImpl">




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








------------------------------------------------------------


---------


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






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






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






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






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



Reply via email to