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]
