Melhor Performance

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">

	&lt;parameter&gt;&lt;name&gt;factory&lt;/name&gt;&lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;&lt;/parameter&gt;		
	&lt;parameter&gt;&lt;name&gt;driverClassName&lt;/name&gt;&lt;value&gt;org.postgresql.Driver&lt;/value&gt;&lt;/parameter&gt;
	&lt;parameter&gt;&lt;name&gt;url&lt;/name&gt;&lt;value&gt;jdbc&#58;postgresql&#58;//127.0.0.1&#58;5432/nomeDoBanco&lt;/value&gt;&lt;/parameter&gt;
	
	&lt;parameter&gt;&lt;name&gt;username&lt;/name&gt;&lt;value&gt;usuaio&lt;/value&gt;&lt;/parameter&gt;
	&lt;parameter&gt;&lt;name&gt;password&lt;/name&gt;&lt;value&gt;senha&lt;/value&gt;&lt;/parameter&gt;		
	&lt;parameter&gt;&lt;name&gt;maxActive&lt;/name&gt;&lt;value&gt;20&lt;/value&gt;&lt;/parameter&gt;		
	&lt;parameter&gt;&lt;name&gt;maxIdle&lt;/name&gt;&lt;value&gt;10&lt;/value&gt;&lt;/parameter&gt;				
	&lt;parameter&gt;&lt;name&gt;maxWait&lt;/name&gt;&lt;value&gt;100&lt;/value&gt;&lt;/parameter&gt;				
	
&lt;/ResourceParams&gt;[/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&#40;&#41;; Context ctx = &#40; Context &#41; context.lookup&#40; &quot;java&#58;comp/env/&quot; &#41;; dataSource = &#40; javax.sql.DataSource &#41; ctx.lookup&#40; &quot;jdbc/PostgresDS&quot; &#41;;

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… :slight_smile:

Pois é !!! :grin:

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:

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;Context
    docBase=&quot;ROOT/Votorantin/web&quot;
    privileged=&quot;true&quot;&gt;
  &lt;Resource
    name=&quot;DataSource&quot;
    type=&quot;javax.sql.DataSource&quot;
    password=&quot;XxXxXx&quot;
    driverClassName=&quot;org.postgresql.Driver&quot;
    maxIdle=&quot;2&quot;
    maxWait=&quot;5000&quot;
    username=&quot;strelow&quot;
    url=&quot;jdbc&#58;postgresql&#58;//localhost/testebd&quot;
    maxActive=&quot;4&quot;/&gt;
  &lt;WatchedResource&gt;WEB-INF/web.xml&lt;/WatchedResource&gt;
  &lt;WatchedResource&gt;WEB-INF/web.xml&lt;/WatchedResource&gt;
&lt;/Context&gt;

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.