Problemas no Tomcat (Pool de Conexoes)

Ae, galera,

To com um problema, aqui no tomcat relacionado a pool de conexoes, usando jndi, o que pude observer que aquela parte administrativa do tomcat e meio bugada, serio mesmo, eu adiciono la um datasource, com a url do postgres, o usuario e senha, e tudo mais, pega os jar necessarios para rodar a aplicacao, pool e o dhcp, do commons do projeto apache coloco no diretorio commons/lib do tomcat e nada, e o postgresql.jar .

porque nao funciona? adicionar um datastore pela parte administrativa do tomcat?

alguem saca?

Olá

Não consegui entender o texto da sua mensagem e nem mesmo saber qual o problema. E o que é datastore?

[]s
Luca

O que seria “nao funcionar”? da alguma mensagem de erro?

Rafael

da este problema aqui:

org.apache.jasper.JasperException: org.apache.tomcat.dbcp.dbcp.BasicDataSource

Get Connection Failed! Cannot create JDBC driver of class ‘’ for connect URL ‘null’

da esse erro!

Olá

Continuo sem saber o que você fez, como você fez, porque você acha bugado (qual o bug?) e o que significa o tal de datastore.

Dê uma mínima chance a alguém que saiba ajuda-lo e até agora nem um mago conseguiria isto.

[]s
Luca

Tudo bom luca,

problema meu e o seguinte,

Estou querendo configurar um pool de conexoes, no tomcat, certo utilizando o driver do postgresql.jar.
Vamos, la, DataStore e um meio que voce, tem de configurar um pool de conexoes, no tomcat, se voce entrar na parte administrativa do tomcat, voce vai ver, data sources, la tem um jndi, que voce configura. So que o seguinte, voce tem dois meios penso eu de configurar um e editando o arquivo server.xml e o web.xml dentro da pasta conf do tomcat, ou adicionando um jndi pela parte de administracao do tomcat, so que na administracao do tomcat eu adicionei e nao funciou, comeceu a lancar essas excecoes que eu colei nos posts anteriores, porque que nao funciona? sendo que eu peguei os jar necessarios para rodar um pool de conexoes, no tomcat, sao dois jar, dbcp e o pool e o driver do sgbd(postgres) que coloquei dentro do lib, dentro da pasta do conteiner, agora voce entendeu?

Olá,

Você configurou o seu contexto com o Use Naming = true?

Até mais!

Olá

Ainda não entendi exatamente o que vc fez pq vc disse mas não mostrou e muitas coisas podem estar erradas. Para não ficar aqui especulando vou ressaltar que vc precisa configurar tanto no server.xml como no web.xml (não são 2 meios). Siga exatamente como os exemplos da documentação que deve dar certo.

Uma outra alternativa é usar BeanFactory.

[]s
Luca

Coloquei isso no server.xml

antes do fechamento da tag </hosts>

&lt;Context path="" reloadable="true" docBase="" debug="0"&gt;              
        &lt;Resource name="jdbc/postgres" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
                username = ".."
                password = ".." 
                driverClassName = "org.postgresql.Driver" 
                url = "jdbc:postgresql://localhost:5432/xxxx"
                maxWait="1000" removeAbandoned="true"
                maxActive="100" maxIdle="30"
                removeAbandonedTimeout="60" logAbandoned="true"/&gt;        
     &lt;/Context&gt; 

sendo que os jar ja estao dentro do container, na pasta lib correto? agora eu preciso especificar no web-xml da aplicacao que eu to rodando ou no web.xml que esta situando dentro da pasta conf do tomcat?


&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4"&gt;
&lt;web-app&gt;
  &lt;description&gt;Postgres Connection Pooling Test&lt;/description&gt;
  &lt;resource-ref&gt;
      &lt;description&gt;DB Connection&lt;/description&gt;
      &lt;res-ref-name&gt;jdbc/postgres&lt;/res-ref-name&gt;
      &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;
      &lt;res-auth&gt;Container&lt;/res-auth&gt;
  &lt;/resource-ref&gt;
&lt;/web-app&gt;

nao esta tudo certo? ou eu preciso configurar algo a mais?

e para conectar eu nao faco isso daki?

Connection conn = null;
     try {
            Context initCtx = new InitialContext();
            DataSource ds =(DataSource)initCtx.lookup("java:comp/env/jdbc/postgres");
            // ou
            // Context envContext = (Context)initCtx.lookup("java:comp/env");
            // DataSource ds = (DataSource) envContext.lookup("jdbc/postgres");
            try {
                conn = ds.getConnection();
            } catch (SQLException e1) {
                System.out.println("ERRO: Nao conseguiu conectar");
            }
        } catch (NamingException e) {
            System.out.println("Falha ao conectar");
        }
}

So que mesmo assim ta dando aqueles erros,

agora, para que existe, na parte administrativa, do tomca o data source, usando jndi, sendo que nao funciona, alguem ja fez dos dois modos e funcionou ?? O que eu estou fazendo de errado?

o que ta errado? a versao do tomcat e a 5.5.7

Olá

O jar do driver vc colocou em $CATALINA_HOME/common/lib? ou no lib dentro de WEB-INF?

Tente usar BeanFactory. Crie um Bean com os getters e setters das propriedades que deseja ler. No meu exemplo chamei de DataSourceBean. Coloque em algum lugar inicial (exemplo: contextInitialized(ServletContextEvent event) de um ContextListener) um trecho mais ou menos assim:

[code]. . .
DataSourceBean bean = null;

    try {
    	Context initCtx = new InitialContext();
        Context envCtx = (Context) initCtx.lookup("java:comp/env");
        bean = (DataSourceBean) envCtx.lookup("bean/DataSourceBeanFactory");
    
    } catch (Exception e) {
    	Log.error(e);
        e.printStackTrace();
    }

. . .[/code]

No server.xml coloque um trecho mais ou menos assim:

[code]. . .
<Context path="/seu_contexto"
docBase=“d:\yyy\xxx”
workDir=“d:\yyy\work”
reloadable=“true”
useNaming=“true”
debug=“5”>

&lt;Resource name="bean/DataSourceBeanFactory" 
	auth="Container"
	type="seupacote.DataSourceBean"
	description="DataSource qq nome"
/&gt;

        &lt;ResourceParams name="bean/DataSourceBeanFactory"&gt;
           &lt;parameter&gt;
	  &lt;name&gt;factory&lt;/name&gt; 
	  &lt;value&gt;org.apache.naming.factory.BeanFactory&lt;/value&gt;
       &lt;/parameter&gt;

         &lt;parameter&gt;
            &lt;name&gt;driverClass&lt;/name&gt;
            &lt;value&gt;qqDriver&lt;/value&gt;
          &lt;/parameter&gt;

          &lt;parameter&gt;
            &lt;name&gt;user&lt;/name&gt;
            &lt;value&gt;xxxx&lt;/value&gt;
          &lt;/parameter&gt;

          &lt;parameter&gt;
            &lt;name&gt;password&lt;/name&gt;
            &lt;value&gt;*****&lt;/value&gt;
          &lt;/parameter&gt;

          &lt;parameter&gt;
            &lt;name&gt;URL&lt;/name&gt;
            &lt;value&gt;jdbc:urldodriver:@192.168.x.yyy:zzzz:wwwwww&lt;/value&gt;
          &lt;/parameter&gt;

          &lt;parameter&gt;
            &lt;name&gt;maxPoolSize&lt;/name&gt;
            &lt;value&gt;15&lt;/value&gt;
          &lt;/parameter&gt;

          &lt;parameter&gt;
            &lt;name&gt;minPoolSize&lt;/name&gt;
            &lt;value&gt;3&lt;/value&gt;
          &lt;/parameter&gt;

        &lt;/ResourceParams&gt;
    &lt;/Context&gt;

. . .[/code]

No web.xml vai algo assim:. . . &lt;resource-ref&gt; &lt;description&gt;qq descricao&lt;/description&gt; &lt;res-ref-name&gt;bean/DataSourceBeanFactory&lt;/res-ref-name&gt; &lt;res-type&gt;seupacote.DataSourceBean&lt;/res-type&gt; &lt;res-auth&gt;Container&lt;/res-auth&gt; &lt;/resource-ref&gt; . . .

Eu prefiro trabalhar com BeanFactory para poder incluir qualquer tipo de propriedade e não apenas aquelas que o Tomcat previu.

[]s
Luca

nao, kara eu quero saber o porque que nao ta funcionando do jeito que estou fazendo, alguem ae saka?

Ola,

Achei estranho os atributos path e docBase da tag Context do seu.xml estarem em branco. Até onde eu sei, eles deveriam ter o caminho relativo para a aplicação (ex: /teste) e o caminho absoluto no filesystem (ex: /home/tomcat/webapps/teste ou apenas teste se estiver dentro do webapps) respectivamente.
Porém, eu uso a versão do tomcat que eu uso é a 5.0.28. Talvez algo tenha mudado.
Respondendo suas outras perguntas, já consegui criar datasources de ambas as formas, muito embora tenha encontrado alguns problemas em algumas ocasiões.
O web.xml que vc tem que configurar é aquele dentro de sua aplicação.
Aqui vai, um .xml que esta funcionando, lembrando que a versão utilizada é a 5.0.28

<?xml version='1.0' encoding='utf-8'?> url jdbc:mysql://localhost:3306/bbbb?autoReconnect=true password xxx maxActive 50 maxWait 5000 driverClassName org.gjt.mm.mysql.Driver username uuuu maxIdle 100

fcanjos,

tem alguma ordem especifica para inserir esse xml dentro do web.xml?
e antes da tag </hosts>

?

manda um exemplo ae, do web.xml seu!

Esse xml que mandei antes nao deve ficar no seu web.xml.
o codigo do web.xml que vc mandou antes esta correto.
esse xml deve ficar num arquivo de nome seu_contexo.xml dentro do $CATALINA_HOME/conf/Catalina/localhost/
Ele é criado automaticamente toda vez que vc cria um contexto.
Tira o que vc colocou no server.xml.

no tomcat 5.0.28 funciona, no tomcat 5.5.7 faço o mesmo processo e nao funciona… sera porque?

:oops:

eu ainda nao usei o tomcat 5.5.7 mas ja li que a sintaxe da tag resource mudou. Dá uma olhada na documentação.
http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jndi-resources-howto.html

kara muito estranho eu fiz o mesmo processo que voce falou no linux e tudo funcionou , agora eu estou fazendo no windows, e nada funciona continua dando aquele erro. sera porque?

no tomcat para windows na pasta work nao veio o a pasta Catalina/localhost eu criei ela na mao

assim, Catalina/localhost/Aplicacao correto? e mesmo assim nao funciona.

sera porque?