2009-07-22 2 views
1

J'utilise Websphere Application Server Express v6.1 et j'écris une application qui utilise Spring 2.0.7, Hibernate 3.5. Ma source de données est Oracle 10g.WAS 6.1, Hibernate, Spring et transaction manag configuration

J'ai 2 question

  1. Quel est le meilleur gestionnaire de transactions? Websphere ou Hibernate?
  2. Si IBM est la réponse alors comment dois-je le configurer dans le fichier XML de configuration printanière?

Voici ma déclaration actuelle pour Hibernate

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="rmsSessionFactory" /> 
</bean> 

Que cela ressemblerait-il pour Websphere?

Répondre

3

Vous devriez probablement acheminer vos transactions via JTA, même si vous utilisez une implémentation différente dans les coulisses. (Hibernate, Webphere, Weblogic, etc.) Idéalement, il devrait ressembler à ceci:

<bean id="transactionImpl" class="org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean"/> 

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

Si vous voulez utiliser le gestionnaire de transactions de mise en veille prolongée à la place, il suffit de remplacer la classe de la fève transactionImpl à la mise en veille prolongée un dans votre question initiale.

En ce qui concerne le gestionnaire est meilleur, je ne peux honnêtement pas penser à des raisons importantes de choisir l'un sur l'autre. La seule chose que je peux penser est que cela peut entrer en jeu si vous avez des serveurs d'applications en cluster qui partagent la charge, plutôt que d'être simplement un basculement. Peut-être que les transactions peuvent être partagées entre eux? Je ne sais pas. Si quelqu'un peut penser à autre chose, n'hésitez pas à me corriger.

EDIT: Il ressemble à WebSphereTransactionManagerFactoryBean (ce que je ci-dessus) n'a pas besoin d'être utilisé pour WebSphere 6.0 et, et selon le WebSphere Transaction Manager Spring Docs, vous devez utiliser WebSphereUowTransactionManager comme remplacement direct pour JTA. Ainsi, au lieu du gestionnaire de transactions Hibernate dans votre exemple original, utilisez simplement la classe WebSphereUowTransactionManager. Spring extrait le gestionnaire de transactions de l'arborescence JNDI du serveur d'applications. Vous devrez donc définir une propriété pour spécifier le nom JNDI. D'après ce que je peux dire, le gestionnaire de transactions WebSphere vous permet, entre autres, de suspendre les transactions. Personnellement, j'irais avec le gestionnaire de transactions du serveur d'applications, qu'il s'agisse de WebSphere, Weblogic ou Glassfish ou autre.

+1

Merci d'avoir répondu. J'ai maintenant une meilleure idée de ce qui doit être fait. J'ai remarqué dans la littérature que WebSphereUowTransactionManager fonctionnera uniquement avec Spring 2.1RC1 et supérieur avec WAS 6.0 et supérieur. Malheureusement, nous utilisons Spring 2.0.7. –

+2

Notez également que WebSphereTransactionManagerFactoryBean a été supprimé dans Spring 3.0 –

0
  1. Définir "mieux".
  2. Voici le Spring docs pour le gestionnaire de transactions WebSphere. Je crois que vous venez de changer la classe du gestionnaire de transactions. Vous pourriez aussi devoir faire quelque chose de spécial avec la classe d'usine.
+0

J'ai déjà lu beaucoup de littérature. Je cherche des réponses de quelqu'un qui a de l'expérience ou de la littérature qui est plus spécifique. J'ai besoin d'aide pour mieux comprendre aussi. Le serveur Websphere Transaction est peut-être trop puissant pour une seule application de serveur d'application? Merci tout de même. –

+0

Je n'ai jamais utilisé WebSphere, Dieu merci. Vous êtes seul ici. Ma prise serait qu'il est préférable d'utiliser le gestionnaire de transactions qui est écrit pour votre serveur d'applications. J'utilise WebLogic et JBOSS, et ceux-ci déterminent mon gestionnaire TX. – duffymo

1

J'étais sur un grand projet spring + hibernate + websphere et le WebsphereUowTransactionManager est celui sur lequel nous nous sommes retrouvés.

Le problème est que WebsphereTransactionManager par défaut utilise les API websphere internes de l'API. Le Ux TxManager fonctionne très bien, et vous obtenez un peu plus de fonctionnalités (nous avons utilisé la fonction de suspension par exemple).

En ce qui concerne le problème jndi, vous n'avez pas à vous soucier de le définir, le gestionnaire de transactions le gère pour vous.

Cependant, je vous recommande vivement d'opter pour le gestionnaire de transactions UOW. Voir devis du développeur article qui résout le problème de spring + hibernate + websphere.

Cependant, les versions antérieures (que le printemps 2.5) du ressort utilisé des interfaces WebSphere internes qui compromettaient la capacité des conteneurs Web et EJB pour gérer les ressources et sont non pris en charge pour l'utilisation des applications. Cela pourrait laisser le conteneur dans un état inconnu, pouvant entraîner une corruption des données.

Vous pouvez mettre à jour votre version de printemps, il est peu probable que vous aurez des problèmes, et si les choses se gâtent, vous pourriez tirer juste que org.springframework.transaction.jta.WebSphereUowTransactionManager de printemps 2.5 et ajouter à votre demande.

Questions connexes