2009-04-16 28 views
11

Yay çerçevesi, işlem yönetimi ile ne kadar ilerliyor? "Spring In Action" adlı kitap okumamla ilgili önerileri, oturum ve işlem yönetimi hakkında endişelenmeyen DAO yöntemlerini, basitçe basitçe bir oturum fabrikasını ve XML'de işlem şablonunu ayarlayarak ve ardından DAO'nuza bağlayarak oluşturuyor. SpringSource.org'un belgeleri ise, bunun gerçekleşmesi için tonlarca XML ve/veya ek açıklama gerektiğini söylüyor. Burada gerçeği, benBahar ile Otomatik Hazırda Bekleme İşlemi Yönetimi?

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

çizgisinde kodunu almak ve sadece

preform database actions 

kazan plaka işlem kod miktarını azaltarak yapabilirsiniz basit yolu budur Ne

o Yöntemlerimi minimumda mı görüyorum?

cevap

10

Yay işlem sınır en az 3 yollar sağlar:

1) Program kullanım, TransactionTemplate veya PlatformTransactionManager ile - yapılandırma ışık, invazif XML ile Bildirimsel

2) -, ayrıntılı XML ama olmayan invaziv

3) ek açıklamalar yoluyla Bildirimsel - XML ​​ışık, invaziv olmayan bir ihtiyaçlarınıza en uygun, Bahar senin için bu seçimi yapmaz üzerinde bağlıdır almak bir

. Sorunuzdan, ek açıklama yaklaşımı sizin peşinde olduğun gibi geliyor.

Yay referanslı işlem yönetiminin ilk bölümü olan Spring başvuru kılavuzunu okumanızı öneririm. Açık ve özlü.

Her zaman ilk önce dokümanlara danıştım ve yalnızca dokümanlar içinde değilse bir kitaba danıştım.

11

Sadece bunu yapabilmek için yapmanız gereken bazı işler var ama hiç de değil. Sözde, JPA'yı kendi sağlayıcınız ile birlikte kullanacaksınız. Hazırda. bu içermelidir en azından

<?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> 

Sonra, kullanmak Bahar uygulama bağlamında veritabanı bağlantısı için gerekli herşeyi tanımlamak: Sonra META-INF klasöründeki kalıcılık birimini tanımlar persistence.xml yerleştirmek gerekir:

<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"/> 

Yukarıdaki bazı özellikler ihtiyaçlarınıza bağlı olarak değiştirilebilir veya eklenebilir. Örnek, tahmin edebileceğiniz gibi, JPA ile Hazırda Beklet ve PostgreSQL veritabanı içindir.

Şimdi sadece bu gibi veri erişim yöntemlerini tanımlayabilirsiniz:

Kullanıcı uygulamanız tarafından tanımlanan JPA varlıktır
@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'larınızı çağıran yönetici/denetleyici katmanında yönetici işlemleri yapabilirsiniz - aslında bunu böyle yapıyorum - ama çok fazla örneklememek için burada bir araya getirdim. Benim örneklerinden düz yerine gitmek isteyebilir

Güzel referanslar o referanslar yanı giderek değer http://icoloma.blogspot.com/2006/11/jpa-and-spring-fucking-cooltm_26.html ilk 3 bağlantılar olduğunu.

+0

Cevabınız için teşekkürler, yarın bu işte çalışacağım. Ancak, sonunda her iki bağlantınız da aynıdır. –

+0

Üzgünüz, ama sağlanan bağlantı akılda vardı diğer dahil olmak üzere 3 daha fazla bağlantı içerir ... – topchef

+0

Şimdi bağlantı aşağı görünüyor ... –

İlgili konular