Dúvida com DataSource Tomcat

5 respostas
eduardo_lopes

Galera, to com um problema aqui, configurei um ConnectionPool no server.xml do tomcat dessa forma:

<Context
       		path="/Aplicacao"
       		docBase="Aplicacao">
       		<Resource
       			name="jdbc/aliasConexao"
       			auth="Container"
       			type="javax.sql.DataSource"
       			driverClassName="oracle.jdbc.driver.OracleDriver"
       			url="jdbc:oracle:thin:@//servidor:porta/aliasBanco"
       			username="usuarioBanco"
       			password="SenhaBanco"
       			maxActive="30"
       			maxIdle="10"
       			maxWait="-1"/>
	</Context>

Estou usando JDBC puro, nada de hibernate nessa app, daí criei uma classe abstrata chamada Connector que tem o método:

public static Connection getConnection(){
        
            Context initContext;        
            try {
                
                initContext = new InitialContext();
                Context envContext  = (Context)initContext.lookup("java:/comp/env");
                DataSource ds = (DataSource)envContext.lookup("jdbc/aliasBanco");
                conn = ds.getConnection();            
    
            } catch (NamingException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
                 
        return conn;
    }

Daí cada servlet resgata o objeto Connection através desta classe.
Até aí blza, não sei se é a melhor implementação, mas tudo bem, o que tá ocorrendo é que cada chamada ao servlet cria uma sessão no banco de dados oracle, a pergunta é, se eu estou utilizando o DataSource do Tomcat ele não deveria resgatar sempre a mesma conexão? ou será que eu tô bem por fora do assunto e fazendo “caca”? :?

[]'s

Eduardo

5 Respostas

jgbt

se vc cria um pool de conexões, espera que seja mais de uma e que o conteiner gerencie isso.

[]'s

eduardo_lopes

verdade, mas essas sessões nunca expiram?

jgbt

o container vai saber a hora de fechar a conexão, ou pelo menos deve saber…hehe!!

[]'s

eduardo_lopes

nossa, aí que dá medo!

eu achava q o container não ficava criando conexões a vontade e sim utilizava-se dos recursos da conexão criada e se necessário criaria outra… vou ter que rever algumas coisas…

T

Normalmente pools de conexões funcionam assim: as conexões são emprestadas de um pool, e quando você acabar de usar, você deve devolvê-las (fechando-as com close; é igual a livros da biblioteca, eles não vão sozinhos para lá de volta. Na verdade até existe o tal do “finalize”, mas é o correspondente à sua mãe ou esposa ficarem cheios de tantos livros que você pega na biblioteca e não devolve, e acabarem indo devolver todos eles de uma vez só. )

Você nunca nunca nunca deve esquecer-se de fechar a conexão com close() em seu aplicativo (use finally se necessário). É que você sempre tem de devolver o recurso; ele não fica disponível sozinho.

O “connection pool” tem o compromisso de deixar algumas conexões já abertas, mas não muitas; se passar algum tempo, deve fechar algumas.

Criado 25 de fevereiro de 2005
Ultima resposta 25 de fev. de 2005
Respostas 5
Participantes 3