configuração datasource tomcat (resolvido)

3 respostas
M

Bom dia a todos, inicialmente agradeço a todos que ajudarem.

O meu problema é o seguinte, tenho uma configuração de data source no tomcat que está sendo utilizada pela aplicação e está funcionando, porém surgiu a necessidade de executar um comando em cada conexão aberta assim que a conexão for aberta, o comando precisa ser o primeiro a ser executado na conexão (em todas as conexões que forem abertas no pool).

Pesquisando encontrei o parâmetro “connectionInitSqls” que serviria justamente para isso, porém vendo com o DBA aqui da empresa o comando não está sendo executado, esse comando em questão iniciaria o trace da conexão e este arquivo de trace não está sendo criado. Alguém teria alguma dica para me dar de como eu poderia resolver esse problema? (com esse parâmetro ou sem ele).

Em todo caso, a configuração do meu data source encontra-se assim para os testes que estou fazendo:

<Resource name="jdbc/meuDS" 
	auth="Container" 
	type="javax.sql.DataSource" 
	maxActive="15" 
	maxIdle="15" 
	maxWait="30000" 
	username="XXXXXX" 
	password="XXXXXX" 
	driverClassName="oracle.jdbc.driver.OracleDriver" 
	url="jdbc:oracle:thin:@<ip>:<porta>:<sid>" 

	validationQuery="select 1 from dual"
	testWhileIdle="true"
	timeBetweenEvictionRunsMillis="120000"
	minEvictableIdleTimeMillis="60000"
	numTestsPerEvictionRun="15"
	connectionInitSqls="alter session set sql_trace = true"
/>

Grato a todos que responderem.

3 Respostas

F
  1. Veja na documentação do DBCP communs que existe divergência de algumas versões. Ou seja, cada versão é uma forma diferente de fazer isso. veja certinho a versão do seu tomcat e do dbcp. http://commons.apache.org/dbcp/configuration.html
    Outra coisa, esse comando é executado apenas 1 vez, na criação do datasource -

A Collection of SQL statements that will be used to initialize physical connections when they are first created. These statements are executed only once - when the configured connection factory creates the connection.

Acho que não isso que vc quer…ou é?

  1. Eu precisei fazer isso na minha solução e optei por fazer no JPA, especializando o componente DataSouceConnectionProvider - é um listener que usa para executa algo sempre que o JPA consome um conexão do seu datasource do seu container. É um recurso do Hibernate - http://www.javalobby.org/java/forums/t18406.html
M

FernandoFranzini:
1. Veja na documentação do DBCP communs que existe divergência de algumas versões. Ou seja, cada versão é uma forma diferente de fazer isso. veja certinho a versão do seu tomcat e do dbcp. http://commons.apache.org/dbcp/configuration.html
Outra coisa é executada apenas 1 vez, na criação do datasource -

A Collection of SQL statements that will be used to initialize physical connections when they are first created. These statements are executed only once - when the configured connection factory creates the connection.

Acho que não isso que vc quer…

  1. Eu precisei fazer isso na minha solução e optei por fazer no JPA, especializando o componente DataSouceConnectionProvider - é um listener que usa para executa algo sempre que o JPA consome um conexão do seu datasource do seu container. É um recurso do Hibernate - http://www.javalobby.org/java/forums/t18406.html

Fernando muito obrigado pela dica… eu vou testar aqui ao voltar do almoço e retorno quando terminar (quer tenha conseguido quer não), essa aplicação usa hibernate também.

valeu mesmo…

M

no final das contas acabei pro não proceder dessa forma (puxa vida olha eu falando bunitinho no forum…rs). No final das contas a necessidade é ativar o trace no banco de dados e foi decidido por ativá-lo no banco inteiro e não por conexão, então não precisou ser necessário.

De qualquer forma agradeço, depois eu vou ver se eu faço meu DataSourceConnectionProvider e então posto aqui, por fazer mesmo. Valeu.

Criado 17 de fevereiro de 2012
Ultima resposta 17 de fev. de 2012
Respostas 3
Participantes 2