I do not use a managed environment , it's for a standalone application. 
But may be the Oracle 9i platform Impl could have some problem because the
method setStatementCacheSize is Oracle specific and the wrapper does not
implement it ?

Thierry .




-----Original Message-----
From: Dougall Squair [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, April 06, 2004 5:44 AM
To: 'OJB Users List'
Subject: RE: Oracle Driver jdbc10.1.0.2


Hi, 

Are you running within a managed environment? We seem to be getting a
similar exception 
when we use the Oracle9i platform support class, I suspect it's caused by
WebLogic wrapping 
the Oracle connection object.

Dougall


-----Original Message-----
From: Thierry Hanot [mailto:[EMAIL PROTECTED]
Sent: Monday, 5 April 2004 7:19 PM
To: [EMAIL PROTECTED]
Subject: Oracle Driver jdbc10.1.0.2


Hello All just for info. 
It does not look like bug but more like a small missing feature :) . 
 
A support of Oracle thin driver 10  does not exist in Ojb. It could be nice
to have it in Obj 1.0 because normally ( just reading the documentation ) ,
there is is a lot of performance improvement 
on those drivers.
 
Trying to use platform Oracle  with 10.1 driver work fine except for blob
and clob ( 2kb limitation ) 
Trying to use platform Oracle9i support with 10.1 driver dump this exception
:
 
Caused by: org.apache.ojb.broker.accesslayer.LookupException: Platform
dependent initialization of connection failed

at
org.apache.ojb.broker.accesslayer.ConnectionFactoryAbstractImpl.initializeJd
bcConnection(ConnectionFactoryAbstractImpl.java:157)

at
org.apache.ojb.broker.accesslayer.ConnectionFactoryAbstractImpl.newConnectio
nFromDriverManager(ConnectionFactoryAbstractImpl.java:272)

at
org.apache.ojb.broker.accesslayer.ConnectionFactoryPooledImpl$ConPoolFactory
.makeObject(ConnectionFactoryPooledImpl.java:230)

at
org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPoo
l.java:816)

at
org.apache.ojb.broker.accesslayer.ConnectionFactoryPooledImpl.getConnectionF
romPool(ConnectionFactoryPooledImpl.java:81)

... 12 more

Caused by: org.apache.ojb.broker.platforms.PlatformException: Class
org.apache.ojb.broker.platforms.PlatformOracle9iImpl can not access a member
of class oracle.jdbc.driver.PhysicalConnection with modifiers "public
synchronized"

at
org.apache.ojb.broker.platforms.PlatformOracle9iImpl.initializeJdbcConnectio
n(PlatformOracle9iImpl.java:110)

at
org.apache.ojb.broker.accesslayer.ConnectionFactoryAbstractImpl.initializeJd
bcConnection(ConnectionFactoryAbstractImpl.java:153)

... 16 more

Caused by: java.lang.IllegalAccessException: Class
org.apache.ojb.broker.platforms.PlatformOracle9iImpl can not access a member
of class oracle.jdbc.driver.PhysicalConnection with modifiers "public
synchronized"

at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:57)

at java.lang.reflect.Method.invoke(Method.java:317)

at
org.apache.ojb.broker.platforms.PlatformOracle9iImpl.initializeJdbcConnectio
n(PlatformOracle9iImpl.java:105)

... 17 more

 

For make it work replace in the initializeJdbcConnection =>

methodSetStatementCacheSize = ClassHelper.getMethod(OracleConnection.class,
"setStatementCacheSize", PARAM_TYPE_INTEGER);

methodSetImplicitCachingEnabled =
ClassHelper.getMethod(OracleConnection.class, "setImplicitCachingEnabled",
PARAM_TYPE_BOOLEAN);

It's a bit ugly because it add dependency on the Oracle driver ( may be
something like :

methodSetStatementCacheSize =
ClassHelper.getMethod(Class.forName("oracle.jdbc.OracleConnection"),
"setStatementCacheSize", PARAM_TYPE_INTEGER);

methodSetImplicitCachingEnabled =
ClassHelper.getMethod(Class.forName("oracle.jdbc.OracleConnection"),
"setImplicitCachingEnabled", PARAM_TYPE_BOOLEAN);

is more relevant ) .

 

After this it still not working due to the following exception :

[org.apache.ojb.broker.accesslayer.StatementsForClassImpl] ERROR: Platform
dependend failure

Could not set escape processing

.....

Caused by: java.sql.SQLException: Attempt to set Escape Processing after SQL
is already processed

at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)

at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)

at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227)

at oracle.jdbc.driver.OracleSql.setEscapeProcessing(OracleSql.java:343)

at
oracle.jdbc.driver.OraclePreparedStatement.setEscapeProcessing(OraclePrepare
dStatement.java:3190)

at
org.apache.ojb.broker.platforms.PlatformOracleImpl.afterStatementCreate(Plat
formOracleImpl.java:59)

 

So i did remove the afterStatementCreate which is setting the
EscapeProcessing even for prepare statement ( cf : java.sql.Statement =>
setEscapeProcessing : Note: Since prepared statements have usually been
parsed prior to making this call, disabling escape processing for
PreparedStatements objects will have no effect.  )

if(!(stmt instanceof PreparedStatement)){

super.afterStatementCreate(stmt);

}
 
After that it seems to work . 
 
 
 
 
B.R 
 
 
Thierry 
 

 

 

 


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