Donc, hier matin, je n'avais aucune idée de ce qu'était même OSGi. OSGi était juste un mot à la mode que je voyais sans cesse revenir, et j'ai donc finalement mis de côté un peu de temps pour le rafraîchir.
Cela semble en fait assez cool, donc je voudrais commencer par déclarer (pour mémoire) que je ne suis pas anti-OSGi en aucun cas, ni que ce n'est une question "OSGi-bashing".
En fin de compte, il semble qu'OSGi ait - essentiellement - abordé JSR 277 sur la modularité Java, qui a reconnu qu'il y avait des lacunes dans la JAR
spécification de fichier qui peuvent conduire à des problèmes de résolution d'espace de noms et de chargement de classe dans certains cas secondaires. OSGi fait aussi beaucoup d'autres trucs vraiment sympas, mais d'après ce que je peux vérifier, c'est son plus gros tirage (ou l'un d'entre eux).
Pour moi - en tant que développeur Java EE assez récent (quelques années maintenant), il est absolument ahurissant que nous soyons en 2011 et que nous vivions actuellement à l'ère de Java 7, et que ces problèmes de chargement de classe soient toujours présents; en particulier dans les environnements d'entreprise où un serveur d'applications peut contenir des centaines de fichiers JAR, dont beaucoup dépendent de différentes versions les uns des autres et s'exécutent tous (plus ou moins) simultanément.
Ma question:
Aussi intéressé que je suis par OSGi, et même si je veux commencer à en apprendre davantage pour voir où / si cela pourrait être utile à mes projets, je n'ai tout simplement pas le temps de m'asseoir et d'apprendre quelque chose d'aussi grand, Au moins maintenant.
Alors, que doivent faire les développeurs non OSGi lorsque ces problèmes surviennent? Quelles solutions Java (Oracle / Sun / JCP) existent actuellement, le cas échéant? Pourquoi Jigsaw a-t-il été coupé de J7? Dans quelle mesure la communauté est-elle sûre que Jigsaw sera implémenté l'année prochaine dans J8? Est-il possible d'obtenir Jigsaw pour votre projet même s'il ne fait pas encore partie de la plate-forme Java?
Je suppose que ce que je demande ici est une combinaison de panique, d'intrigue et de facepalm. Maintenant que je comprends enfin ce qu'est OSGi, je ne «comprends» pas comment quelque chose comme Jigsaw a mis plus de 20 ans à se concrétiser, et comment cela aurait pu être mis en conserve à partir d'une version. Cela semble juste fondamental.
Et, en tant que développeur, je suis également curieux de savoir quelles sont mes solutions, sans OSGi.
En outre, Remarque : Je sais que ce n'est pas une « programmation pur » question de type, mais avant certains d' entre vous obtenez votre nez courbé hors de forme, je voulais à l'autre (encore une fois, pour le dossier) que je délibérément mis cette question sur ALORS. C'est parce que je n'ai que le plus grand respect pour mes collègues SOers et je cherche une réponse au niveau architectural de certains des "Dieux de l'informatique" que je vois rôder ici chaque jour.
Mais, pour ceux d'entre vous qui insistent absolument pour qu'une question SO soit accompagnée d'un segment de code:
int x = 9;
(Merci à tous ceux qui peuvent peser sur ce truc OSGi / Jigsaw / classloader / namespace / JAR hell!)
la source
Réponses:
Comprenez d'abord que le principal cas d'utilisation de Jigsaw est de modulariser le JRE lui-même. En tant qu'objectif secondaire, il offrira un système de modules pouvant être utilisé par d'autres bibliothèques et applications Java.
Ma position est que quelque chose comme Jigsaw est probablement nécessaire pour le JRE uniquement, mais qu'il créera beaucoup plus de problèmes qu'il ne prétend en résoudre s'il est utilisé par d'autres bibliothèques ou applications Java.
Le JRE est un cas très difficile et particulier. Il a plus de 12 ans et est un désordre effrayant, criblé de cycles de dépendance et de dépendances absurdes. Dans le même temps, il est utilisé par environ 9 millions de développeurs et probablement des milliards de systèmes en cours d'exécution. Par conséquent, vous ne pouvez absolument pas refactoriser le JRE si ce refactoring crée des modifications avec rupture.
OSGi est un système de modules qui vous aide (ou même vous oblige à) à créer un logiciel modulaire. Vous ne pouvez pas simplement saupoudrer la modularité sur une base de code non modulaire existante. Transformer une base de code non modulaire en une base de code modulaire nécessite inévitablement une certaine refactorisation: déplacer les classes dans le bon package, remplacer l'instanciation directe par l'utilisation de services découplés, etc.
Cela rend difficile d'appliquer OSGi directement à la base de code JRE, mais nous avons toujours l'obligation de diviser le JRE en plusieurs parties ou "modules" afin que des versions réduites du JRE puissent être livrées.
Je considère donc Jigsaw comme une sorte de " mesure extrême " pour maintenir le code JRE vivant tout en le fractionnant. Cela n'aide pas le code à devenir plus modulaire, et je suis convaincu que cela augmentera en fait la maintenance nécessaire pour faire évoluer toute bibliothèque ou application qui l'utilise.
Enfin: OSGi existe alors que Jigsaw n'existe pas encore et peut ne jamais exister. La communauté OSGi a 12 ans d'expérience dans le développement d'applications modulaires. Si vous êtes sérieusement intéressé par le développement d'applications modulaires, OSGi est le seul jeu en ville.
la source
C'est simple, si vous voulez faire un véritable développement basé sur des composants en Java aujourd'hui, OSGi est le seul jeu en ville.
À mon avis, Jigsaw est une combinaison d'un compromis entre ce qui est faisable dans le JDK et les mauvaises relations précédentes entre SUN et les gars de l'OSGi. Peut-être qu'il sera livré avec Java 8, mais nous devons attendre et voir.
OSGi n'est pas une panacée si vous travaillez dans un environnement d'entreprise typique et vous devrez vous familiariser avec le fonctionnement du chargement de classe car un certain nombre de bibliothèques bien connues (en vous regardant, Hibernate) ont émis des hypothèses sur la visibilité des classes qui ne sont plus valides à l'intérieur d'OSGi.
J'aime OSGi, mais je n'essaierais pas de l'adapter à un système existant. Je pèserais également les avantages et les inconvénients en termes de développement greenfield - je recommanderais de regarder les produits Apache ou Eclipse qui simplifient la vie d'OSGi et de ne pas tout faire vous-même.
Si vous ne faites pas OSGi, alors vous n'avez pas de chance si vous avez trouvé un système qui a des dépendances sur différentes versions de la même bibliothèque - tout ce que vous pouvez faire est d'essayer d'éviter le problème, même si vous avez besoin de plusieurs versions d'un la bibliothèque me semble une «odeur» d'architecture.
la source
J'adore votre utilisation de l'expression «cas de coin» pour décrire la situation actuelle.
Quoi qu'il en soit, depuis de nombreuses années, je m'intéresse aux outils et techniques qui prennent en charge la création et, mieux encore, font appliquer un code plus propre, plus découplé, plus cohérent et plus maintenable que ce qui aurait probablement été le résultat sans eux. Test Driven Design et Junit était une telle combinaison.
Après avoir passé quelques mois à déplacer une partie substantielle de notre base de code vers OSGi, je dirais qu'OSGi est un outil encore meilleur à cet égard. Et c'est vraiment une raison suffisante pour passer à OSGi. À long terme, cela vous fera économiser beaucoup d'argent.
Et, en prime, cela vous donnera une chance de faire beaucoup de choses sympas. Imaginez, lors d'une démo, mettre à jour en toute transparence le module d'authentification, sans perte de trafic, pour prendre en charge OAuth ... c'est soudain à nouveau un plaisir de créer des choses!
la source