2009-04-16 10 views
11

Springフレームワークはトランザクション処理にどのくらいの時間をかけますか?セッションファクトリとトランザクションテンプレートをXMLで設定し、それをDAOに配線することで、セッションとトランザクションの管理についてかなり心配することのないDAOメソッドを作成するという例で、 "Spring In Action"の提案を読んでいます。一方、SpringSource.orgのドキュメントでは、これを実現するために必要なXMLおよび/またはアノテーションが必要であることが示唆されています。ここに真実は何Springによる自動休止トランザクション管理?

、私は

get session from sessionfactory 
open transaction 
preform database actions 
commit transaction with error handling 

の線に沿ってコードを取ると、それだけで

preform database actions 

そのボイラープレートトランザクションコードの量を減らすことができます最も簡単な方法は何ですか私は私の方法の向こう側に最低限持っていますか?

答えて

10

スプリングは、トランザクション境界の少なくとも3つの方法を提供:

1)プログラムによる取り扱い、TransactionTemplate又はPlatformTransactionManager経由 - 設定上の光が、を侵襲XMLを介して宣言

2) - 冗長XMLが、非侵襲

3)アノテーションによって宣言 - XMLの光、侵襲的ではない1最も適しニーズは、春があなたのためにその選択をしないであなたが依存選ぶ1

。あなたの質問から、注釈のアプローチはあなたが何をしているかのように思えます。

注釈駆動型トランザクション処理のセクションであるSpringリファレンスマニュアルを読むことをお勧めします。それは明確かつ簡潔です。

私はいつもrefドキュメントを参照し、ドキュメントにない場合にのみ本を参照します。

11

ちょうどそれをすることができると思われる仕事がありますが、それほど大したことではありません。おそらく、あなたは自分のプロバイダを選んでJPAを使います。休止状態。そして、あなたはMETA-INFフォルダ内の永続ユニットを定義するpersistence.xmlの配置する必要があります。

<?xml version="1.0" encoding="UTF-8"?> 
<persistence 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" 
      version="1.0"> 
    <persistence-unit name="YourDatabasePersistenceUnitName" transaction-type="RESOURCE_LOCAL"/>   
</persistence> 

次へ]を、最低でも、それはこれらが含まれている必要があり、あなたが使用してSpringアプリケーションのコンテキストでデータベース接続のために必要なすべてのものを定義します。

<bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="locations"> 
      <list> 
       <value>/WEB-INF/jdbc.properties</value>  
     </property> 
    </bean> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
      destroy-method="close" scope="singleton"> 
     <property name="driverClassName" value="org.postgresql.Driver"/> 
     <property name="url" value="${jdbc.url}"/> 
     <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
    </bean> 

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

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

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

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

上記のプロパティは、必要に応じて変更または追加することができます。この例は、あなたが推測しているかもしれないHibernateとPostgreSQLデータベースを持つJPAのためのものです。ユーザがアプリケーションによって定義されたJPAエンティティである

@Repository 
@Transactional 
public class UserJpaDAO { 

    protected EntityManager entityManager; 

    @PersistenceContext 
    public void setEntityManager(EntityManager entityManager) { 
     this.entityManager = entityManager; 
    } 

    public void save(User theUser) { 
     entityManager.persist(theUser); 
    } 

    public User update(User theUser) { 
     return entityManager.merge(theUser); 
    } 
} 

今、あなたは、単にこのようなあなたのデータ・アクセス・メソッドを定義することができます。実際に私はそうすることができますが、あなたのDAOを呼び出すマネージャ/コントローラ層のトランザクションを管理することができますが、あまりにも多くの例を混乱させないために、ここにまとめました。あなたは私の例でまっすぐに代わりに行くことをお勧めします

ニースの言及は、それの参照が同様に行く価値がある http://icoloma.blogspot.com/2006/11/jpa-and-spring-fucking-cooltm_26.html トップ3のリンクです。

+0

答えをいただきありがとうございます。私はこの明日の仕事で遊びます。しかし、最後の両方のリンクは同じです。 –

+0

申し訳ありませんが、私が提供したリンクには、私が気づいた他のリンクを含む3つのリンクが含まれています... – topchef

+0

今すぐリンクがダウンしているようです... –

関連する問題