Gostaria de que alguem me desse uma boa ajuda de vcs…
Estou desenvolvendo uma aplicação usando MVC aplicando ao
padrão de projetos Command. Pra fazer conexão com o banco de dados (interbase), implementei uma classe só pra carregar um objeto BasicDataSource (tô usando o pacote
commons-dbcp-1.2.1.jar da jakarta) pra fazer um pool de conexões. Só que ao fazer a implementação, percebi
que o acesso aos modelos por parte do controlador ficou
mais lento do que antes,
quando usava a chamada direta ao driver e iniciava a
conexão com DriverManager.getConnection(url, user, password). Detalhe: as informações de driver usado e endereço do banco de dados estão em variáveis de contexto em web.xml (mas não creio que seja isso) . Pra tentar
melhorar a performance coloquei a classe no método
init do Servlet(pra ser instanciada uma só vez) e passei
ela como atributo de sessão pra poder ser vista pelo modelo. Ainda assim a chamada aos modelos continua uma carroça! Alguem tem idéia de uma implementação melhor? (Não tou usando Struts ainda; se estivesse nem estaria escrevendo…)
:???:
WagnerFull
“Feliz a nação cujo Deus é o Senhor”
a lerdeza ta no DataSource? … tu q ta implementando esse pool? pq não usa o DataSource direto das configurações do Tomcat? (se é q estas usando o Tomcat como container hehe) :roll:
A lerdeza ainda está no datasource…
Bem, como disse anteriormente, estou instanciando uma classe que carrega o dataSource(tou fazendo na mão).
O Netbeans usa o tomcat pra fazer testes, estou testando nele… Como fazer pra configurar com ele? tem algum tutorial a respeito disso?
[quote=“WagnerFull”]A lerdeza ainda está no datasource…
Bem, como disse anteriormente, estou instanciando uma classe que carrega o dataSource(tou fazendo na mão).[/quote]
A classe que contem o DataSource é um singleton ou um monostate da vida? Se vc recriar o DataSource cada vez que acessar o seu modelo, a performance será horrivel mesmo.
valeuz…
pra ti fazer um pool de conexões com o tomcat (5), faça o seguinte, edite o arquivo server.xml, em <GlobalNamingResources>, tu insere o seguinte:
[code] <Resource name="jdbc/PostgresDS" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/PostgresDS">
<parameter><name>factory</name><value>org.apache.commons.dbcp.BasicDataSourceFactory</value></parameter>
<parameter><name>driverClassName</name><value>org.postgresql.Driver</value></parameter>
<parameter><name>url</name><value>jdbc:postgresql://127.0.0.1:5432/nomeDoBanco</value></parameter>
<parameter><name>username</name><value>usuaio</value></parameter>
<parameter><name>password</name><value>senha</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>[/code]
nesse caso, estou usando uma configuração pra postgresql, altere com a sua, e no teu código, tu acha o DataSource assim:
InitialContext context = new InitialContext();
Context ctx = ( Context ) context.lookup( "java:comp/env/" );
dataSource = ( javax.sql.DataSource ) ctx.lookup( "jdbc/PostgresDS" );
lembrando, q o nome “jdbc/PostgresDS” é o mesmo em <ResourceParams name=“jdbc/PostgresDS”>, é só alterar pro q tu quiser, ai é só tu dar um dataSource.getConnection() q recebe uma conexão do pool, pra devolver, nao se esqueça de chamar close()
(jack)A classe é instanciada uma única vez pelo método init do servlet , mas é passada como parâmetro de sessão para os modelos…
Eu usei “interbase” no lugar de “jdbc/PostgresDS”
e editei o arquivo server.xml em jakarta-tomcat-5.0.19/conf .
TEntei,meu amigo Moderador… mas sinto que algo tá faltando , pois a msg que deu é essa:
Name interbase is not bound in this Context
Durante as tentativas, tentei aplicar tb ao JBoss , só que o erro foi maior ainda… Alguma ajuda pra eu? Agradeço
WagnerFull
“Não temas; de agora em diante serás pescador de homens”(Lc 5:10b)
meu amigo moderador é boa heahaeh, parece nome de filme hahahaha, bem, se quiser, pode postar ai teu xml e teu código de lookup, ou… o erro q o JBoss retorna… 
Quebrando cabeça hoje de manhã, descobri que o erro ocorria pelo fato de que a configuração de arquivo de contexto não era server.xml . O NetBeans cria um arquivo .xml com o nome da aplicação no momento de sua criação e no meu caso(sgi é o nome do contexto da aplicação) ficou assim:
C:\Documents and Settings\Administrador.netbeans\3.6\jakarta-tomcat-5.0.19_base\conf\Catalina\localhost\sgi.xml
Corrija-me se estiver errado, esse parâmetro pode ser mudado no momento de implantação do aplicativo final, mudando apenas o valor da variável CATALINA_BASE do container, não sei se apenas exportar o arquivo WAR para a pasta deploy do JBoss adianta(ainda vou testar).
A chamada no modelo ficou assim:
Context ctx = new InitialContext();
javax.sql.DataSource ds1 = (javax.sql.DataSource) ctx.lookup( “java:comp/env/jdbc/interbase” );
lembrando de importar javax.naming.*
Percebi assim , que chamadas à base de dados ficou uma “bala”, viajei!!!
WagnerFull :lol:
“Quem tem ouvidos ouça o que o Espírito diz às Igrejas”(Ap 3:22)
Assim como o Wagner eu tambem to usando NetBeans. Acho que editei o arquivo certo… Alias, eu fiz isso usando um admin que tem na página do jakarta que cria um monte de coisa, inclusive o DataSource.
Ficou assim:
<?xml version="1.0" encoding="UTF-8"?>
<Context
docBase="ROOT/Votorantin/web"
privileged="true">
<Resource
name="DataSource"
type="javax.sql.DataSource"
password="XxXxXx"
driverClassName="org.postgresql.Driver"
maxIdle="2"
maxWait="5000"
username="strelow"
url="jdbc:postgresql://localhost/testebd"
maxActive="4"/>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
Isso ta correto né? Como eu chamo no meu programa agora?
Não entendi como ele disse que chamou isso?
Outra coisa é o “maxWait”, o que é isso?
Abraços.