tomcat5.5中同时访问oracle和sql server有问题
在tomcat5.5下有一个报表程序,之前这些报表的后台数据库是sql server 2000,使用没有大问题,前几天,有几张新的报表后台数据库是oracle 9i的。加入到这个报表程序中之后,发现这个一个问题。当重启tomcat之后,如果先打开sql server 2000的报表,则oracle的报表就出错,如果先打开oracle的报表,则两种数据库的报表都正常运行。这是不是tomcat的bug?请高手会诊下。
我使用如下的代码检查数据库连接是否正常:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Mtest</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
request.setCharacterEncoding("GBK");
String jndistr = "";
String[] params;
try{
jndistr = request.getParameter("jndistr");
}catch(Exception e)
{
jndistr = "";
}
if(jndistr==null||jndistr.equals("")){
out.println("<font color='#ff0000'><b>请输入JNDI的名称!</b></font>");
}else{
String lookUpName = jndistr;//这里的oracle01根据数据源的连接的设置来写
Connection con =null;
try
{
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(lookUpName);
con= ds.getConnection();
if(con!=null){
out.println("<b>jdbc:class"+ds.getClass().getName()+"</b>");
out.println("</br>");
out.println("<b>jdbc:lookUpName:"+lookUpName+"</b>");
}
}
catch (NamingException e)
{
out.println(e.getMessage());
} catch (SQLException e) {
out.println(e.getMessage());
///e.printStackTrace();
}
finally
{
if(con!=null) con.close();
}
}
%>
<form name="form1" method="post" action="">
<table>
<tr>
<td>JNDI名称:<input type="text" name="jndistr" value=""></td>
<td><input type="submit" value="提交"></td>
</tr>
<tr>
<td>
Tomcat/Resin格式:<b>java:/comp/env/jndistr</b><br>
Weblogic/Webshpere格式:<b>jndistr</b><br>
Jboss格式:<b>java:jndistr</b><br>
</td>
</tr>
</table>
</form>
</body>
</html>
先测试sql server2000的JNDI,然后再测试oracle的JNDI出现如下错误:
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:460)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
root cause
java.lang.NullPointerException
org.apache.tomcat.dbcp.dbcp.DelegatingConnection.close(DelegatingConnection.java:214)
org.apache.tomcat.dbcp.dbcp.PoolableConnection.reallyClose(PoolableConnection.java:102)
org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.destroyObject(PoolableConnectionFactory.java:305)
org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1253)
org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1221)
org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
org.apache.jsp.db_jsp._jspService(db_jsp.java:97)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.27 logs.
--------------------------------------------------------------------------------
Apache Tomcat/5.5.27