No Transaction in Progress JTA-Transaktion

ich bin ein Neuling auf JTA, und ich wollte ein zwei-Phasen-commit in meiner Anwendung, die eine Verbindung zu zwei verschiedenen Datenbank-Schemata.
Ich bin mit Spring, Hibernate und JPA in meiner Anwendung, und ich möchte hinzufügen, JTA transaction manager, mit zu beginnen, aber ich havent in der Lage gewesen, um durch diese.

Kann mir bitte jemand helfen das problem zu beheben, bin ich vor oder zeigen Sie mir, was ist falsch an meiner Konfiguration oder Verständnis.

Hier ist mein setup in der config-Datei

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="LineManagement" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="generateDdl" value="false" />
            <property name="showSql" value="false" />
            <property name="databasePlatform" value="${hibernate.dialect}" />
        </bean>
    </property>
    <property name="beanName" value="entityManager"></property>
</bean>

<bean id="userTransactionService" class="com.atomikos.icatch.config.UserTransactionServiceImp"
    init-method="init" depends-on="setAtomikosSystemProps">
    <constructor-arg>
        <props>
            <prop key="com.atomikos.icatch.service">com.atomikos.icatch.standalone.UserTransactionServiceFactory</prop>
        </props>
    </constructor-arg>
</bean> 


<bean id="setAtomikosSystemProps" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject">
        <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
            <property name="targetClass" value="java.lang.System" />
            <property name="targetMethod" value="getProperties" />
        </bean>
    </property>
    <property name="targetMethod" value="putAll" />
    <property name="arguments">
        <util:properties>
            <prop key="com.atomikos.icatch.file">/jta.properties</prop>
            <prop key="com.atomikos.icatch.hide_init_file_path">true</prop>
            <prop key="com.atomikos.icatch.console_log_level">DEBUG</prop>
        </util:properties>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" >
        <property name="userTransaction" ref="AtomikosUserTransaction" /> 
        <property name="transactionManager" ref="AtomikosTransactionManager" /> 
</bean>


<bean id="AtomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" depends-on="userTransactionService" >
    <property name="transactionTimeout" value="300"/>
</bean> 

<bean id="AtomikosTransactionManager" class = "com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
   <property name="forceShutdown" value="false" /> 
</bean>


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

Den persistence.xml hat die folgende Konfiguration

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

    <properties>
        <property name="hibernate.id.new_generator_mappings" value="true" />
        <property name="hibernate.current_session_context_class" value="thread" />
        <property name="hibernate.default_batch_fetch_size" value="200" />
        <property name="hibernate.transaction.manager_lookup_class" value="com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup"/>
        <property key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
        <!-- General Debugging -->
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.generate_statistics" value="true" />

    </properties>
</persistence-unit>

Wenn ich die app starte, gibt es mir eine Ausnahme
org.springframework.dao.InvalidDataAccessApiUsageException: keine Transaktion ist im Gange; nested exception is javax.die Persistenz.TransactionRequiredException: keine Transaktion ausgeführt wird

habe ich versucht zu verdecken, um mit der Propagierung Flagge auf der @Transactional-annotation, da ich glaube, dass diese Ausnahme besagt, dass es nicht um eine Transaktion vorhanden ist, aber es nicht machen den Fehler Weg...

Vielleicht <tx:annotation-driven/> helfen?
Ich habe das in meiner config. wo beziehe ich mich auf die transactionManger angegeben später <tx:annotation-driven transaction-manager="transactionManager" />
Auf JBoss ich es geschafft, ein anderes Konfiguration funktioniert, nur nach dem entfernen: <Eigentum key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property> Vor, dass alles funktioniert (einschließlich des 2-phase-commit) außer den entitymanager persistieren/merge/remove-Methoden. Warum? Ich habe keine Ahnung 🙁

InformationsquelleAutor Hrishikesh | 2012-02-16

Schreibe einen Kommentar