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