JNDI datasource Tomcat 5.5

56 views
Skip to first unread message

Jesus Calzado :)

unread,
Jan 31, 2009, 10:35:37 AM1/31/09
to JavaSOS
Tengo mi aplicativo DemowebAcademico creado con webtools de eclipse,
lo primero que empece fue ver si puedo crear mi datasource del jndi y
obtener conexiones
tengo instalado el tomcat 5.5 mi web deployment descriptor es este:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" 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">
<display-name>
DemowebAcademico</display-name>
<resource-ref>
<description>Descripcion del driver a utilizar</description>
<res-ref-name>jdbc/academicodata</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<servlet>
<description>
</description>
<display-name>
ServletTestConexion</display-name>
<servlet-name>ServletTestConexion</servlet-name>
<servlet-class>
pe.edu.web.ServletTestConexion</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletTestConexion</servlet-name>
<url-pattern>/ServletTestConexion</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>

y en mi server xml agregue solamente esto:
.....
<DefaultContext reloadable="true"/>
<Context path="/DemowebAcademico" reloadable="true" docBase="E:
\workeclipse3.3\DemowebAcademico" workDir="E:
\workeclipse3.3\DemowebAcademico\work">
<Resource
name="jdbc/academicodata"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
username="sa"
password="sa"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://
127.0.0.1:1433;databaseName=Academico"
maxActive="8"
maxIdle="4"
/>

</Context>
</Host>
</Engine>
</Service>
cuando ejecuto en un servlet
try {
InitialContext ctx = new InitialContext();
Context envCtx = (Context) ctx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/academicodata");
Connection conn = ds.getConnection();
} catch( Exception e ) {e.printStackTrace();}
la traza que me boto fue:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC
driver of class '' for connect URL 'null'
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource
(BasicDataSource.java:1150)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection
(BasicDataSource.java:880)
at pe.edu.web.ServletTestConexion.doPost(ServletTestConexion.java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service
(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process
(Http11Processor.java:875)
at org.apache.coyote.http11.Http11BaseProtocol
$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:
665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket
(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt
(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run
(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(Unknown Source)
at java.sql.DriverManager.getDriver(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource
(BasicDataSource.java:1143)
... 18 more
Lo primero que vi fue si habia agregado los jar de sql server2000 y si
estan en mi classpath, en una demo cliente servidor funcionan bien, el
problema no creo que vaya por alli
en la carpeta : E:\DirectorioTomcat\Tomcat 5.5\common\lib
tambien agregue los 3 jars agregados tambien
servlet-api.jar
naming-resources.jar
naming-factory-dbcp.jar
naming-factory.jar
los 3 jar de sql server
jsp-api.jar
jasper-runtime.jar
jasper-compiler-jdt.jar
jasper-compiler.jar
commons-logging.jar
commons-el.jar
commons-collections.jar
y ninguno mas no entiendo porque sale nullpointer y quiera leer el
driver puente odbc-jdbc si estoy agregando los driver tipo IV tanto a
mi classpath como a la carpeta libs
estuve naveando he cambiado la descripcion en server xml de otra forma
pero igual
<Context path=....>
<Resource name="jdbc/academicodata" auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/test">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>sa</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://
127.0.0.1:1433;databasename=Academico</value>
</parameter>
</ResourceParams>
</Context>
pero tampoco me resulto???????

Jesus Calzado :)

unread,
Jan 31, 2009, 1:32:43 PM1/31/09
to JavaSOS
Estado leyendo me dicen que la configuracion : ResourceParams
name="..."><parameter><name>factory</name> ... no es compatible con mi
version de tomcat 5.5 asi que sigo con la primera, lo que acabo de
hacer en el server xml es <Context path="/DemowebAcademico"
reloadable="true" docBase="E:
\workeclipse3.3\DemowebAcademico" workDir="E:
\workeclipse3.3\DemowebAcademico\work" useNaming="true"(lo nuevo que
agregue)>
dentro del contexto puse esto para darme cuenta
try {
InitialContext ctx = new InitialContext();
Context envCtx = (Context) ctx.lookup("java:comp/
env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/
academicodata");
System.out.println("encontro el datasource");
Connection conn = ds.getConnection();
} catch( Exception e ) {e.printStackTrace();}
cuando ejecuto el servlet si pinta este mensaje pero me sigue botando
esta traza debajo de ella
el problema creo que es la url pero igual esta misma url la he probado
por jdbc y puedo consultar y todo lo que quiera ... alguien se topo
con esto no hay mucha documentacion sobre sql server en tomcat pero en
fin e algo que debo afrontar



On 31 ene, 10:35, "Jesus Calzado :)" <jesus.cc....@gmail.com> wrote:
> Tengo mi aplicativo DemowebAcademico creado con webtools de eclipse,
> lo primero que empece fue ver si puedo crear mi datasource del jndi y
> obtener conexiones
> tengo instalado el tomcat 5.5 mi web deployment descriptor es este:
> <?xml version="1.0" encoding="UTF-8"?>
> <web-app id="WebApp_ID" 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/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

Jesus Calzado :)

unread,
Jan 31, 2009, 6:00:23 PM1/31/09
to JavaSOS
Mi archivo server.xml (que lo he vuelto a crear porque de tanto
seteo ...)
<?xml version="1.0"?>


<Server port="8005" shutdown="SHUTDOWN">

<!-- Comment these entries out to disable JMX MBeans support used
for the
administration web application -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" /
>
<Listener
className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener
className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /
>
<Listener
className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/
>

<!-- Global JNDI resources -->
<GlobalNamingResources>


<Environment name="simpleValue" type="java.lang.Integer"
value="30"/>


<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"

factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />

</GlobalNamingResources>





<Connector
port="9500" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false" redirectPort="8443"
acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" /
>

<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/
1.3" />



<Engine name="Catalina" defaultHost="localhost">

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>

<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">

<%
HashMap map = (HashMap)session.getAttribute
("map");
map.put("key","value");
%>
<DefaultContext reloadable="true"/>
<Context path="/DemowebAcademico" reloadable="true" docBase="E:
\workeclipse3.3\DemowebAcademico" workDir="E:
\workeclipse3.3\DemowebAcademico\work" useNaming="true">
<Resource
name="jdbc/academicodata"
type="javax.sql.DataSource"
url="jdbc:microsoft:sqlserver://
127.0.0.1:1433;databaseName=Academico"
password="sa"
maxActive="60"
maxWait="5000"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
username="sa"
maxIdle="20"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="false" />

</Host>

</Engine>

</Service>

</Server>

como yo creo el problema esta en el resource, en ese bendito url ya lo
he probado asi:
url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=Academico"
url="jdbc:microsoft:sqlserver://
127.0.0.1:1433;databaseName=Academico;user=sa;password=sa"
url="jdbc:microsoft:sqlserver://127.0.0.1:1433"
acabo de descargar todos los common-*.jar y ya los puse en la carpeta
lib dentro de common en mi directorio donde esta instalado tomcat; mi
version de tomcat es 5.5.17 y cuando ejecuta la maquina virtuallo hace
con jre 1.6
y nada hasta ahora; en este grupo hay varios que ha llevado a
produccion una aplicacion sobre sql server 2000, aunque no se si
alguno lo hizo por web con tomcat como contenedor, no se si tenga que
instalar el compact para que sea compatible con la version 1.4 de jdk
ya que viendo en los META-INF de los jar de common varios estan sobre
1.4... lo intentare pero si alguien me da una manito por fa
> > xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-ap...">
> ...
>
> leer más »- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Jesus Calzado :)

unread,
Feb 1, 2009, 6:30:52 PM2/1/09
to JavaSOS
Habia olvidado agregar los jar de common-dbcp-1.1 y common-pool pero
igual me seguia botando la misma traza ; pero agregue este codigo a mi
servlet test:
BasicDataSource bds = new BasicDataSource();
bds.setDriverClassName
("com.microsoft.jdbc.sqlserver.SQLServerDriver");
bds.setUrl("jdbc:microsoft:sqlserver://localhost:
1433;DatabaseName=Academico");
bds.setUsername("sa");
bds.setPassword("sa");
Connection connection = bds.getConnection();
Statement s = connection.createStatement();
ResultSet rs = s.executeQuery("Select * from AULA where
COD_AULA='102'");
while(rs.next()){
System.out.println(rs.getString(1));
}
System.out.println("despues de crear la conexion");
System.out.println("antes de cerrar la conexion");
connection.close();
System.out.println("despues de cerrar la conexion"); y la traza para
alegria mia:

Y la respuestas es correcta
102
despues de crear la conexion
antes de cerrar la conexion;
osea que descarto el tema de urls, y drivers el problema es que no
puede leer el recurso via jndi y eso que a mi etiqueta le puse
<Context ....useNaming="true"> pero igual voy a seguir intentando a
mas tarder el lunes en la noche debe estar esto por fa ayuda hay mucha
gente de experiencia aqui yo estoy aprendiendo y poniendo todo de mi
parte :)

anmarmar

unread,
Feb 3, 2009, 1:06:37 PM2/3/09
to JavaSOS
Hola Jesus,

Yo de momento haria dos cosas, la primera es desplegar tu aplicación
dentro del tomcat como si lo pusieras en producción, es decir, si
eclipse por medio, y luego cambiar los driver de Microsoft por los de
jtds (http://jtds.sourceforge.net/). a ver que tal.


Por otro lado he visto, que has añadido la conexión en el server.xml
del tomcat, has probado a añadirle un mapeo en el META-INF\context.xml
de tu aplicativo y tirar de el, o quitar la conexión jndi del
server.xml y añadir lo a contex.xml de tu apliacación.

Un saludo.
> > Mi archivoserver.xml (que lo he vuelto a crear porque de tanto
> > seteo ...)
> > <?xml version="1.0"?>
>
> > <Serverport="8005" shutdown="SHUTDOWN">
> > produccion una aplicacion sobresqlserver2000, aunque no se si
> > alguno lo hizo por web con tomcat como contenedor, no se si tenga que
> > instalar el compact para que sea compatible con la version 1.4 de jdk
> > ya que viendo en los META-INF de los jar de common varios estan sobre
> > 1.4... lo intentare pero si alguien me da una manito por fa
>
> > On 31 ene, 13:32, "Jesus Calzado :)" <jesus.cc....@gmail.com> wrote:
>
> > > Estado leyendo me dicen que la configuracion : ResourceParams
> > > name="..."><parameter><name>factory</name> ... no es compatible con mi
> > > version de tomcat 5.5 asi que sigo con la primera, lo que acabo de
> > > hacer en elserverxml es  <Context path="/DemowebAcademico"
> > > con esto no hay mucha documentacion sobresqlserveren tomcat pero en
> > > fin e algo que debo afrontar
>
> > > On 31 ene, 10:35, "Jesus Calzado :)" <jesus.cc....@gmail.com> wrote:
>
> > > > Tengo mi aplicativo DemowebAcademico creado con webtools de eclipse,
> > > > lo primero que empece fue ver si puedo crear mi datasource del jndi y
> > > > obtener conexiones
> > > > tengo instalado el tomcat 5.5 mi web deployment descriptor es este:
>
> ...
>
> leer más »

Jesus Calzado :)

unread,
Feb 4, 2009, 3:33:22 PM2/4/09
to JavaSOS
Hola y gracias , en un tema anterior me sugirieron que para conectar
sql server 2000 con java debia cambiar mis drivers a los que tu
señalas y la verdad que no fue necesario porque segui usando los 3 que
microsoft da instale pack 4 y pude conectarme y usar mi perspectiva
database de eclipse, pero lo primero que hare sera crear ese context
dentro de META-INF que hasta ahora no lo he hecho, estuve navegando y
vi que si podian desplegar sobre tomcat 4.4 con los driver que uso
pero de todas maneras lo intentare....Te avisare que pasa
Reply all
Reply to author
Forward
0 new messages