On Fri, Feb 6, 2015 at 9:57 AM, Jean-Louis Mateo <jean-louis.ma...@bull.net> wrote:
> Hi Dan, > > Thank you for having replied to this issue. > First of all, now it works fine but I would like to answer your > questions... > > > Not sure about this "global" attribute. I don't believe it's an > attribute of the pool. Why did you add it? > That's what I've read here > http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Resource_Definitions The "global" attribute is on the ResourceLink tag, not the Resource tag. > > > > 2.) It has no url or driver set. > Thanks. The issue was here and I should have read it more closely > about the "name" property (at the same above url): > "name: The name of the resource link to be created, > relative to the java:comp/env context." > So... > Before, in my context file > <ResourceLink name="jdbc/LocalTestDB" <-------- E R R O > R this jndi name doesn't exist > global="sharedDataSource" > type="javax.sql.DataSource"/> > > After, in my context file > <ResourceLink name="jdbc/TestDB" <----- That's the right > name > global="sharedDataSource" > type="javax.sql.DataSource"/> > > Now it works fine > > Note: In a way, you were right "global" property is no need in > <GlobalNamingResources> (server.xml) > Only "global" (from context.xml, ResourceLink) and "name" > (from server.xml, <GlobalNamingResources-Resource>) are needed and have to > match > Awesome! Glad you caught that and were able to get it working. Dan > > > You have initialSize set to 2. This should attempt to make connections > when you start Tomcat. Do you see any errors at that time? > There were no errors. At launching time, the pool is well created > with 2 connexions in LISTENING state (netstat -an) > > > This is unrelated, but don't set "path" here. The path attribute is > ignore here. The path is determined by the name of the xml file, which > just happens to be "test-app" as well. > OK. "path" is no longer set. > > > Do you have anything set in "conf/context.xml" or in your web.xml? > See the attached file > > > Best Regards > > Jean-Louis Matéo > > > -----Message d'origine----- > De : Daniel Mikusa [mailto:dmik...@pivotal.io] > Envoyé : vendredi 6 février 2015 14:06 > À : Tomcat Users List > Objet : Re: Issue when using tomcat JDBC Connection Pool with a shared > resource > > On Fri, Feb 6, 2015 at 6:27 AM, Jean-Louis Mateo < > jean-louis.ma...@bull.net> > wrote: > > > Hi, > > > > > > > > I would like to use the Tomcat JDBC Connection Pool with a shared > > resource so I’ve read : > > > > http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Standalone and > > http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Resource_L > > inks > > > > > > > > …. and tried to do the same but when I try to access to my servlet I > > get the following message: > > > > > > > > org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC > > driver of class '' for connect URL 'null' > > > > A couple odd things here... > > 1.) It's trying to use DBCP, not the jdbc connection pool. > 2.) It has no url or driver set. > > > > at > > org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(Ba > > sicDataSource.java:1452) > > > > at > > org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicData > > Source.java:1371) > > > > at > > org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSou > > rce.java:1044) > > > > at testPackage.DBTest.doGet(DBTest.java:62) > > > > at > > javax.servlet.http.HttpServlet.service(HttpServlet.java:620) > > > > at > > javax.servlet.http.HttpServlet.service(HttpServlet.java:727) > > > > at > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli > > cationFilterChain.java:303) > > > > at > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi > > lterChain.java:208) > > > > at > > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) > > > > at > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli > > cationFilterChain.java:241) > > > > at > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi > > lterChain.java:208) > > > > at > > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa > > lve.java:220) > > > > at > > org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa > > lve.java:122) > > > > at > > org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticat > > orBase.java:612) > > > > at > > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja > > va:170) > > > > at > > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja > > va:103) > > > > at > > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:9 > > 50) > > > > at > > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValv > > e.java:116) > > > > at > > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java > > :421) > > > > at > > org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp1 > > 1Processor.java:1070) > > > > at > > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(A > > bstractProtocol.java:611) > > > > at > > org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint > > .java:316) > > > > at > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.j > > ava:1145) > > > > at > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor. > > java:615) > > > > at > > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThr > > ead.java:61) > > > > at java.lang.Thread.run(Thread.java:745) > > > > Caused by: java.lang.NullPointerException > > > > at > > sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:524) > > > > at > > sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:493) > > > > at > > sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307) > > > > at > > java.sql.DriverManager.getDriver(DriverManager.java:262) > > > > at > > org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(Ba > > sicDataSource.java:1437) > > > > ... 25 more > > > > -------------------- > > > > > > > > Environment : > > > > Win 7 > > > > Java - jdk 1.7.0.65 > > > > Tomcat - 7.0.57 > > > > MySQL - 5.1.18 > > > > > > > > -------------------- > > > > > > > > Tomcat service properties: > > > > -Dcatalina.home=Y:\Programs\Tomcat\Tomcat7 > > > > -Dcatalina.base=Y:\00-Prod\data\catalina > > > > -Djava.endorsed.dirs=Y:\Programs\Tomcat\Tomcat7\endorsed > > > > -Djava.io.tmpdir=Y:\Programs\Tomcat\Tomcat7\temp > > > > -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager > > > > > > -Djava.util.logging.config.file=Y:\Programs\Tomcat\Tomcat7\conf\loggin > > g.properties > > > > -Dcom.sun.management.jmxremote > > > > -Dcom.sun.management.jmxremote.port=8099 > > > > -Dcom.sun.management.jmxremote.ssl=false > > > > -Dcom.sun.management.jmxremote.authenticate=false > > > > -XX:MaxPermSize=512m > > > > > > > > -------------------- > > > > > > > > CATALINA_HOME/lib contents > > > > … > > > > tomcat-dbcp.jar > > > > tomcat-jdbc.jar > > > > … > > > > > > > > -------------------- > > > > > > > > CATALINA_BASE/lib contents: > > > > mysql-connector-java-5.1.18-bin.jar > > > > -------------------- > > > > > > > > CATALINA_BASE/conf/server.xml > > > > ... > > > > … > > > > <GlobalNamingResources> > > > > … > > > > What else do you have defined in this block? > > > > --> > > > > <Resource name="sharedDataSource" > > > > global="sharedDataSource" > > > > Not sure about this "global" attribute. I don't believe it's an attribute > of the pool. Why did you add it? > > > > auth="Container" > > > > > type="javax.sql.DataSource" > > > > > > factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" > > > > > > driverClassName="com.mysql.jdbc.Driver" > > > > initialSize="2" > > > > You have initialSize set to 2. This should attempt to make connections > when you start Tomcat. Do you see any errors at that time? > > > > minIdle="4" maxActive="8" maxIdle="4" maxWait="10000" > > > > username="javauser" > > password="javadude" > > > > > > url="jdbc:mysql://localhost:3306/javatest"/> > > > > > > > > </GlobalNamingResources> > > > > > > > > … > > > > ... > > > > -------------------- > > > > > > > > CATALINA_BASE/conf/Catalina/localhost/test-app.xml > > > > > > > > > > > > <?xml version='1.0' encoding='utf-8'?> > > > > <Context path="/test-app" privileged="true"> > > > > This is unrelated, but don't set "path" here. The path attribute is > ignore here. The path is determined by the name of the xml file, which > just happens to be "test-app" as well. > > Also what else do you have define in this file? > > > > ... > > > > ... > > > > <!-- url: The JDBC connection url for connecting to your MySQL > > database. --> > > > > <ResourceLink name="jdbc/LocalTestDB" > > > > global="sharedDataSource" > > > > > > type="javax.sql.DataSource"/> > > > > > > > > ... > > > > ... > > > > </Context> > > > > -------------------- > > > > Do you have anything set in "conf/context.xml" or in your web.xml? > > Dan > > > > > > > > DBTest.java excerpt : > > > > > > > > package testPackage; > > > > > > > > import javax.servlet.*; > > > > import javax.servlet.annotation.WebServlet; > > > > import javax.servlet.http.*; > > > > import javax.naming.Context; > > > > import javax.naming.InitialContext; > > > > import javax.naming.NamingException; > > > > import javax.sql.DataSource; > > > > > > > > import java.sql.Connection; > > > > import java.sql.ResultSet; > > > > import java.sql.SQLException; > > > > import java.sql.Statement; > > > > .... > > > > > > > > @WebServlet(name="DBTest", urlPatterns="/DatabaseTest") > > > > public class DBTest extends HttpServlet { > > > > > > > > protected void doGet(HttpServletRequest request, > > HttpServletResponse response) throws ServletException, IOException { > > > > // TODO Auto-generated method stub > > > > > > > > PrintWriter out = response.getWriter(); > > > > > > > > DataSource ds; > > > > Connection con; > > > > con = null; > > > > > > > > String title = "Database Result"; > > > > ... > > > > ... > > > > try { > > > > > > > > Context ctx = new > > InitialContext(); > > > > Context initContext = > > (Context) ctx.lookup("java:/comp/env"); > > > > ds = (DataSource) > > initContext.lookup("jdbc/TestDB"); > > > > > > > > <!-- line 62 --> con = ds.getConnection(); > > > > ... > > > > ... > > > > > > > > -------------------- > > > > > > > > Note that when I don’t share the datasource (Resource element is in > > test-app.xml and no ResourceLink in server.xml), it works fine. > > > > > > > > Any ideas on where should I look at ? > > > > > > > > Best Regards > > > > [image: blue_strip] > > > > > > > > Jean-Louis Matéo > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org >