Uma das operações que mais consomem tempo em aplicações JavaEE é a de estabelecer conexão com o banco de dados. Os servidores de aplicação possuem recursos de caching e pooling de conexões para minimizar o overhead causado por este tipo de tarefa.
No OC4J este mecanismo esta relacionado com o tipo de datasource utilizado pela aplicação. Os tipos de datasource suportados pelo application server são:
É gerenciado pelo application server e pode ser utilizado através da interface java.sql.DataSource, que atua como um wrapper para um driver JDBC ou para o datasource. Por sua vez, os componentes JavaEE acessam estes datasources via JNDI que faz o mapeamento com o wrapper em questão.
Para este tipo de datasource, o OC4J provê uma infra-estrutura com gerenciamento de controle transacional, cache e pool de conexões, configuração dinâmica via JMX além de tratamento de erros.
Este tipo também é utilizado através da interface java.sql.DataSource, no entanto são implementados pelo respectivo driver JDB. Desta maneira este tipo de datasource não são gerenciados pelo OC4J.
Configurar o connection caching no OC4J é relativamente simples, pois isto é feito de forma declarativa diretamente no arquivo data-sources.xml. Este arquivo pode ser encontrado na pasta config da instância do OC4J.
| Atributo |
Descrição |
Default |
| name |
(Requerido) Nome do pool de conexões. Deve ser único |
n/a |
| min-connections |
o número mínimo de conexões abertas que o pool deverá manter |
0 |
| max-connections |
número máximo de conexões que o pool deverá manter. Se um valor menor ou igual a zero for setado indicará que não existe um número máximo de conexões e sempre que necessário uma nova conexão será criada. |
0 |
| initial-limit |
indica a quantidade de conexões que deverão ser criadas inicialmente no cache na inicialização ou reinicialização da instância. Esta propriedade geralmente é utilizada para reduzir custo de criação de conexões e desta forma otimizar o cache de conexões. |
0 |
| used-connection-wait-timeout |
Tempo em segundos que o application espera para que o cliente libere a conexão. Este atributo aplica-se somente quando todas as conexões definidas no max-connections estiverem em uso. Neste caso quando um cliente solicita uma conexão e todas estão sendo utilizadas o application aguarda este tempo para que uma das conexões seja liberada . |
60 |
| inactivity-timeout |
indica quanto tempo em segundos as conexões inativas permanecerão no pool. Após este intervalo tempo o application remove a conexão do pool |
60 |
| login-timeout |
tempo máximo em segundos que será aguardado para que a conexão com o banco de dados seja realizada. O valor zero indica deve ser utilizado o timeout padrão do sistema, se houver. Caso contrário, indica que não há limite de tempo |
0 |
| connection-retry-interval |
intervalo em segundos que o application aguarda antes de retornar erro na tentativa de obtenção/abertura de conexão. Este atributo é utilizado em conjunto com o atributo max-connnect-attempts |
1 |
| max-connect-attempts |
número de tentativas para retornar uma conexão. É utilizado em conjunto com o atributo connection-retry-interval |
3 |
| validate-connection |
indica se a conexão, quando obtida do pool, deverá ser validada contra a base de dados. O valor “true” indica o statement declarado no atributo validate-connection-statement será executado para verificar se a conexão é válida ou não.O valor “false” indica que o statement não será executada. É utilizado em conjunto com o atributo validate-connection-statement |
false |
| validate-connection-statement |
statement SQL que será executado para validar a conexão contra a base de dados, quando a mesma for obtida no pool. É utilizado em conjunto com o atributo validate-connection |
n/a |
| num-cached-statements |
número máximo de statements que serão armazenados em cada conexão. Qualquer valor superior a 0 faz automaticamente o cache do statement para o datasource.
|
0 |
| time-to-live-timeout |
tempo máximo, em segundos, que uma conexão ativa pode ser utilizada. Quando esse tempo limite expirar, a conexão será fechada incondicionalmente, e os handles dos statements em execução serão cancelados e a conexão será devolvida para o pool. O valor -1 indica que este recurso não está ligado.
|
-1 |
| abandoned-connection-timeout |
Utilizado somente para banco de dados Oracle. É semelhante ao inactivity-timeout, mas atua sobre uma conexão lógica. |
-1 |
| disable-server-connection-pooling |
Determina se o pool de conexões será desativado ou não. Está disponível porque alguns drivers JDBC fornecem pool de conexões e quando o driver é Oracle e utiliza pool implícito este atributo será ignorado. |
false |
| property-check-interval |
Utilizado somente para banco de dados Oracle, este intervalo de tempo, em segundos, é utilizado para determinar o limite de tempo de espera das threads do cache daemon |
900 |
| lower-threshold-limit |
Utilizado somente para banco de dados Oracle.
O menor limite do pool de conexões, seu padrão é de 20% da quantidade indicada no atributo max-connections
|
20% |
| Attributo |
Descrição |
Default |
| factory-class |
(Requerido) define o path completo da classe de implementação do connection-factory e deve ser uma implementação das interfaces java.sql.Driver, javax.sql.DataSource, javax.sql.ConnectionPoolDataSource, ou javax.sql.XADataSource. |
n/a |
| url |
(Requerido) Url de conexão com o banco de dados |
n/a |
| user |
o login do usuário utilizado para realizar a conexão com o banco de dados |
n/a |
| password |
a senha utilizada para realizar a conexão com o banco de dados |
n/a |
| login-timeout |
O tempo máximo em segundos que deverá ser esperado enquanto é realizada a conexão com o banco de dados. O valor zero indica que não há timeout para esta operação e este é o valor default. |
0 |