Pool de conexiones

75 views
Skip to first unread message

Gabriel Sivori

unread,
Feb 3, 2006, 1:53:02 PM2/3/06
to jav...@googlegroups.com
Buenas, estoy empezando con JSP, tengo myeclipse y tomcat 5.5. Necesito acceder a un SQL Server 7. Usando JDBC lo hago perfectamente. El tema es que estuve leyendo varios pdfs que sugieren usar connection pooling para aplicaciones web. Lo que hice fue crear un pool de conexiones en Tomcat. pero no puedo llamarlo desde mi aplicacion. El error que da es que no encuentra el nombre JNDI en el contexto de la aplicacion, lo cual es logico porque ese nombre pertenece al contexto del tomcat, pero no se como agregar ese contexto a mi aplicacion web en myeclipse. alguna idea?
 
pd: aclaración: esto es lo que pude entender de los pdfs que estoy leyendo, quizas estoy haciendo las cosas mal desde el vamos.
 
gracias y saludos
 
 
Gabriel Sivori
Dto. Tecnología y Sistemas
Yves Saint Laurent / Christian Lacroix.
Epoque S.A. / Futur S.A.
 

Marcos

unread,
Feb 3, 2006, 2:04:39 PM2/3/06
to jav...@googlegroups.com
Hola Gabriel, creo que tenes que crear un context en las propiedades del
proyecto por lo menos yo lo tengo haci cuando quiero probarlo con mi
tomcat local, proba buscado las opciones del tomcat en las propiedades
del proyecto, activa un checkbox donde dice is my project tomcat o algo
parecido despues abajo tenes para crear un context dentro de una caja de
texto,,,

Espero haberte ayudado...
Senatori Marcos Saludos!


Gabriel Sivori wrote:

> Buenas, estoy empezando con JSP, tengo myeclipse y tomcat 5.5.
> Necesito acceder a un SQL Server 7. Usando JDBC lo hago perfectamente.
> El tema es que estuve leyendo varios pdfs que sugieren usar connection
> pooling para aplicaciones web. Lo que hice fue crear un pool de
> conexiones en Tomcat. pero no puedo llamarlo desde mi aplicacion. El
> error que da es que no encuentra el nombre JNDI en el contexto de la
> aplicacion, lo cual es logico porque ese nombre pertenece al contexto
> del tomcat, pero no se como agregar ese contexto a mi aplicacion web
> en myeclipse. alguna idea?
>
> pd: aclaración: esto es lo que pude entender de los pdfs que estoy
> leyendo, quizas estoy haciendo las cosas mal desde el vamos.
>
> gracias y saludos
>
>

> *Gabriel Sivori*
> /Dto. Tecnología y Sistemas/
> /Yves Saint Laurent / Christian Lacroix./
> /Epoque S.A. / Futur S.A./
>


nashaccount

unread,
Feb 3, 2006, 2:08:53 PM2/3/06
to JavaSOS
Creo que sería de mucha utilidad ver el error que te arroja la
consola. podrías pegarlo?

salu2

Gabriel Sivori

unread,
Feb 3, 2006, 3:12:41 PM2/3/06
to jav...@googlegroups.com
Esta es la excepcion que da cuando ejecuto esta instrucción:
DataSource ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/difusion");

javax.naming.NoInitialContextException: Need to specify class name in
environment or system property, or as an applet parameter, or in an
application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown
Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at DBCon.DBCon(DBCon.java:17)
at TestDb.main(TestDb.java:12)


Yo cree el pool de conexiones desde la "ADMINISTRATION TOOL" de tomcat 5. Y
vi que lo que hace es agregar el recurso al archivo Server.xml
Que lo pego a continuacion (completo):

<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/difusion"
type="javax.sql.DataSource"
password=""
driverClassName="com.ddtek.jdbc.sqlserver.SQLServerDriver"
maxIdle="2"
maxWait="5000"
username="sa"

url="jdbc:datadirect:sqlserver://192.168.0.10:1433;DatabaseName=difusion"
maxActive="4"/>
</GlobalNamingResources>
<Service
name="Catalina">
<Connector
port="1010"
redirectPort="8443"
minSpareThreads="25"
connectionTimeout="60000"
connectionLinger="-1"
serverSoTimeout="0"
maxSpareThreads="75"
maxThreads="150"
tcpNoDelay="true"
maxHttpHeaderSize="8192">
</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">
</Host>
</Engine>
</Service>
</Server>

Estara bien? O sera mejor agregar el pool a manopla en SERVER.XML?

Gabriel Sivori
Dto. Tecnología y Sistemas
Yves Saint Laurent / Christian Lacroix.
Epoque S.A. / Futur S.A.

-----Mensaje original-----
De: nashaccount [mailto:nasha...@gmail.com]
Enviado el: Viernes, 03 de Febrero de 2006 04:09 p.m.
Para: JavaSOS
Asunto: [JavaSOS] Re: Pool de conexiones

Marcos

unread,
Feb 3, 2006, 3:15:38 PM2/3/06
to jav...@googlegroups.com
Gabriel Sivori wrote:

probaste en las propiedades del projecto que estes desarrollando?

Diego Campodonico

unread,
Feb 3, 2006, 3:16:18 PM2/3/06
to jav...@googlegroups.com
Configuraste el server.xml para inluir el datasource?
agregarste la referencia en el web.xml?

Tendrias que hacer esto, suponiendo que llamaste jdbc/ds a tu datasource en el web.xml tendrias que poner:
<resource-ref>
<description>DBConnection</description>
<res-ref-name>jdbc/ds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

y desde tus recursos utilizar
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/ds");
Connection conn = ds.getConnection();

espero que te sirva
saludos
diego

David Guzman

unread,
Feb 3, 2006, 3:18:45 PM2/3/06
to jav...@googlegroups.com
ya definiste ctx???

cómo lo definiste?

Yo recomiendo que le metas mano al xml sólo cuando lo conozcas realmente bien.

Gabriel Sivori

unread,
Feb 3, 2006, 3:53:12 PM2/3/06
to jav...@googlegroups.com
Me fijé en las propiedades del proyecto, pero no hay nada relacionado con
"tomcat". Tambien anduve por la opcion "myeclipse-web", pero no veo nada que
pueda referenciar al pool.

Tendre mal configurado el myeclipse?, sin embargo arranco y paro el tomcat
desde eclipse, y puedo hacer un "Deploy" de las aplicaciones tambien.

Gabriel Sivori
Dto. Tecnología y Sistemas
Yves Saint Laurent / Christian Lacroix.
Epoque S.A. / Futur S.A.

-----Mensaje original-----
De: Marcos [mailto:vifr...@gmail.com]
Enviado el: Viernes, 03 de Febrero de 2006 05:16 p.m.
Para: jav...@googlegroups.com


Asunto: [JavaSOS] Re: Pool de conexiones


Gabriel Sivori wrote:

>Esta es la excepcion que da cuando ejecuto esta instrucción:
>DataSource ds = (DataSource)
>ctx.lookup("java:/comp/env/jdbc/difusion");
>
>javax.naming.NoInitialContextException: Need to specify class name in
>environment or system property, or as an applet parameter, or in an
>application resource file: java.naming.factory.initial
> at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
> at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
> at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown

............

Marcos

unread,
Feb 3, 2006, 4:06:08 PM2/3/06
to jav...@googlegroups.com
Marcos wrote:

Hola mira encontre esto....

http://www.proactiva-calidad.com/java/jndi/jndi_server_xml.html

este es mas largo...
http://www.programacion.com/java/tutorial/jndi/

nose me ocurre que te puede estar pasando, pero fijate en el primer link
que seguro te ayuda...

Gabriel Sivori

unread,
Feb 3, 2006, 4:13:33 PM2/3/06
to jav...@googlegroups.com
este es mi web.xml dentro del directorio Workspace/Test 
 
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
 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">
<resource-ref>
<description>SQL 7 Datasource </description>
<res-ref-name>jdbc/difusion</res-ref-name>

<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
 
La llamada desde el codigo es igual :
 
  Context ctx = new InitialContext();
  DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/difusion");
  Connection conn = ds.getConnection();
 
a la tercera linea no llega, pincha en la 2da. Algo pasa porque siempre da el mismo error, ponga el nombre que ponga "difusion" ,"ds" o cualquiera.
 
 
Basta por hoy, gente buen fin de semana para todos y el lunes lo retomo con tranquilidad.
 
Gabriel Sivori
Dto. Tecnología y Sistemas
Yves Saint Laurent / Christian Lacroix.
Epoque S.A. / Futur S.A.
 


De: Diego Campodonico [mailto:dcampo...@gmail.com]
Enviado el: Viernes, 03 de Febrero de 2006 05:16 p.m.
Para: jav...@googlegroups.com
Asunto: [JavaSOS] Re: Pool de conexiones
Configuraste el server.xml para inluir el datasource?
agregarste la referencia en el web.xml?

Tendrias que hacer esto, suponiendo que llamaste jdbc/ds a tu datasource en el web.xml tendrias que poner:
<resource-ref>
<description>DBConnection</description>
<res-ref-name>jdbc/ds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

y desde tus recursos utilizar
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/ds");
Connection conn = ds.getConnection();

espero que te sirva
saludos
diego


On 2/3/06, nashaccount <nasha...@gmail.com> wrote:

Idioteque

unread,
Mar 3, 2006, 10:12:30 AM3/3/06
to jav...@googlegroups.com
te paso la forma en que lo hago yo desde las apps, si bien es un paso más, porque podrias poner directamente el nombre del DS, de esta forma si te piden cambiar el nombre del mismo por cualquier motivo solo modificas los .xml ;-)

Context initCtx = new InitialContext();
            Context envCtx = (Context) initCtx.lookup("java:comp/env");
            String dbname = (String) envCtx.lookup("DB_RESOURCE_NAME");
            ds = (DataSource) envCtx.lookup(dbname);


en el web.xml:

<resource-ref>
    <res-ref-name>jdbc/pepe</res-ref-name>

    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref> 
  <env-entry>
    <env-entry-name>DB_RESOURCE_NAME</env-entry-name>
    <env-entry-value>jdbc/pepe</env-entry-value>
    <env-entry-type>java.lang.String</env-entry-type>
  </env-entry>
Reply all
Reply to author
Forward
0 new messages