1

私は Eclipse Virgo を使用しており、アノテーション駆動型のトランザクション管理を実行しようとしていますが、同じ問題が発生し続けています。

問題は、EntityManager が注入され、null ではないことです。ただし、接続エラーが原因でクエリが失敗します。

GreenPagesに従ってセットアップを使用しました。

次の EntityManageFactory と TransactionManager が構成されています

<bean id="emf"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="ShiftManagement" />
    <property name="jpaVendorAdapter">
        <bean
            class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="generateDdl" value="true" />
            <property name="databasePlatform"
                value="org.eclipse.persistence.platform.database.MySQLPlatform" />
        </bean>
    </property>
    <property name="packagesToScan" value="....." />
    <property name="jpaDialect">
        <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect" />
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="emf" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

また、次の DataSources を構成しています。問題は、すべて試してみましたが、クエリを使用してデータベースに接続しようとしてもうまくいきません。これで、資格情報に問題がないこと、DB が稼働していることなどを 100% 確信しています。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/shiftmanagement" />
    <property name="username" value="root" />
    <property name="password" value="rootroot" />
    <property name="initialSize" value="5" />
    <property name="maxActive" value="20" />
    <property name="maxIdle" value="5" />
    <!-- TRANSACTION_READ_COMMITTED = 2 -->
    <property name="defaultTransactionIsolation" value="2" />
    <!-- TRANSACTION_READ_UNCOMMITTED = 1 -->
    <!-- <property name="defaultTransactionIsolation" value="1" /> -->
    <property name="validationQuery" value="select 1 from dual" />
    <property name="testOnBorrow" value="true" />
</bean>

commons-dbcp 使用時のエラー

Caused by: java.lang.UnsupportedOperationException: Not supported by BasicDataSource
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:901)
at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:132)
at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)

Spring データソースの使用

<bean id="dataSource2"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/shiftmanagement" />
    <property name="username" value="root" />
    <property name="password" value="rootroot" />
</bean>



Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/shiftmanagement
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:154)

それでは、有望な tomcat-jdbc ライブラリを試してみました

<bean id="dataSource3" class="org.apache.tomcat.jdbc.pool.DataSource"
    destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/shiftmanagement" />
    <property name="username" value="root" />
    <property name="password" value="rootroot" />
    <property name="initialSize" value="5" />
    <property name="maxActive" value="10" />
    <property name="maxIdle" value="5" />
    <property name="minIdle" value="2" />
</bean>

そして、次の同様の例外がポップアップします

Caused by: org.eclipse.virgo.kernel.osgi.framework.ExtendedClassNotFoundException: com.mysql.jdbc.Driver in KernelBundleClassLoader: [bundle=org.apache.tomcat.jdbc_1.1.0.1]
at org.eclipse.virgo.kernel.userregion.internal.equinox.KernelBundleClassLoader.loadClass(KernelBundleClassLoader.java:139)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246)

次のpersistence.xmlを使用しています

<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="ShiftManagement" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    ....
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
        <!-- Database options -->
        <property name="eclipselink.target-database" value="MySQL"/>
        <property name="eclipselink.weaving" value="false"/>
        <property name="eclipselink.orm.throw.exceptions" value="true"/>
        <!-- 
        <property name="eclipselink.jdbc.read-connections.min" value="1"/>
        <property name="eclipselink.jdbc.write-connections.min" value="1"/>
         -->                        

        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/shiftmanagement"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="rootroot"/>

        <!-- Logging -->
        <property name="eclipselink.logging.level" value="FINE" />
        <property name="eclipselink.logging.timestamp" value="false" />
        <property name="eclipselink.logging.session" value="false" />
        <property name="eclipselink.logging.thread" value="false" />
    </properties>

</persistence-unit>

を使用して EntityManager を注入します

@PersistenceContext
private EntityManager em;

persistence.xml からユーザー名とパスワードを削除するためにいくつかの投稿を読みましたが、システムはユーザー = [null] があると不平を言います。

どんな助けでも大歓迎です。

注: mysqld は実行中であり、mysql -uroot -prootroot を使用して接続できます。

4

2 に答える 2

0

このスレッドorg.springframework.jdbc.datasource.DriverManagerDataSourceを見るを使用する必要があります

この場合、mysql ドライバーが見つからないことがわかります。 Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/shiftmanagement

于 2014-06-03T12:04:37.523 に答える