【问题标题】:Tomcat 6 Errors out on StartupTomcat 6 启动时出现错误
【发布时间】:2012-10-18 11:05:13
【问题描述】:

我在我的 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)

【问题讨论】:

  • 你能贴出你用来建立连接的代码吗?

标签: java oracle hibernate seam c3p0


【解决方案1】:

如果其他人遇到这个问题,这里是问题的详细信息和解决方案(我与 ThapaKaji 离线合作):

问题最终是 JVM 在其类路径上有两个 Oracle 驱动程序,一个是旧的 10g 版本,另一个是新的 11g 版本(我们发现它是因为“oracle.net.TNSAddress.ServiceAlias”不存在于11g 驱动程序)。它有两个版本而他不知道的原因是旧版本来自隐藏在他的 JDK 的 jre/lib/ext 文件夹中的“classes12.jar”。

该问题的解决方案是删除该 JAR,或切换到其中没有该文件的其他 JRE。

【讨论】:

    【解决方案2】:

    查看属性显示行开头

    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 配置文件中设置,例如 c3p0.properties 或 c3p0-config.xml。)使用上面显示的 JDBC url 时出现连接错误也就不足为奇了。

    祝你好运!

    【讨论】:

    • 在 JDBC URL 中替换 @TRACKER_DEV 后,我得到 java.sql.SQLException: Io exception: Connection denied... 错误。这就是我的 JDBC URL 现在的样子: hibernate.connection.url=jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = host.company.com)(PORT = 1521) ))(CONNECT_DATA = (SERVICE_NAME = ord350a.int.company.com)))。有什么想法吗??另外,谢谢您的回复!
    • 嗨。我想你想验证你的连接信息。我不是“Oracle Net 连接描述符”的专家,这是您正在使用的格式,但在这里查看示例 docs.oracle.com/cd/B14117_01/java.101/b10979/urls.htm#BEIJFHHB 我认为 SERVICE_NAME 通常不是完全限定的主机名。可以试试更普通的 jdbc:oracle:thin:[username/password]@//myhost:1521/myservicename 格式吗?您可以尝试一个简单的测试程序来避免 Tomcat 和连接池的所有垃圾,只需调用 DriverManager.getConnection()。一旦你得到它的工作,其余的可能很容易。
    • 嗨史蒂夫,实际上问题是使用的 JDK 1.6 位于 C:\Program Files (x86)\Java\jdk1.6.0_27 文件夹中。我的 JAVA_HOME 设置为上述文件夹,但 Intellij 从未使用过。为了解决这个问题,我将我的 JAVA_HOME 设置为 C:\Java\jdk1.6.0_27,我的代码就像一个魅力。感谢您的见解。
    【解决方案3】:

    如果这在您同事的计算机上有效而在您的计算机上无效,则最相关的原因是防火墙。检查您机器上的个人防火墙。我相信它阻止了连接。

    如果它不能帮助检查您的网络配置。您和您的同事是否有可能在不同的子网中而其他防火墙阻止了您?

    【讨论】:

    • 感谢您查看此 AlexR。但是,即使在我的 Windows 7 上禁用所有防火墙后,我仍然遇到同样的问题。我和我的同事都在同一个公司网络中。
    猜你喜欢
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多