usando o recurso de cache implícito do driver JDBC do Oracle

Tenho certeza de que alguém já fez essa pergunta, mas ainda não consegui encontrar uma resposta satisfatória para ela. Então, aqui está o meu cenário: Eu quero usar o cache de instruções implícitas do driver JDBC do Oracle (documentado aqui:http://docs.oracle.com/cd/B28359_01/java.111/b31224/stmtcach.htm#i1072607)

Eu preciso usar as conexões de um provedor de pool JDBC de terceiros (para ser mais específico, Tomcat JDBC) e não tenho escolha lá.

O problema é que a maneira de ativar o cache implícito é um processo de duas etapas (de acordo com a documentação):

1

Chame setImplicitCachingEnabled (true) na conexão ou Chame OracleDataSource.getConnection com a propriedade ImplicitCachingEnabled definida como true. Você define ImplicitCachingEnabled chamando OracleDataSource.setImplicitCachingEnabled (true)

2

Além de chamar um desses métodos, você também precisa chamar OracleConnection.setStatementCacheSize na conexão física. O argumento que você fornece é o número máximo de instruções no cache. Um argumento de 0 especifica nenhum armazenamento em cache.

Eu posso viver com 1 (de alguma forma eu posso configurar meu pool para usar oOracleDataSource como uma fábrica de conexão primária e em que eu posso definir oOracleDataSource.setImplicitCachingEnabled(true)). Mas no segundo passo, eu já preciso que a conexão esteja presente para chamar osetStatementCacheSize.

Minha pergunta é se existe alguma possibilidade de especificar no nível da fonte de dados um valor padrão para ostatementCacheSize para que eu possa sair doOracleDataSource conexões que já estão habilitadas para o cache implícito.

PS: algumas perguntas relacionadas que encontrei aqui:Driver jdbc do Oracle: cache de instruções implícitas ou setPoolable (true)?

Atualização (solução possível):

Eventualmente eu fiz isso:

Criado um pool de conexão nativo usandooracle.jdbc.pool.OracleDataSource.Criado um pool de conexão JDBC do tomcat usandoorg.apache.tomcat.jdbc.pool.DataSource que usa o nativo (veja a propriedadedataSource).Ativado via AOP um poincut para que após a execução de 'execution (public java.sql.Connection oracle.jdbc.pool.OracleDataSource.getConnection ())' eu peguei o objeto e realizei a configuração que queria.

A solução funciona muito bem; Eu estou apenas infeliz que eu tive que escrever algum clichê para fazê-lo (eu estava esperando uma propriedade direta).

questionAnswers(2)

yourAnswerToTheQuestion