Excellent point Mark.
David, you have to decide how your database connections are managed:
a) Tomcat-managed datasource (your current setup)
- datasource is defined in Tomcat server.xml/context.xml and gets
registered in JNDI (e.g. java:comp/env/jdbc/smswebdb)
- datasource is referenced in hibernate.cfg.xml (using JNDI lookup)
- JDBC drivers need to be on the classpath for the server, e.g.
CATALINA_BASE/lib or CATALINA_HOME/lib
- you can write a sample application that can test the database connections
(before you deploy your SystemsMadeSimple.war)
- alternatively, you can use JMX to test the datasource (use
jvisualvm/jconsole)
b) Hibernate-managed datasource
- datasource is defined in hibernate.cfg.xml
- JDBC drivers are typically included with the application, e.g.
SystemsMadeSimple.war/WEB-INF/lib/*.jar
Here's a sample application to test your current setup ("quick and dirty
way")
1. Create new directory, TestDatabase
2. Place test.jsp in TestDatabase directory.
3. Add the following code to TestDatabase/test.jsp
<html>
<body>
<h1>TestDatabase</h1>
<pre>
<%
javax.naming.InitialContext naming = null;
javax.sql.Connection connection = null;
try {
naming = new javax.naming.InitialContext();
datasource = (DataSource)
naming.lookup("java:comp/env/jdbc/smswebdb");
connection = datasource.getConnection();
connection.close();
out.println("Connection has successfully obtained from datasource.
connection=" + connection);
} catch (javax.naming.NamingException ne) {
ne.printStackTrace();
out.println("Datasource is not bound to JNDI: " + ne);
} catch (javax.sql.SQLException sqle) {
sqle.printStackTrace();
out.println("Problem with a SQL connection: " + sqle);
} catch (Exception e) {
e.printStackTrace();
out.println("Something else went wrong: " + e);
}
%>
</pre>
</body>
</html>
4. Copy "TestDatabase" directory to Tomcat deploy directory,
CATALINA_HOME/webapps
5. Observe the console, see if the application has deployed correctly.
6. Test the application: http://localhost:8080/TestDatabase/test.jsp
7. Observe the output.
(NOTE: This is a quick and very-dirty way to test the Tomcat-managed
datasource. You should really never have a need to put Java code inside
your JSPs.)
Alternative is calling JMX bean(s) directly, e.g.
Catalina:type=DataSource,context=/,host=localhost,class=javax.sql.DataSource,name="jdbc/
smswebdb" or
Catalina:type=Resource,resourcetype=Context,context=/,host=localhost,class=javax.sql.DataSource,name="jdbc/smswebdb"
As typing this, Konstantin's reply just came through:
Definitely, your context.xml resource element is case sensitive, so you
should correct: driverClassName, maxActive, maxIdle and maxWait:
<Resource name="jdbc/smswebdb"
auth="Container"
*driverClassName*="com.microsoft.sqlserver.jdbc.SQLServerDriver"
*maxActive*="100"
*maxIdle*="30"
*maxWait*="10000"
username="SMSWEB_user"
password="PASSWORD_GOES_HERE"
type="javax.sql.DataSource"
url="jdbc:sqlserver://10.2.152.11:1433;databaseName=
SMSwebDB;SelectMethod=Cursor;">
</Resource>
Hope that helps.
Let us know how that worked out.
Cheers!
Neven