Dae galera… eu achei um material sobre c3p0 e para teste criei a seguinte estrutura:
Classe que pega a conexão:
[code]public class ConnectionPool {
public static List init() throws SQLException, NamingException {
InitialContext ic = new InitialContext();
DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/pooledDS");
List lista = new ArrayList();
if (ds != null) {
Connection conn = ds.getConnection();
String sql = "select * from Documento";
PreparedStatement psta = conn.prepareStatement(sql);
ResultSet result = psta.executeQuery();
while(result.next()) {
lista.add(result.getString("NumDocumento"));
}
result.close();
psta.close();
conn.close();
}
return lista;
}
}[/code]
Meu web.xml:
<resource-ref>
<res-ref-name>jdbc/pooledDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Na pasta do tomcat nesse endereço:
C:\Arquivos de programas\Apache Software Foundation\Apache Tomcat 6.0.14\conf\Catalina\localhost
Tem o arquivo referente a minha aplicação e ele foi definido assim:
Criei um jsp que chama um servlet e executa o método da classe
ConnectionPool.init();
Quando clico no link, ele me gera o seguinte erro:
javax.naming.NamingException: Cannot create resource instance
at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:143)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
at org.apache.naming.NamingContext.lookup(NamingContext.java:793)
at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at ConnectionPool.init(ConnectionPool.java:24)
at ServletPool.processRequest(ServletPool.java:33)
at ServletPool.doGet(ServletPool.java:49)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
Procurei em alguns lugares e praticamente o meu está igual… não estou entendendo o que está acontecendo… alguém tem alguma idéia?
Cara… valeu pela dia… mas eu vou ter que pegar um sistema que já existe e alterar ele utilizando o pool… dae nesse sistema eles utilizam jdbc puro… então tenho que fazer mais ou menos do jeito que coloquei acima… abraço!!
No aguardo…
Esse exemplo que mandasse vc utiliza ele para web? Se for, então porque configurá-lo no Tomcat? Sendo que vários materias que encontrei, a configuração dele fica no context e web.xml… e pegaria ele com
DataSource ds = (DataSource) envCtx.lookup(“jdbc/”+jndiName);
Não entendi qual a diferença…
Algumas outras dúvidas… fiz um teste aqui utilizando mais ou menos o que vc passou e a cada F5 que dou na página, ele replica no número de conexões… tipo. se o minimo foi 10, a cada F5 na página, ele abria + 10, sendo que o máximo configurado era 20… tipo… quando eu definir um npumero mínimo, esse mínimo já tem que ficar aberto, certo?
Se eu abrir outra pagina e me conectar ele teria que pegar uma conexão dessas 10, dae quando chegar em mais de 10 conexões, ele iria abrir mais algumas para suprir os outros usuários… seria isso?
Dae galera… consegui fazer dessa forma… só algumas coisas que queria saber…
Queria que me ajudasse em uma configuração para controlar mais ou menos 500 usuários simultaneos… a idéia seria a seguinte… ele teria um mínimo definido e quando chegasse no máximo, ele teria que aumentar mais as conexões… teria como definir um número que ele pudesse passar do máximo?? E o que mais eu tenho que levar em consideração?? Tem alguma configuração que teria que estar no context.xml que não fiz??
Abraço!
public static Connection getConnection(String jndiName) throws SQLException, NamingException {
Connection conn = null;
try {
InitialContext ic = new InitialContext();
DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/" + jndiName);
if (ds == null) {
throw new NamingException("Datasource not found");
}
conn = ds.getConnection();
if (conn == null) {
throw new SQLException("Could not get connection");
}
} catch (SQLException e) {
throw new SQLException(e.getMessage());
} catch (NamingException e) {
throw new NamingException(e.getMessage());
}
return conn;
}
context.xml