Struts中配置oracle数据源及SID问题

struts中配置oracle数据源:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://struts.apache.org/dtds/struts-config_1_1.dtd">

<struts-config>
 <data-sources>
    <data-source type="org.apache.commons.dbcp.BasicDataSource" key="dataSources">
    <set-property property="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <set-property property="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
    <set-property property="username" value="hutton" />
    <set-property property="password" value="java1" />
    </data-source>
</data-sources>

注:xe为Oracle的SID,在oracle数据库中查询当前数据库的SID的方法:

  select instance_name from v$instance;

 

配置好数据源后,通过Myeclipse启动tomcat工具,出现如下错误信息:

 

严重: Initializing application data source dataSources
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:855)
at org.apache.commons.dbcp.BasicDataSource.setLogWriter(BasicDataSource.java:598)
at org.apache.struts.action.ActionServlet.initModuleDataSources(ActionServlet.java:808)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:335)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1201)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1114)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1021)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4957)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5284)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5279)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:458)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:37)
at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290)
at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:877)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:851)
... 14 more
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

at oracle.net.ns.NSProtocol.connect(NSProtocol.java:395)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320)
... 22 more

五月 05, 2014 10:37:05 下午 org.apache.catalina.core.ApplicationContext log
信息: Marking servlet action as unavailable
五月 05, 2014 10:37:05 下午 org.apache.catalina.core.StandardContext loadOnStartup
严重: Servlet /BSS threw load() exception
javax.servlet.UnavailableException: Initializing application data source dataSources
at org.apache.struts.action.ActionServlet.initModuleDataSources(ActionServlet.java:812)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:335)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1201)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1114)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1021)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4957)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5284)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5279)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

 

问题原因:数据源配置中,oracle的url的值配置错误,xe为当前数据库的SID,而不是当前的数据库的名称。

修改前:  

      <set-property property="url" value="jdbc:oracle:thin:@localhost:1521:db_bbs" />  //db_bbs为当前数据库的名称

修改后:

      <set-property property="url" value="jdbc:oracle:thin:@localhost:1521:xe" />   //xe为当前数据库的SID

 

 

 

 

posted @ 2014-05-05 22:40  Hutton‘  阅读(513)  评论(0编辑  收藏  举报