本人前一段时间开发的一个项目中,使用Tomcat作为WEB容器,采用Struts进行开发,中间使用几个数据源,试用时采用Oracle9.2数据库,数据库服务器在局域网内部,并且在同属一个交换机内部,经使用没有问题。
进入运行阶段后,需要将其中一个数据源连接的数据库移动到另外一个地方,不在同属一个交换机内部,但也是局域网,那边的数据库改为了ORACLE 9I RAC,相应的配置也进行了修改,修改如下:
<data-source key="IPSdataSource" type="org.apache.commons.dbcp.BasicDataSource">
      <set-property property="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
      <set-property property="url" value="jdbc:oracle:thin:@(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.1.20)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.1.21)(PORT = 1521))
      (LOAD_BALANCE = yes)
    )
    (CONNECT_DATA =
      (SERVICE_NAME = db5)
      (SERVER=DEDICATED)
    )
  )"
      />
但是在启动时,有时会有如下的错误提示:
2006-4-5 17:48:10 org.apache.struts.action.ActionServlet initModuleDataSources
严重: Initializing application data source IPSdataSource
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFact
ory, cause:
java.sql.SQLException: Io 异常: The Network Adapter could not establish the conn
ection
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
        at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:404)        at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.ja
va:468)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314)
        at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(Driv
erConnectionFactory.java:82)
        at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(Poolable
ConnectionFactory.java:300)
        at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(Bas
icDataSource.java:838)
        at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSou
rce.java:821)
        at org.apache.commons.dbcp.BasicDataSource.setLogWriter(BasicDataSource.
java:576)
        at org.apache.struts.action.ActionServlet.initModuleDataSources(ActionSe
rvlet.java:816)
        at org.apache.struts.action.ActionServlet.init(ActionServlet.java:389)
        at javax.servlet.GenericServlet.init(GenericServlet.java:212)
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.
java:888)
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:77
6)
        at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContex
t.java:3363)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:3
586)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
.java:774)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:76
0)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:548)        at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDep
loyer.java:260)
        at org.apache.catalina.core.StandardHost.install(StandardHost.java:741)
        at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.j
ava:512)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:354
)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:671)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java
:311)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
eSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1149)        at org.apache.catalina.core.StandardHost.start(StandardHost.java:707)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:316
)
        at org.apache.catalina.core.StandardService.start(StandardService.java:4
50)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:214
3)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:463)
        at org.apache.catalina.startup.Catalina.execute(Catalina.java:350)
        at org.apache.catalina.startup.Catalina.process(Catalina.java:129)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:156)
想知道是网络的问题,还是org.apache.commons.dbcp.BasicDataSource与ORACLE 9I RAC兼容有问题,但是奇怪的是不是每次都有问题,而且使用Oracle客户端连接服务器时是没有问题,故我觉得网络应该可能没有问题。