2 votes

Publier un service OSGi non@Instancié avec iPOJO

J'ai un système modulaire OSGi dans lequel j'ai les composants suivants :

  • Mise en œuvre d'une instance de protocole spécifique, qui représente une connexion via un protocole spécifique à un serveur spécifique (instanciée par service de connexion).
  • Un service spécifique de gestion des instances de protocole, créant et préconfigurant des instances à la demande (plusieurs services singletone à partir, normalement, de différents bundles).
  • Gestionnaire de connexion qui regroupe les services du gestionnaire de protocole et leur demande de fournir des instances de protocole en cas de besoin (service unique).

Ils sont emballés dans des bundles OSGi comme suit :

`-ConnectionManager
      `-ConnectionManager.class
`-IrcProtocol
      `-IrcProtocolManagerService.class
      `-IrcProtocolInstance.class
`-XMPPProtocol
      `-XMPPProtocolManagerService.class
      `-XMPPProtocolInstance.class

En ConnectionManager est annoté avec

@Provides
@Instantiate
@Component

Et met en œuvre Subscriber qui lui confère la capacité d'envoyer et d'écouter des messages transmis par une sorte d'interface typée. Event Admin .


Chaque *ProtocolManager est annoté avec

@Provides
@Instantiate
@Component

Et met en œuvre ProtocolManager qui lui permet d'être découvert par ConnectionManager service d'écoute.


Chaque *ProtocolInstance est annoté avec

@Provides
@Component

Et met en œuvre Subscriber interface. Il implémente également ProtocolInstance qui offre des opérations de connexion génériques telles que connect() y disconnect() .


Le problème ici est que ProtocolInstance sont créés à la main, avec new à l'intérieur de ProtocolManager et non par @Instantiate et, pour cette raison, ne participent pas à la publication de services iPOJO, malgré son caractère @Provides annotation.


La question est la suivante : comment publier correctement (et de préférence de manière déclarative, avec des annotations) ce fichier créé de manière programmatique ? ProtocolListener sans plonger manuellement dans la publication brute des services OSGi (au moins en dehors d'une sorte de fabrique, peut-être) ? Ou, probablement, comment restructurer mon système pour qu'il respecte mieux les directives tacites de l'iPOJO ?

1voto

Clement Points 441

IPOJO ne supporte pas la création d'objet avec 'new'. En effet, une instance iPOJO n'est pas seulement cet objet, mais aussi le conteneur qui l'enveloppe.

Cependant, vous avez deux solutions :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X