1

リモートのOracleデータベースにアクセスするSpringプロジェクトをセットアップしましたが、このSpringプロジェクトをローカルのTomcatで実行した場合に限ります。JavaWebまたはSpringプロジェクトとしてCFにデプロイすると、常に同じエラーメッセージが表示されます。

根本的な原因

org.springframework.transaction.CannotCreateTransactionException:トランザクション用にJPAEntityManagerを開くことができませんでした。ネストされた例外はjavax.persistence.PersistenceExceptionです: org.hibernate.exception.GenericJDBCException:接続を開くことができません org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:3...。

これは私の設定です:

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
    <property name="driverType">
        <value>oracle.jdbc.driver.OracleDriver</value>
    </property>
    <property name="URL">
        <value>${jdbc.url}</value>
    </property>
    <property name="user">
        <value>${jdbc.username}</value>
    </property>
    <property name="password">
        <value>${jdbc.password}</value>
    </property>
</bean>

<bean id="entityManagerFactory"
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:dataSource-ref="dataSource">
    <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:showSql="true"
              p:generateDdl="true">
        </bean>
    </property>
    <property name="jpaProperties">
        <value>
            hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
            hibernate.dialect=${hibernate.dialect}
            hibernate.hbm2ddl.auto=${hibernate.hbm2ddl.auto}
        </value>
    </property>
</bean>

oracle.jdbc.driver.OracleDriverの代わりにoracle.jdbc.OracleDriverを使用しようとしました。<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"...対応するプロパティ名で、を使用しようとしました。また、私は試しました:

<bean id="dataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource">
    <property name="driverClassName">
        <value>${database.driverClassName}</value>
    </property>
    <property name="url">
        <value>${jdbc.url}</value>
    </property>
    <property name="username">
        <value>${jdbc.username}</value>
    </property>
    <property name="password">
        <value>${jdbc.password}</value>
    </property>
    <property name="suppressClose" value="true"/>
    <property name="autoCommit" value="true"/>
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName">
        <value>${database.driverClassName}</value>
    </property>
    <property name="url">
        <value>${jdbc.url}</value>
    </property>
    <property name="username">
        <value>${jdbc.username}</value>
    </property>
    <property name="password">
        <value>${jdbc.password}</value>
    </property>
</bean>

何も機能しませんでした。常に同じエラーが発生します。

この構成でHSQLを使用しようとしました

およびこれらのjdbc.properties:

# HSQL
database.driverClassName = org.hsqldb.jdbcDriver
#jdbc.url = jdbc:hsqldb:file:target/zktodo2test.dat
jdbc.url = jdbc:hsqldb:file:zktodo2test.dat
jdbc.username = sa
jdbc.password =

hibernate.dialect = org.hibernate.dialect.HSQLDialect
hibernate.hbm2ddl.auto = update

...そしてそれは機能しましたが、これらのjdbc.propertiesを使用する場合:

# Oracle Credentials
database.driverClassName = oracle.jdbc.OracleDriver
jdbc.url = jdbc:oracle:thin:@dev.example.com:1521:dev
jdbc.username = epvin
jdbc.password = my_password

hibernate.dialect = org.hibernate.dialect.OracleDialect
hibernate.hbm2ddl.auto = update

上記のエラーが発生します。

4

1 に答える 1

2

これは、奇妙な Oracle 固有の認証の問題です。同じサーバーで実行されている MySQL サービスへの認証は正常に機能します。

于 2012-11-12T07:06:08.413 に答える