Would someone please give me a hint or two about what I am missing?
I am trying to get a MySQL connection working through JNDI (with my vaadin application). I have searched the web (and this forum site) and have not found what the issue is.
my WEB-INF/web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>VaadinApplication</servlet-name>
<servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
<init-param>
<param-name>application</param-name>
<param-value>test.MyApplication</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>VaadinApplication</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>VaadinApplication</servlet-name>
<url-pattern>/VAADIN/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file/>
</welcome-file-list>
<resource-ref>
<res-ref-name>jdbc/BKLibraryDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
my META-INF/context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/WebApplication1">
<resource name="jdbc/BKLibraryDB"
auth="Container"
type="javax.sql.DataSource"
username="user"
password="password"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/bklibrary"
removeAbandoned="true"
removeAbandonedTimeout="20"
logAbandoned="true"
validationQuery="SELECT 1"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="false"
/>
</Context>
my MyApplication.java:
public class MyApplication
extends Application
{
private Context context;
private BasicDataSource libraryDataSource;
@Override
public void init()
{
try
{
context = (Context) new InitialContext().lookup("java:comp/env");
libraryDataSource = (BasicDataSource) context.lookup("jdbc/BKLibraryDB");
System.out.println("libraryDataSource : " + libraryDataSource);
System.out.println("libraryDataSource.driverClassName : " + libraryDataSource.getDriverClassName());
System.out.println("libraryDataSource.defaultCatalog : " + libraryDataSource.getDefaultCatalog());
Connection c = libraryDataSource.getConnection();
PreparedStatement ps = c.prepareStatement("SELECT 1234");
ResultSet rs = ps.executeQuery();
System.out.println("rs: " + rs.getString(1));
rs.close();
ps.close();
c.close();
Window w = new Window();
setMainWindow(w);
}
catch (Exception ex)
{
Logger.getLogger(MyApplication.class.getName()).log(Level.SEVERE, "Exception", ex);
}
}
}
I have confirmed that my .war file contains mysql-connector-java-5.1.6-bin.jar. I have also verified my mysql connection (username, port, hostname, password, database) settings via command line. If I code this up to just use JDBC, it works - just not with JNDI.
The error I receive is:
SEVERE: Exception
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 test.MyApplication.init(MyApplication.java:39)
at com.vaadin.Application.start(Application.java:549)
at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.startApplication(AbstractApplicationServlet.java:1146)
at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:459)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Anyone have an idea? I have started from scratch again combining multiple JNDI examples I have found, but seemingly to no avail.