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 du ReportHandler :
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(); ...
Je ne sais pas comment 'activer' le contexte spring sur cette classe.
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); } } }
Pouvez-vous me donner une piste ?
Merci d'avance.
Partager