Printemps jta-gestionnaire de transactions


Utiliser Printemps:

  1. Jta-transaction-manager peut-il utiliser id comme nom afin que je puisse le transmettre en tant que REF à ma couche de service comme ci-dessous?

  2. Est tx:jta-transaction-manager ne peut être utilisé que pour le conteneur je22? Je veux dire pour Tomcat , je dois le faire manuellement, comme ci-dessous:

    <tx:jta-transaction-manager id="name_transactionmanager"/>
    
        <bean id="projectService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager"
                      ref="name_transactionmanager"/>
            <property name="target">
                <bean
                  class="com.company.project.company.services.ServiceImpl"
                  init-method="init">
                     <property
                       name="HRappsdao"
                       ref="HRappsdao"/>
                     <property
                       name="projectdao"
                       ref="projectdao"/>
                </bean>
            </property>
            <property name="transactionAttributes">
                <props>
                    <prop key="store*">PROPAGATION_REQUIRED</prop>
                    <prop key="update*">PROPAGATION_REQUIRED</prop>
                    <prop key="remove*">PROPAGATION_REQUIRED</prop>
                    <prop key="bulkUpdate*">PROPAGATION_REQUIRED</prop>
                    <prop key="*">PROPAGATION_SUPPORTS,readOnly</prop>
                </props>
            </property>
        </bean>
    

Pour la question 2

    <bean id="transactionManager"
      class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="userTransaction">
            <bean class="org.springframework.transaction.jta.JotmFactoryBean"/>
        </property>
    </bean>
Author: Peter Mortensen, 2009-12-26

1 answers

Est-ce que tx:jta-transaction-manager peut utiliser id comme nom afin que je puisse le passer comme REF à ma couche de service comme ci-dessous?

Le <tx:jta-transaction-manager> expose le gestionnaire de transactions comme un Haricot dans le Printemps contexte avec le nom "transactionManager".

tx:jta-transaction-manager peut-il être utilisé uniquement avec un conteneur J2EE?

, Citant le Chapitre 9. Gestion des transactions de la documentation Spring:

Un serveur d'applications est-il nécessaire pour la gestion des transactions?

Le Transaction de Spring Framework soutien à la gestion de manière significative change la pensée traditionnelle quant à lorsqu'une application J2EE nécessite un serveur d'application.

En particulier, vous n'avez pas besoin d'un serveur d'applications juste pour avoir transactions déclaratives via EJB. Dans fait, même si vous avez une application serveur avec de puissantes capacités JTA, vous pourriez bien décider que le printemps Transactions déclaratives de Framework offrir plus de puissance et beaucoup plus productif modèle de programmation que EJB CMT.

Généralement, vous avez besoin d'une application capacité JTA du serveur uniquement si vous besoin d'enrôler plusieurs transactionnels ressources, et pour de nombreuses applications être capable de gérer les transactions sur plusieurs ressources n'est pas un exigence. Par exemple, beaucoup de les applications haut de gamme utilisent un seul, base de données hautement évolutive (telle que Oracle 9i RAC). Transaction autonome les gestionnaires tels que Atomikos Transactions et JOTM sont d'autres options. (Bien sûr vous pouvez avoir besoin d'un autre serveur d'applications capacités telles que JMS et JCA.)

Le point le plus important est qu'avec le cadre de printemps que vous pouvez choisir quand mettre à l'échelle votre application serveur d'applications complet. Disparu sont les jours où la seule alternative pour utiliser EJB CMT ou JTA était d'écrire code utilisant des transactions locales telles que ceux sur les connexions JDBC, et font face à un lourde reprise si jamais vous avez besoin que l'exécution de code à l'intérieur mondial, transactions gérées par conteneur. Avec le Cadre de ressort, seulement la configuration doit changer de sorte que votre code n'a pas à.

Ainsi, comme expliqué dans le troisième paragraphe, si vous souhaitez travailler avec plusieurs ressources transactionnelles, vous aurez besoin de transactions globales impliquant un serveur d'applications compatible JTA. Et Serveur d'applications compatible JTA signifie un vrai conteneur J2EE ou un conteneur non J2EE (comme Tomcat) avec un gestionnaire de transactions autonome comme Atomikos, JOTM, Bitronix, SimpleJTA, JBossTS ou GeronimoTM/Jencks.

FWIW, j'ai vu beaucoup de plaintes sur JOTM, je pense que GeronimoTM/Jencks manque de documentation, je ne peux vraiment rien dire sur JBossTS ArjunaTS (sauf que c'est un produit solide comme le roc), SimpleJTA et Bitronix ont à la fois une bonne documentation et Atomikos est un produit impressionnant très documenté aussi. Personnellement, je choisirais Bitronix ou Atomikos.

PS: Honnêtement, si cela vous semble chinois, vous devriez peut-être envisager d'utiliser une seule base de données (si c'est une option, allez-y!) ou envisagez d'utiliser un vrai conteneur J2EE comme JBoss ou GlassFish comme je l'ai écrit dans une réponse précédente. Sans vous offenser, mais tous ces trucs JTA ne sont pas triviaux et prendre le chemin JOTM n'est pas si simple si vous ne comprenez pas vraiment pourquoi vous en avez besoin.

 16
Author: Pascal Thivent, 2009-12-27 16:12:42