Erro ao acessar DataSource do TOMCAT .Cannot create PoolableConnection

2 respostas
P

Olá pessoal,

não estou conseguindo acessar via DataSource do apache-tomcat-5.5.26 pois estou migrando uma aplicação que rodava no tomcat 4 e estava rodando …

Por que está dando o erro abaixo…

Se alguém puder me ajudar …agradeceria…

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnection
Factory (Access denied for user 'root'@'localhost' (using password: YES))
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDat
aSource.java:1225)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSo
urce.java:880)
        at br.com.paulo.prova.locator.ServiceLocator.getConnectionByPool(Service
Locator.java:76)
        at br.com.paulo.prova.locator.ServiceLocator.getConnection(ServiceLocato
r.java:43)
        at br.com.paulo.prova.dao.ClienteDAO.listaCliente(ClienteDAO.java:23)
        at br.com.paulo.prova.action.ListaAction.execute(ListaAction.java:18)
        at br.com.paulo.prova.servlet.ServletAction.service(ServletAction.java:2
6)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:174)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:151)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:874)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.p
rocessConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpo
int.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFol
lowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:689)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (usi
ng password: YES)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:894)
        at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3808)
        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1256)
        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2032)
        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:729)
        at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:298)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java
:283)
        at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(
DriverConnectionFactory.java:38)
        at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(Pool
ableConnectionFactory.java:294)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory
(BasicDataSource.java:1247)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDat
aSource.java:1221)
        ... 21 more
Erro=java.lang.NullPointerException

---context.xml

<Resource  
       name="jdbc/local"  
       type="javax.sql.DataSource"  
       auth="Container"  
       maxActive="4"  
       maxIdle="2"  
       username="root"  
       password="paribe"
       maxWait="5000"  
       driverClassName="com.mysql.jdbc.Driver"  
       password="root"  
       url="jdbc:mysql://localhost:3306/prova"      />  
</Context>


---server.xml

<?xml version="1.0" encoding="UTF-8"?>
<Server>
  <Listener className="org.apache.catalina.core.AprLifecycleListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
  <GlobalNamingResources>
    <Environment
      name="simpleValue"
      type="java.lang.Integer"
      value="30"/>
    <Resource
      auth="Container"
      description="User database that can be updated and saved"
      name="UserDatabase"
      type="org.apache.catalina.UserDatabase"
      pathname="conf/tomcat-users.xml"
      factory="org.apache.catalina.users.MemoryUserDatabaseFactory"/>
    <Resource
      name="jdbc/local"
      auth="Container"  
      type="javax.sql.DataSource"
      password="paribe"
      driverClassName="com.mysql.jdbc.Driver"
      maxIdle="2"
      maxWait="5000"
      username="root"
      url="jdbc:mysql://localhost:3306/prova"
      maxActive="4"/>
  </GlobalNamingResources>
  <Service
      name="Catalina">
    <Connector
        port="8080"
        redirectPort="8443"
        minSpareThreads="25"
        connectionTimeout="20000"
        maxSpareThreads="75"
        maxThreads="150">
    </Connector>
    <Connector
        port="8009"
        redirectPort="8443"
        protocol="AJP/1.3">
    </Connector>
    <Engine
        defaultHost="localhost"
        name="Catalina">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
      <Host
          appBase="webapps"
          name="localhost">
        <Context
            path="/prova">
        </Context>
      </Host>
    </Engine>
  </Service>
</Server>

--service locate

public class ServiceLocator {

   
	private  static String POOLING_NAME = "java:comp/env/jdbc/local";
	//private  static String POOLING_NAME = "jdbc/local";
	private final static String DRIVER_NAME = "com.mysql.jdbc.Driver";
	private final static String DB_URL = "jdbc:mysql://localhost:3306/prova";
    private final static String DB_USER_NAME = "root";
	private final static String DB_PASSWORD = "paribe";
	private boolean usePool = true;
	

	protected DataSource ds;

	static { //Busca o datasource configurado no arquivo resources.application existente em WEB-INF\classes\resources
		ResourceBundle prop = ResourceBundle.getBundle("resources.application");
		try {
			POOLING_NAME = prop.getString("geral.datasource");
		} catch (Exception e) {
		}		
	}
	

	private static InitialContext initCtx = null;
	
	private static ServiceLocator instance = new ServiceLocator();
		public static ServiceLocator getInstance() {
		return instance;
	}
		
		  public Connection getConnection() throws Exception {
	        if (usePool) {
	        	System.out.println("pool");
	            return getConnectionByPool();
	        } else {
	        	System.out.println("manual");
	            return getConnectionManual();
	        }
	    }
		  
		  

	  public Connection getConnectionManual() throws Exception {
		  Connection conn = null;
			try {
				Class.forName(DRIVER_NAME);
				conn=DriverManager.getConnection(DB_URL,DB_USER_NAME,DB_PASSWORD);
				System.out.println("Conexão Aberta !!!");
			} catch (Exception e) {
				System.out.println("Conexão Não Aberta !!!");
				e.printStackTrace();
				throw new Exception("Erro ao obter conexao via JNDI: " ,e);
				
			}
			return conn;
	    }

    public Connection getConnectionByPool() throws Exception {
        Connection conn = null;
        DataSource ds = null;
        try {
            if (initCtx == null) {
                initCtx = new InitialContext();
            }
            System.out.println("PooLING="+POOLING_NAME);
            ds = (DataSource) initCtx.lookup(POOLING_NAME);
            conn = ds.getConnection();
            System.out.println("Conexao Aberta");
        } catch (Exception e) {
        	e.printStackTrace();
            //throw new Exception("Erro ao obter conexao via JNDI: " 
            //        + POOLING_NAME, e);
        }
        return conn;
    }
    public void setUsePool(boolean usePool) {
        this.usePool = usePool;
    }
---

2 Respostas

eduveks

Repare bem:

# org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnection

Factory (Access denied for user ‘root’@‘localhost’ (using password: YES))

E tens duas vezes a password configurada:

<Resource
name=“jdbc/local”
type=“javax.sql.DataSource”
auth=“Container”
maxActive=“4”
maxIdle=“2”
username=“root”
password=“paribe”
maxWait=“5000”
driverClassName=“com.mysql.jdbc.Driver”
password=“root”
url=“jdbc:mysql://localhost:3306/prova” />
</Context>

P

obrigado pela ajuda tinha tentado varias coisas e acabei esquecendo da dupicação agora está funcionando…

Valeu !!!1

Criado 7 de julho de 2008
Ultima resposta 8 de jul. de 2008
Respostas 2
Participantes 2