Bonjour

Je sollicite votre aide pour une problématique que je rencontre sur une application Spring/JMS,
En faite, via une IHM web, l’utilisateur remplit un formulaire et invoque un service de validation de mission et création.
Une fois les données sont validées, le système enregistre la mission dans une base oracle, et génère deux comptes rendu (plusieurs comptes rendu, selon un paramétrage) puis il les poste dans une MQ message par message (MQ d’ibm pour la prod et ActiveMQ pour le dev)


Le problème/besoin,
Si une erreur est rencontrée lors du 2éme poste, je vais avoir un declage entre les different système.
Je veux faire un retour arrière sur l’ensemble des messages envoyés.

Je cherche une moyen « genre transaction BDD » de sorte que les messages ne seront visibles dans la MQ qu’apres le
poste du dernier message.

Environnement
Tomcat
Spring
JMS
Hibernate
Struts

Merci d'avance


MissionService.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
  public String creerOperation(PersonneDto dto, boolean withSendContrat) throws BusinessException, TechnicalException
    {
		PersonneVO = vo = dto.extractVo();
        personneDao.savePersonne(vo)
        if (withSendContrat)
        {
            smFacade.sendCtrsToSM2(vo);
        }
        return vo.getReferenceSg();
    }
smFacade.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
public class SmFacadeImpl  implements ISmFacade {
 
	public void sendCtrsToSM2(PersonneVO vo) {
 
		// on recupere le params
		List<Contrat > contrats = ....
 
		for(Contrat ctr: contrats){
			// JXB: 
			String fluxXml = marshal(vo, ctr); 
			contratServiceJms.sendStringMessage(fluxXml);
 
		}
 
	}
voici la configuration spring pour JMS
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
<bean id="contratServiceJms"
		class="com.bnss.services.ContratServiceJmsImpl">
		<property name="jmsTemplate" ref="MyjmsQueueTemplate" />
	</bean>
 
	<bean id="MyjmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate102" parent="jmsQueueTemplate">
		<property name="connectionFactory">
			<ref bean="MY_FACTORY_CONTRAT" />
		</property>
		<property name="defaultDestination" ref="MY_DST_CONTRAT" />
	</bean>
 
	<bean id="MY_DST_CONTRAT" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName">
			<value>java:comp/env/jms/MQ_DST_CONTRAT</value>
		</property>
	</bean>
	<bean id="MY_FACTORY_CONTRAT" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName">
			<value>java:comp/env/jms/FACTORY_CONTRAT</value>
		</property>
	</bean>