3

現在、私はSpringのセットアップをいじっています。私の目標は、JPAを使用して、JNDI名を使用してWebsphereデータソースにアクセスすることです。私はSpringDataJPAを使用して生活を楽にし、いくつかのチュートリアルを実行して基本的なアイデアを得ています。

悪いこと:それらのどれも私のJPAszenarioのSpring構成について話していません+私はこれまでJPA/JDBCを使ったことがありませんでした。だから私はあなたがここで私を助けてくれることを願っています。2つの構成ファイルを取得しました:

applicationContext.xml

<bean id="txManager"
    class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />

<bean id="eManager" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"></bean>

コード内で@Transactualアノテーションを使用しているため、txManagerにアノテーション駆動型タグを使用しています。txManagerに他に何を設定する必要があるのか​​、sessionFactoryタグが何をしているのかよくわかりません。サポートされているすべてのXMLタグのドキュメントはありますか?szenarioの重要なタグがありませんか?

eManagerについても同じです-それが正しいかどうかはわかりません。

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="spring-jpa">
        <jta-data-source>jdbc/myJNDI</jta-data-source>
    </persistence-unit>
</persistence>

ここでも同じことが言えます。私が何をしているのかよくわかりません。永続性ユニット/プロバイダーが必要なことはわかっています。多くの人がこれにHibernateを使用していることは知っていますが、ネイティブのままで、可能であれば純粋なJavaEE/Springを使用したいと思います。設定方法がわかりません。現在、私のプロジェクトはクラッシュしていて、「JPAPersistenceProviderがnullを返しました」と言っています。

4

3 に答える 3

4

最良の方法は、EntityManagerFactorySpringのJNDIサポートを介してJNDIからを取得することです。

<jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence/myPersistenceUnit" />

<jpa:repositories base-package="com.acme.repositories" />

<tx:jta-transactionManager />

これにより、アプリケーションサーバーからもトランザクションマネージャーが使用されます。をセットアップして、JNDIから取得したものをそれにJpaTransactionManager配線することもできます。名前空間要素を介してデータソースを検索し、Spring Data JPAリファレンスドキュメントの詳細な設定手順に従うEntityManagerFactoryだけで、Spring設定ファイルにさらに多くの設定を取り込むことができます。<jee:jndi-lookup />それでも、コンテナリソースを使用することにした場合は、通常、実際に取得できるコンテナリソースを使用することをお勧めします。

于 2012-05-01T17:16:28.520 に答える
3

Spring、jpamysqlなどを使い始めたばかりです。お手伝いできるかもしれません。私が自分の構成を正しく知っている方法を紹介します。

ちなみに、データベース接続にはHibernateを使用していますが、これを行ったことがないので、そこでは助けがありません:)

私の構成:

Spring-config.xml:

<context:component-scan base-package="com.MYPACKAGE"/> 
<!-- To find all your controllers -->

<tx:annotation-driven/> 
<!-- This will pickup all your @Transactional annotations-->

<import resource="../database/DataSource.xml"/>
<import resource="../database/Hibernate.xml"/>
<!-- These are my database config files-->

Datasource.xml:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/DATABASENAME"/>
    <property name="username" value="USERNAME"/>
    <property name="password" value="PASSWORD"/>
</bean>

Hibernate.xml:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="false"/>
            <property name="generateDdl" value="true"/>
            <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect"/>
        </bean>
    </property>
</bean>

.xmlファイルの先頭に含める必要のある標準のxmlテキストを省略しましたが、自分で解決することを信頼しています;)

この設定は私にとってはうまくいきます。お役に立てば幸いです。この投稿に関して質問があれば、私に知らせてください!

幸運を!

于 2012-05-01T07:46:40.443 に答える
2

JBossを使用している場合、jndi名は次のようにpersistence.xmlプロパティで設定できます。

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

      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:/myDS/jta-data-source>

      <class>com.company.model.Document</class>
      <class>com.company.model.DocumentIndividual</class>

      <properties>
        <property name="hibernate.hbm2ddl.auto" value="create" />
        <!-- <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> -->
        <property name="javax.persistence.logging.level" value="INFO" />
        <property name="hibernate.show_sql" value="true" />
        <property name="jboss.entity.manager.jndi.name" value="java:/my_em"/>
        <property name="jboss.entity.manager.factory.jndi.name" value="java:/my_emf"/>
    </properties>

</persistence-unit>

ここで説明されているようにセクション4.4.2

于 2014-09-26T01:37:39.940 に答える