Pool DBCP - ajuda

2 respostas
C

Pessoal estou tentando implementar o pool DBCP e não estou conseguindo.

no server.xml faço isto:
<GlobalNamingResources>

	<Resource name="jdbc/db"  auth="Container" type="javax.sql.DataSource" />
   		<ResourceParams name="jdbc/db">
   
      	<parameter><name>factory</name><value>org.apache.commons.dbcp.BasicDataSourceFactory</value></parameter>      
      	<parameter><name>driverClassName</name><value>com.mysql.jdbc.Driver</value></parameter>
      	<parameter><name>url</name><value>jdbc:mysql://10.84.227.173:3306/evento</value></parameter>
      
      	<parameter><name>username</name><value>root</value></parameter>
      	<parameter><name>password</name><value></value></parameter>      
      	<parameter><name>maxActive</name><value>20</value></parameter>      
      	<parameter><name>maxIdle</name><value>10</value></parameter>            
      	<parameter><name>maxWait</name><value>100</value></parameter>            
      
   	</ResourceParams>

  </GlobalNamingResources>
e isto num servlet
package servlt;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;
import javax.sql.*;
import java.sql.*;

public class teste extends HttpServlet {

	public void service(HttpServletRequest request,HttpServletResponse response)
			throws ServletException, IOException {
			
		InitialContext context;
		try {
			
			context = new InitialContext();

			Context ctx = (Context) context.lookup("java:comp/env/");
			DataSource dataSource = (javax.sql.DataSource)ctx.lookup("jdbc/db");
			
			try {
				Connection con = dataSource.getConnection();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		
			System.out.print("teste");
			
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
e esta me dando o seguinte erro:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780)
	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
	at servlt.teste.service(teste.java:43)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: No suitable driver
	at java.sql.DriverManager.getDriver(Unknown Source)
	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773)
	... 17 more

2 Respostas

J

Olá,

tente só assim:

context = new InitialContext();
    DataSource dataSource = (javax.sql.DataSource)context.lookup("jdbc/db");

sem aquela sua linha do meio!

Estou usando assim no OC4J e funciona legal!

Abraços!

C

Pessoal fiz funcionar só que não gostei da solução de criar o Resource no Context, com essa solução todsa vez que criar um aplicativo novo tenho que para o servidor e inserir na mão.

tentei fazer uma conexao global na GlobalNamingResources mas não consegui. me dar erro:

g.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

solução no Context

<Context path="/eventosnovo" reloadable="true" docBase="D:\projetosJava\v1\workspace\eventosnovo" workDir="D:\projetosJava\v1\workspace\eventosnovo\work"> 

<Resource name="jdbc/db" auth="Container" type="javax.sql.DataSource"
      maxActive="100" maxIdle="30" maxWait="10000"
      username="root" password="" driverClassName="com.mysql.jdbc.Driver"               url="jdbc:mysql://10.84.227.173:3306/evento?autoReconnect=true"/>
</Context>

este exemplo fiz conforme o Matheus postou no forum. esta solução que para mim seria otima não funciona.
no GlobalNamingResources

<GlobalNamingResources>
 	<Resource name="jdbc/db"  auth="Container" type="javax.sql.DataSource" />
   	<ResourceParams name="jdbc/db">
      	<parameter><name>factory</name><value>org.apache.commons.dbcp.BasicDataSourceFactory</value></parameter>      
    	<parameter><name>driverClassName</name><value>com.mysql.jdbc.Driver</value></parameter>
      	<parameter><name>url</name><value>jdbc:mysql://10.84.227.173:3306/evento?autoReconnect=true</value></parameter>
      
      	<parameter><name>username</name><value>root</value></parameter>
      	<parameter><name>password</name><value></value></parameter>      
      	<parameter><name>maxActive</name><value>20</value></parameter>      
      	<parameter><name>maxIdle</name><value>10</value></parameter>            
      	<parameter><name>maxWait</name><value>100</value></parameter>
   	</ResourceParams>

  </GlobalNamingResources>

este exemplo fiz conforme o Matheus postou no forum.
no GlobalNamingResources

<GlobalNamingResources>
 	<Resource name="jdbc/db"  auth="Container" type="javax.sql.DataSource" />
   	<ResourceParams name="jdbc/db">
      	<parameter><name>factory</name><value>org.apache.commons.dbcp.BasicDataSourceFactory</value></parameter>      
    	<parameter><name>driverClassName</name><value>com.mysql.jdbc.Driver</value></parameter>
      	<parameter><name>url</name><value>jdbc:mysql://10.84.227.173:3306/evento?autoReconnect=true</value></parameter>
      
      	<parameter><name>username</name><value>root</value></parameter>
      	<parameter><name>password</name><value></value></parameter>      
      	<parameter><name>maxActive</name><value>20</value></parameter>      
      	<parameter><name>maxIdle</name><value>10</value></parameter>            
      	<parameter><name>maxWait</name><value>100</value></parameter>
   	</ResourceParams>
  </GlobalNamingResources>

na web.xml

<resource-ref>
      <res-ref-name>jdbc/db</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
Criado 3 de agosto de 2005
Ultima resposta 4 de ago. de 2005
Respostas 2
Participantes 2