0

Windows 7 マシンにローカルに apache-tomcat-6.0.35 をインストールしました。Tomcatで実行しようとしているHiberanate Javaアプリケーションもあります。バックエンドで使用される RDBMS は Oracle 11g であるため、私のマシンには Oracle クライアント (11.2.0) がインストールされています。Java アプリは c3p0-0.9.1.2 を使用して、バックエンドで Oracle との接続プールを作成しています。すべての接続情報は tnsnames.ora ファイルに保存されます。

プロジェクトコード全体がバージョン管理システムにあるため、同僚のマシンではまったく同じコードが問題なく実行されますが、Tomcat は次のログで起動に失敗します。今年の初め (2012 年 2 月) からこの問題が発生しましたが、解決されませんでした。私が見逃している何かに誰かが気付くことができるかどうか、もう一度試してみます. この問題を調査していただきありがとうございます。どうもありがとう!

Tomcat サーバーを実行した後のログ ファイルの内容は次のとおりです。

Using CATALINA_BASE:                 "C:\Users\MyName\.IntelliJIdea11\system\tomcat\Unnamed_cerdoafebd8b4"
Using CATALINA_HOME:   "C:\Program Files (x86)\Apache\Tomcat6\apache-tomcat-6.0.35"
Using CATALINA_TMPDIR: "C:\Program Files (x86)\Apache\Tomcat6\apache-tomcat-6.0.35\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.6.0_31"
Using CLASSPATH:       "C:\Program Files (x86)\Apache\Tomcat6\apache-tomcat-6.0.35\bin\bootstrap.jar"
...
2012-10-29T03:37:54.054Z INFO   [main] EnvironmentProperties  - Filtering properties using environment dev
2012-10-29T03:38:51.693Z INFO   [main] MLog  - MLog clients using log4j logging.
2012-10-29T03:39:40.497Z INFO   [main] C3P0Registry  - Initializing c3p0-0.9.1.2 [built 21-May-2007 15:04:56; debug? true; trace: 10]
2012-10-29T03:39:45.066Z INFO   [main] AbstractPoolBackedDataSource  - Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@f1bda9a6 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@1091d257 [ acquireIncrement -> 1, acquireRetryAttempts -> 3, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 2zggjq8q1bc3mwlm6u21f|3bf60430, idleConnectionTestPeriod -> 0, initialPoolSize -> 2, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 604800, maxIdleTime -> 7200, maxIdleTimeExcessConnections -> 120, maxPoolSize -> 10, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 2, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@7c977f23 [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 2zggjq8q1bc3mwlm6u21f|2bbef4c6, jdbcUrl -> jdbc:oracle:thin:@TRACKER_DEV, properties -> {user=******, .username=cerdo_app, password=******, .password=PEOPLE_WHOUSE_ADHOC, url.dev=jdbc:oracle:thin:@TRACKER_DEV, .url=jdbc:oracle:thin:@DW_DEV, .url.dev=jdbc:oracle:thin:@DW_DEV} ], preferredTestQuery -> select 1 from dual, propertyCycle -> 0, testConnectionOnCheckin -> true, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, factoryClassLocation -> null, identityToken -> 2zggjq8q1bc3mwlm6u21f|293a985, numHelperThreads -> 3 ]
oracle.net.TNSAddress.SOException
    at oracle.net.TNSAddress.ServiceAlias.initFromNVPair(Unknown Source)
    at oracle.net.TNSAddress.ServiceAlias.initFromString(Unknown Source)
    at oracle.net.resolver.AddrResolution.resolveAddrTree(Unknown Source)
    at oracle.net.resolver.AddrResolution.resolveAndExecute(Unknown Source)
    at oracle.net.ns.NSProtocol.establishConnection(Unknown Source)
    at oracle.net.ns.NSProtocol.connect(Unknown Source)
    at oracle.jdbc.ttc7.TTC7Protocol.connect(TTC7Protocol.java:1213)
    at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:209)
    at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:252)
    at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:365)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:260)
    at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
    at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
4

3 に答える 3

3

他の誰かがこの問題に遭遇した場合に備えて、問題と解決策の詳細を以下に示します (私は ThapaKaji をオフラインで使用しました)。

問題は、JVM のクラスパスに 2 つの Oracle ドライバがあり、1 つは古い 10g バージョンで、もう 1 つは新しい 11g バージョンであるということでした (「oracle.net.TNSAddress.ServiceAlias」が 11g ドライバに存在しないため、これを発見しました)。 )。2 つのバージョンがあり、彼がそれを知らなかった理由は、古いバージョンが、彼の JDK の jre/lib/ext フォルダーに隠れていた「classes12.jar」からのものだったからです。

この問題の解決策は、その JAR を削除するか、そのファイルが存在しない別の JRE に切り替えることでした。

于 2012-10-30T14:07:33.433 に答える
0

プロパティを見て、行頭を明らかにしました

2012-10-29T03:39:45.066Z INFO   [main] AbstractPoolBackedDataSource  - Initializing c3p0 pool...

接続しようとしている JDBC URL は jdbc:oracle:thin:@TRACKER_DEV であることがわかります。あなたの同僚は、ソース管理からアプリをチェックアウトした後、何らかのビルド スクリプトを実行して、@ のような変数を置き換えているのではないかと思います。 TRACKER_DEV および @DW_DEV をさまざまな構成ファイルに追加します。(これらの変数は、Tomcat 構成ファイルで設定されているか、c3p0.properties や c3p0-config.xml などの c3p0 構成ファイルで設定されている可能性があります。) 上記の JDBC URL で接続エラーが発生するのは当然のことです。

幸運を!

于 2012-10-29T10:47:14.197 に答える
0

これが同僚のマシンでは機能し、自分のマシンでは機能しない場合、最も関連性の高い理由はファイアウォールです。マシンのパーソナル ファイアウォールを確認します。接続をブロックしていると思います。

問題が解決しない場合は、ネットワーク構成を確認してください。あなたと同僚が異なるサブネットにいて、他のファイアウォールがあなたをブロックしている可能性はありますか?

于 2012-10-29T05:54:17.280 に答える