tomcat5.5中同时访问oracle和sql server有问题

xiaolang88 2009-04-14 09:23:07
在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

...全文
201 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
tan124 2009-04-17
  • 打赏
  • 举报
回复
你把sql数据库也该用Oracle数据库
老黄瓜_ 2009-04-17
  • 打赏
  • 举报
回复
接分!
xiaolang88 2009-04-17
  • 打赏
  • 举报
回复
问题解决了,原来是驱动的问题。
就的驱动com.newatlanta.jturbo.driver.Driver,版本是1.2的
换成:com.microsoft.sqlserver.jdbc.SQLServerDriver就正常了。
mumu_java 2009-04-16
  • 打赏
  • 举报
回复
每次要是都能重新获得新的连接应该是可以的。但一定是新获得的连接,不要从连接池中得。
mumu_java 2009-04-16
  • 打赏
  • 举报
回复
lz的问题是在同一个应用服务中想通过两个不同的数据源连接到不同类型的数据库取数据。这个Tomcat服务器不知道是否支持。
xiaolang88 2009-04-16
  • 打赏
  • 举报
回复
问题的关键是:如果先打开oracle的报表,则两种数据库的报表都正常运行,反过来,只有sql server 2000的报表正常,oracle的报表出错。
xiaolang88 2009-04-15
  • 打赏
  • 举报
回复
<Context path="/report" reloadable="true" docBase="report">
<Resource name="orareport" auth="Container" type="javax.sql.DataSource" username="report" password="report"
driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@192.168.88.82:1521:PRD" />

<Resource name="sqlreport" auth="Container" type="javax.sql.DataSource" username="report" password="reportdd" driverClassName="com.newatlanta.jturbo.driver.Driver"
url="jdbc:JTurbo://app/tt/charset=GBK"
maxActive="100" maxIdle="100" maxWait="5000" removeAbandoned="true" removeAbandonedTimeout="300" logAbandoned="true" />
</Context>

orareport是oralce数据库
sqlreport是sql server 2000数据库
xiaolang88 2009-04-15
  • 打赏
  • 举报
回复
xiaolang88 2009-04-15
  • 打赏
  • 举报
回复
没人知道?顶下
dxpws 2009-04-15
  • 打赏
  • 举报
回复
up
cnidb 2009-04-15
  • 打赏
  • 举报
回复
用连接池了么?
zhoushaolan 2009-04-14
  • 打赏
  • 举报
回复
跨数据库不懂,莫非还要配多个数据源...
zhj92lxs 2009-04-14
  • 打赏
  • 举报
回复
你的数据源怎么弄的
xiaolang88 2009-04-14
  • 打赏
  • 举报
回复
楼上误会了我的意思,我是说有些报表是从sql server取数据,有些报表从oracle取数据。
huangan0301 2009-04-14
  • 打赏
  • 举报
回复
通过oracle能访问sql server,但是通过sql server不能访问oracle。我想这就是问题所在吧~~~应该跟tomcat没关系

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧