سؤال

متى إطار الربيع الذهاب مع الصفقة التعامل مع ؟ قراءتي كتاب "الربيع في العمل" اقتراحات مع الأمثلة التي يمكنك إنشاء داو الأساليب التي لا تقلقي دورة إدارة المعاملات إلى حد ما ببساطة عن طريق اقامة الدورة مصنع الصفقة في قالب XML ثم الأسلاك في DAO.SpringSource.org's الوثائق ، من ناحية أخرى ، يشير إلى أن الحاجة طن من XML و/أو الشرح لجعل هذا يحدث.

ما هي الحقيقة هنا ، ما هو أبسط طريقة يمكن أن تأخذ رمز على طول خطوط

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

وجعلها فقط

preform database actions

تقليل كمية من المرجل لوحة المعاملات البرمجية التي لدي عبر طرقي إلى الحد الأدنى ؟

هل كانت مفيدة؟

المحلول

يوفر الربيع 3 طرق على الأقل من ترسيم الصفقة:

1) المناولة البرنامجية، عن طريق المعاملات أو النظام الأساسيManager - ضوء على التكوين، ولكن الغازية

2) تصريح عبر XML - Verbose XML، ولكن غير الغازية

3) الإعلان عن طريق التعليقات التوضيحية - الضوء على XML، وليس الغازية

ما الذي تختاره يعتمد على أي واحد يناسب احتياجاتك، لا يجعل الربيع هذا الاختيار من أجلك. من سؤالك، يبدو وكأنه نهج التوضيح هو ما أنت بعده.

أقترح قراءة دليل مراجع الربيع، قسم معالجة المعاملات التي يحركها التوضيحية. انها واضحة وموجزة.

أنا دائما استشر مستندات المرفأ أولا، واستشر كتابا فقط إذا لم يكن في المستندات.

نصائح أخرى

هناك بعض العمل الذي يجب القيام به لتكون قادرة على فعل ذلك لكن ليس كثيرا على الإطلاق.المفترض أنك سوف تستخدم JPA مع اختيار الخاصة بك موفر مثلاالسبات.ثم كنت بحاجة إلى مكان persistence.xml الذي يحدد استمرار الوحدة في META-INF المجلد:

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

ثم تحديد كل ما هو ضروري اتصال قاعدة البيانات في الربيع سياق التطبيق يمكنك استخدام على الأقل يجب أن تحتوي على هذه:

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

بعض خصائص أعلاه قد يتم تغيير أو إضافة اعتمادا على الاحتياجات الخاصة بك.المثال هو 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);
    }
 }

حيث User هو JPA الكيان المحددة من قبل التطبيق الخاص بك.يمكنك إدارة المعاملات في إدارة/وحدة تحكم طبقة المكالمات الخاصة بك DAOs - في الواقع لا تفعل ذلك بهذه الطريقة ولكن أنا وضعت معا هنا لا فوضى سبيل المثال كثيرا.

لطيفة المراجع التي قد تريد أن تذهب مباشرة بدلا من أمثلة هو http://icoloma.blogspot.com/2006/11/jpa-and-spring-fucking-cooltm_26.html أعلى 3 روابط يشير تستحق الذهاب إليها كذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top