2017-07-05 1 views
1

J'ai un module OSGi A qui produit un événement EA dans un PostConstruct.Comment gérer les événements produits par les modules Osgi avant qu'un écouteur ne soit enregistré dans Felix Event Admin

J'ai un autre module OSGi B qui dépend de l'événement EA pour effectuer certaines opérations.

Mais le module B est chargé et enregistre donc son écouteur d'événement à Felix Event Admin après le module A a chargé et a déjà produit l'événement EA.

Le module B échoue donc après avoir attendu l'événement EA pour une certaine valeur de délai.

Est-il possible d'accéder à tous les événements produits avant qu'un module d'écoute du module B soit enregistré?

J'ai essayé d'utiliser OSGiService(waitTimeout = 1000), mais cela attend seulement que le service soit disponible .. mais pas pour que ses méthodes finissent d'être exécutées.

Merci.

+0

Probablement A écouter OSGi pour le chargement de B, puis produire l'événement EA. S'il n'est pas possible d'attendre que les charges B soient un événement, il faut un magasin qui stocke les événements, qui seront sélectionnés par B quand il se charge - mais ce n'est pas simple. Faire A écouter le cadre pour le chargement de B et ensuite produire des événements est meilleur même s'il les a déjà utilisés auparavant à d'autres fins. – SomeDude

Répondre

1

Il semblerait que l'Event Admin ne soit pas vraiment le bon outil pour ce que vous essayez de faire, ce qui ressemble beaucoup plus à une messagerie persistante qu'à un événement.

Un modèle de concours complet doivent:

  • Demandez aux auditeurs qui ne se soucient pas lorsqu'ils rejoignent le flux d'événements, ou

  • maintenir un flux d'événements pour chaque auditeur qui commence lorsque chaque auditeur rejoint

  • pas commencer à livrer des événements jusqu'à ce que les auditeurs sont tous disponibles et prêts

Si vous avez besoin d'envoyer un "événement" à un moment donné, mais que vous ne pouvez pas attendre l'écouteur, alors vous voulez une implémentation de messagerie persistante (par exemple JMS). De cette façon, lorsque votre écouteur démarre, il peut commencer à traiter tous les messages mis en file d'attente pendant le démarrage.