gpt4 book ai didi

java - Liferay:找不到合适的驱动程序

转载 作者:行者123 更新时间:2023-11-30 06:30:05 24 4
gpt4 key购买 nike

对于我当前的任务,我必须在 liferay 门户中部署我们的应用程序。部署本身是成功的,但是当应用程序启动时抛出“没有合适的驱动程序”异常。

环境:

  • Oracle 10g Express
  • Hibernate 4 Final
  • Liferay 6 与 Tomcat 7
  • OJDBC 6
  • c3p0 0.9
  • 使用 maven 构建

我们应用程序的一个较旧的 .war 文件运行时没有任何异常。但是,环境存在一些小差异。

旧环境:

  • Oracle 10g Express
  • Hibernate 3 最终版
  • Liferay 6 与 Tomcat 7
  • OJDBC 14
  • Hibernate 内置连接池
  • 不用 maven 构建

我已经尝试过的事情:

  • 将 ojdbc.jar 从 webapp lib 文件夹移动到 liferay tomcat lib/ext 文件夹
  • 在 context.xml 中强制类加载器的“webapp 类/库/资源优先”行为:
  • 去掉c3p0重新使用ojdbc14(我想可能是ojdbc6引起的)
  • 在旧版本中将 ojdbc14 替换为 ojdbc6(有效)

新的 persistence.xml:

<persistence-unit name="ipointdefault">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<mapping-file>META-INF/hbm.xml</mapping-file>
<class>Entity declaration...</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@HOST:PORT:DB" />
<property name="javax.persistence.jdbc.user" value="user" />
<property name="javax.persistence.jdbc.password" value="pw" />
<property name="hibernate.hbm2ddl.auto" value="update" />

<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.current_session_context_class" value="thread" />
<property name="hibernate.connection.pool_size" value="10" />
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
<property name="hibernate.bytecode.use_reflection_optimizer" value="true" />
<property name="hibernate.c3p0.acquire_increment" value="3" />
<property name="hibernate.c3p0.min_size" value="3" />
<property name="hibernate.c3p0.max_size" value="5" />
<property name="hibernate.c3p0.timeout" value="10800" />
<property name="hibernate.c3p0.idleConnectionTestPeriod" value="1800" />
<property name="hibernate.c3p0.max_statements" value="0" />
</properties>

旧的 persistence.xml:

<persistence-unit name="ipointdefault">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>Entity declaration...</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@HOST:PORT:DB" />
<property name="javax.persistence.jdbc.user" value="user" />
<property name="javax.persistence.jdbc.password" value="pw" />
<property name="hibernate.default-access" value="property" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.current_session_context_class" value="thread" />
<property name="hibernate.connection.pool_size" value="10" />
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
<property name="hibernate.bytecode.use_reflection_optimizer" value="true" />
</properties>

您是否知道如何解决问题或找到根本原因?

提前致谢。

编辑:

堆栈跟踪:

java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:264)
at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:224)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
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)

最佳答案

经过三天的调试终于找到了解决办法:

在某些情况下,hibernate/c3p0 忽略了 persistence.xml 中给定的驱动程序类,因此——就像异常状态——找不到合适的驱动程序。为了防止这种情况,我将以下行添加到我的 c3p0-config.xml 中:

<property name="driverClass">oracle.jdbc.driver.OracleDriver</property>

我希望它对其他人也有帮助:-)

关于java - Liferay:找不到合适的驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10852216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com