2

Glassfishアプリケーションサーバーを使用していて、Spring-HibernateWebアプリケーションをデータベースに接続しようとしています。次の構成があります。

Glassfishで、jdbc接続を追加し、正常なpingをDBに送信しました。

また、jndi名がjdbc / myResourceのJDBCリソース(glassfish)を追加しました。このリソースは、(ステップ1で)作成およびテストした接続プールの下にあります。

私のEntityManagetは@PersistenceContextで注釈が付けられています:

@PersistenceContext(unitName = "myPU")
protected EntityManager entityManager;

\ src \ main \ resources \ META-INF \の下に、persistence.xmlファイルを作成しました。

<persistence-unit name="myPU">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/myResource</jta-data-source>
    <properties>
        <!-- Glassfish transaction manager lookup -->
        <property name="hibernate.transaction.manager_lookup_class"
            value="org.hibernate.transaction.SunONETransactionManagerLookup" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"></property>
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.default_schema" value="PUBLIC" />
        <property name="hibernate.format_sql" value="true" />
        <!-- Validates the existing schema with the current entities configuration -->
        <property name="hibernate.hbm2ddl.auto" value="validate" />
    </properties>
</persistence-unit>

これは私のapplicationContextがどのように見えるかです:

bean id="txManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
</bean>

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

<jee:jndi-lookup id="emf" jndi-name="persistence/myPU" />

<!-- In order to enable EntityManager injection -->
<bean
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
    <property name="persistenceUnits">
        <map>
            <entry key="myPU" value="persistence/myPU" />
        </map>
    </property>
</bean>

私のweb.xmlには次のものがあります。

<persistence-unit-ref>
<persistence-unit-ref-name>persistence/myPU</persistence-unit-ref-name>
<persistence-unit-name>myPU</persistence-unit-name>

私が公開するとき、私は次のことを続けます:

'myPU'という名前のBeanは定義されていません。詳細については、server.logを参照してください。

なぜ永続性ユニットをBeanとして探しているのですか?
私が間違っていることは何ですか?

前もって感謝します

4

1 に答える 1

2

解決済み-persistence.xmlにtransaction-type="JTA"を追加しました。何らかの理由で、persistence.xmlでjta-data-sourceを指定している場合、デフォルトのトランザクションタイプは「JTA」である必要があるという印象を受けましたが、そうではない可能性があります。このソリューションに対する例外の関係はよくわかりませんが、現時点では、persistence.xmlに次の行があります。

<persistence-unit name="myPU" transaction-type="JTA">

そしてそれは魅力のように機能します。

于 2012-05-21T16:33:57.200 に答える