Question

Qu'est-ce qui fait d'un module/service/élément de fonctionnalité d'application un candidat particulièrement bon pour un module OSGi ?

Je suis intéressé à utiliser OSGi dans mes candidatures.Nous sommes une boutique Java et nous utilisons Spring assez largement, donc j'ai tendance à utiliser Modules dynamiques Spring pour les plates-formes de services OSGi(tm).Je recherche un bon moyen d'incorporer un peu d'OSGi dans une application à titre d'essai.Quelqu'un ici a-t-il utilisé cette technologie OSGi ou une technologie similaire ?Y a-t-il des pièges ?

@Nicolas - Merci, j'ai vu celui-là.C'est un bon tutoriel, mais je cherche davantage des idées sur la façon de créer mon premier "vrai" bundle OSGi, par opposition à un exemple Hello World.

@david - Merci pour le lien !Idéalement, avec une nouvelle application, je concevrais le tout pour qu'il soit dynamique.Ce que je recherche en ce moment, cependant, c'est de l'introduire dans un petit élément d'une application existante.En supposant que je puisse choisir n'importe quel élément de l'application, quels sont les facteurs à prendre en compte qui rendraient cet élément meilleur ou pire en tant que cobaye OSGi ?

Était-ce utile?

La solution

Eh bien, puisque vous ne pouvez pas avoir une partie OSGi et une partie non OSGi, vous devrez créer l'intégralité de votre application OSGi.Dans sa forme la plus simple, vous créez un seul bundle OSGi à partir de l'ensemble de votre application.Ce n'est évidemment pas une bonne pratique, mais cela peut être utile pour avoir une idée du déploiement d'un bundle dans un conteneur OSGi (Equinox, Felix, Knoplerfish, etc.).

Pour passer au niveau supérieur, vous devez commencer à diviser votre application en composants. Les composants doivent généralement avoir un ensemble de responsabilités qui peuvent être isolées du reste de votre application via un ensemble d'interfaces et de dépendances de classe.Leur identification purement manuelle peut aller d'une application plutôt simple pour une application bien conçue, hautement cohérente mais faiblement couplée, à un cauchemar pour un code source verrouillé que vous n'êtes pas familier.

Une certaine aide peut provenir d'outils tels que JDépend qui peut vous montrer le couplage des packages Java avec d'autres packages/classes de votre système.Un package avec un couplage efférent faible devrait être plus facile à extraire dans un bundle OSGi qu'un package avec un couplage efférent élevé.Il est possible d'obtenir encore plus d'informations architecturales avec des outils professionnels tels que Structure 101.

Sur le plan purement technique, travaillant quotidiennement avec une application composée de 160 bundles OSGi et utilisant Spring DM, je peux confirmer que la transition de Spring "normal" à Spring DM se fait en grande partie sans douleur.L'espace de noms supplémentaire et le fait que vous pouvez (et devez) isoler votre configuration Spring spécifique à OSGi dans des fichiers séparés facilitent encore plus l'utilisation de scénarios de déploiement avec et sans OSGi.

OSGi est un modèle de composants profond et large, documentation que je recommande :

  • Spécification OSGi R4:Obtenez les PDF des spécifications Core et Compendium, ils sont canoniques, faisant autorité et très lisibles.Ayez à tout moment un raccourci vers eux à portée de main, vous les consulterez.
  • Renseignez-vous sur les meilleures pratiques OSGi, il existe un grand nombre de choses que vous peut faites mais un ensemble de choses un peu plus restreint que vous devrait faire et il y a certaines choses que vous devriez jamais fait (Importation dynamique :* Par exemple).

Quelques liens :

Autres conseils

Lorsque vous apprenez une nouvelle technologie, des outils riches vous permettent de vous lancer sans gros maux de tête.À ce stade, la communauté à ops4j.org fournit un riche ensemble d'outils appelé « PAX » qui comprend :

  • Pax Coureur:Exécutez et basculez facilement entre Felix, Equinox, Knopflerfish et Concierge
  • Pax Construction:Construisez, organisez et créez facilement des projets OSGi avec Maven
  • Drone Pax:Testez vos bundles OSGi avec Junit tout en étant indépendant du framework (utilise PaxRunner)

Il existe ensuite de nombreuses implémentations de services de recueil OSGi :

  • Journalisation des passagers (enregistrement),
  • PaxWeb (service http),
  • Extension Web Pax (soutien de guerre),
  • Pièce Pax (configuration),
  • Coque Pax (implémentation shell, partie de la prochaine version d'osgi)
  • et beaucoup plus.

..et il existe une communauté utile et indépendante du cadre, - mais c'est maintenant de la publicité ;-)

Cette réponse arrive près de 3 ans après que la question a été posée, mais le lien Je viens de trouver c'est très bien, en particulier pour les débutants utilisant maven.Une explication étape par étape.

Votre application existante est-elle monolithique ou hiérarchisée en processus/couches séparés ?

En cas de niveau, vous pouvez convertir le niveau intermédiaire/application pour qu'il s'exécute dans un conteneur OSGi.

D'après l'expérience de mon équipe, nous avons trouvé pénible d'essayer de faire des choses Web dans OSGi.Les autres problèmes sont Hibernate et Jakarta Commons Logging.

Je trouve les spécifications OSGi assez lisibles et je vous recommande d'imprimer l'organigramme qui montre l'algorithme de chargement des classes.Je vous garantis que vous aurez des moments de « pourquoi est-ce que je reçois une NoClassDefFoundError ? » :l'organigramme vous dira pourquoi.

Essayer http://neilbartlett.name/blog/osgibook/.Le livre contient des exemples pratiques des meilleures pratiques OSGi.

Essayer http://njbartlett.name/files/osgibook_preview_20091217.pdf

OU

http://www.manning.com/hall/

Le second n’est pas un livre que j’ai lu moi-même mais j’en ai entendu de bonnes choses.

Le premier m'a été très utile.Il vous présente d'abord l'architecture, puis passe à OSGi.

Il y a quelques points à garder à l’esprit si vous débutez avec OSGi.

Comme mentionné ailleurs dans ce fil, connaître le chargement de classes est vraiment important.D’après mon expérience, tout le monde rencontre tôt ou tard des problèmes.

Une autre chose importante à retenir est :ne détenez jamais de références !Jetez un œil au modèle de tableau blanc sur lequel le concept de services d'OSGi est construit (voir le lien dans l'une des autres réponses).

D'après mon expérience, vous ne devriez pas essayer de convertir une application monolithique en une application basée sur OSGi.Cela conduit généralement à un désordre grave et ingérable.Recommencer à nouveau.

Téléchargez l'une des implémentations OSGi autonomes disponibles gratuitement.J'ai trouvé Knopflerfish plutôt bon et stable (je l'utilise dans de nombreux projets).Il est également livré avec de nombreux codes sources.Vous pouvez le trouver ici: http://www.knopflerfish.org

Un autre bon tutoriel peut être trouvé ici. https://pro40.abac.com/deanhiller/cgi-bin/moin.cgi/OsgiTutorial

Peter Kriens de l'OSGi Alliance a donné une belle interview : http://www.infoq.com/interviews/osgi-peter-kriens.Sa page d'accueil et son blog (qui est toujours une bonne lecture) peuvent être trouvés ici : http://www.aqute.biz

J'aime vraiment le Tutoriels Apache Félix.Cependant, je pense qu'en général, tirer parti d'OSGi dans votre application ne fait pas partie de ces décisions "utilisons ce framework, car c'est du battage médiatique".C'est plus une question de conception, mais tout ce qu'OSGi vous offre en termes de conception, vous pouvez également l'avoir avec Vanilla Java.

En ce qui concerne le runtime, vous ne pouvez pas simplement ajouter une application existante et la rendre compatible OSGi.Il doit être conçu pour être dynamique.Spring DM permet de vous cacher facilement cela, mais il est toujours là et vous devez en être conscient.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top