Bonjour,

Je travail sur une application web existante avec les techno SPRING/HIBERNATE/TOMCAT (dernière version des libs). Je viens d'ajouter un serveur JMS (RabbitMQ) pour réaliser des traitements asynchrones. Le principe d'utilisation (dans un premier temps) est que l'application java envoi dans une queue un message indiquant de générer un fichier PDF et que le consommateur de cette queue traite la demande. Le producteur et le consommateur sont dans le même WAR (pour l'instant).
J'arrive sans difficulté à réaliser les bases du code pour ces deux parties et échanger des données. Cependant, je n'arrive pas à trouver le moyen d'appeler un service spring dans mon consommateur. Il n'arrive pas à faire l'instanciation automatique avec les @Autowired

Voici l'exemple de mon code pour le consommateur de la queue se trouvant dans une classe avec l'annotation spring @Configuration :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
...
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());
container.setMessageListener(new MessageListenerAdapter(new ReportHandler()));
container.setQueueNames(this.queueName);
container.afterPropertiesSet();
...
Code du ReportHandler :
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
 
@Transactional
@Service("reportHandler")
public class ReportHandler extends GenericServiceImpl {
	@Autowired
	ExtReportService reportService;
 
	public void handleMessage(String text) {
		System.out.println("Received: " + text);
		ObjectMapper mapper = new ObjectMapper();
		ReportParams params = null;
		try {
			// récupération des paramètres
			params = mapper.readValue(text, ReportParams.class);
			// appel du service d'édition
			reportService.makeReport(params);
		} catch (IOException e) {
			System.out.println(e);
		}
	}
 
}
Je ne sais pas comment 'activer' le contexte spring sur cette classe.

Pouvez-vous me donner une piste ?

Merci d'avance.