当前位置:网站首页>[trans]: spécification osgi

[trans]: spécification osgi

2022-07-05 05:13:00 Morpheus WB

OSGISpécifications Aller au fond

Un.、OSGIIntroduction

1、OSGIIntroduction

OSGI(Open Service Gateway Initiative),C'est - à - dire le Protocole de passerelle de service ouvert,Est orienté versJavaSystème de modélisation dynamique pour.
OSGISignifie parOSGI AllianceL'OrganisationJavaSpécification modulaire,OSGILa partie centrale du cahier des charges est un cadre,Il définit le modèle de cycle de vie de l'application et l'enregistrement du service.Basé surOSGILe cadre définit un grand nombre deOSGIServices:Log、Gestion de la configuration,HTTPServices(ExécutionServlet)、XMLAnalyse、Accès aux appareils、Gestion des paquets、Gestion des licences、Gestion des utilisateurs、IOConnexion、JiniEtUPnPAttendez..
OSGICommunauté chinoise:http://www.osgi.com.cn/ 
OSGISite officiel:https://www.osgi.org/
OSGILe cadre réalise une élégance、Modèles de composants complets et dynamiques,Components(bundle)Peut être installé à distance sans redémarrage、Démarrage、Mise à jour et désinstallation.
OSGILa plate - forme de service offre la possibilité de modifier dynamiquement la construction sans redémarrage sur une variété d'appareils réseau.
Afin de minimiser le couplage et de le rendre gérable,OSGILa technologie offre une architecture axée sur le service,Faire en sorte que les composants se trouvent dynamiquement les uns les autres.
OSGIL'Alliance a été développée commeHTTPServeur、Configuration、Log、Sécurité、Gestion des utilisateurs、XML Et beaucoup d'interfaces de composants standard de fonction commune . Les implémentations plug - in de compatibilité pour les composants standards sont disponibles auprès de différents fournisseurs de services informatiques .
OSGi L'objectif principal est de permettre aux développeurs de créer une dynamique 、ModulaireJavaSystème.

2、OSGI Composition des spécifications

OSGI Les spécifications comprennent les sous - spécifications suivantes: :
A、FrameworkSpécifications(OSGICore, Fournir un Java Framework Pour déployer des extensibles JavaServices)
B、Package Admin ServiceSpécifications(Gérer différentsBundleRelations de référence entre.QuandBundle Lors de la mise à jour ou de la désinstallation, déterminez si d'autres services utilisent le courant Bundle)
C、Start LevelSpécifications( Définit le démarrage et l'arrêt d'un OSGi Service PlatformHeure,DifférentBundles Séquence de démarrage ou d'arrêt de )
D、Permission Admin ServiceSpécifications(Bundle Autoriser l'exécution d'autres BundleCode)
E、URL Handlers ServiceSpécifications( Comment s'inscrire URL Schema,Commentjava.io.InputStream Objet converti en JavaObjet)
F、Log ServiceSpécifications
G、Configuration Admin ServiceSpécifications
H、Device Access Specification
I、User Admin Service Specification
J、IO Connector Service Specification
K、Http Service Specification
L、Preference Service Specification
M、Wire Admin Service Specification
N、XML Parser Service Specification
O、Metatype Specification
P、Service Tracker Specification
Q、Measurment and State Specification
R、Position Specification
S、Execution Environment Specfication

3、OSGILes avantages de

OSGI Les avantages se manifestent principalement dans les domaines suivants :

A、 Architecture plug - in à chaud

Basé surOSGI L'application peut changer dynamiquement l'état de fonctionnement et le comportement .InOSGIDans le cadre, Chaque composant est échangeable à chaud ,Donc,, Les modifications apportées à un composant particulier n'affectent pas tous les composants du conteneur , La plupart des composants en cours d'exécution fonctionnent toujours comme d'habitude , Déployer un nouveau Bundle Il n'est pas nécessaire de redémarrer le serveur .

B、Réutilisabilité

OSGI Le cadre lui - même est très réutilisable , Facile à construire une architecture de programme vraiment orientée interface ,Chaque composant(Bundle) Est une unit é réutilisable indépendante .Basé surOSGICaractéristiques uniques, Au moment du développement de l'entreprise , Pour les nouveaux développements , Les modules réutilisables peuvent être simplifiés à partir des bibliothèques de composants de l'entreprise , Personnaliser les nouveaux composants , Utiliser au maximum les ressources disponibles ,Réduire les coûts de développement,Renforcer la compétitivité des entreprises.

C、Efficacité,Stabilité

OSGI Est un système stable et efficace .OSGI En tant que système de micronoyaux , Son noyau n'est qu'un petit nombre JARSac.Basé surOSGI Faible couplage du système de châssis , L'avantage de sa structure garantit qu'un composant particulier n'a pas d'impact global , Et il n'y aura pas d'écrasement du système mondial en raison d'erreurs locales .

4、OSGILes inconvénients de

A、Chaque composant(Bundle) Tous chargés par un chargeur de classe séparé ,Avec certainsJava EE Il est difficile d'intégrer un plus grand nombre de cadres dans un projet. ,Par exemple:Spring MVC、Struts2Attendez..
B、Pour l'instantOSGI Le côté administratif fourni par le cadre n'est pas assez fort , Seule la gestion de base de l'état des composants est maintenant disponible du côté de la gestion 、 Fonctions telles que la visualisation des journaux , Comme la modification dynamique de la configuration au niveau du système (config.ini)、 Modifier dynamiquement la configuration des composants (Manifest.mf)、 Aucune fonctionnalité telle que le niveau de démarrage n'est encore disponible .
C、AdoptionOSGI Développement de modules en tant que spécifications 、 Le mode de déploiement impose naturellement de nouvelles exigences aux développeurs existants. , Besoin d'apprendre de nouvelles bases OSGILe mode de développement.

2.、OSGIPrincipe du cadre

1、OSGIIntroduction au cadre

OSGI Le cadre peut être divisé conceptuellement en trois niveaux :Niveau du module、 Niveau du cycle de vie et niveau de service .
Module Layer:La couche module concerne principalement les paquets et le Code partagé;
Lifecycle Layer: La couche du cycle de vie concerne principalement la gestion du cycle de vie de l'exécution des composants ;
Service Layer: Le niveau de service concerne principalement l'interaction et la communication entre les modules .

Conception architecturale——OSGISpécifications

OSGI Framework- Oui.OSGI Service Platform Éléments essentiels de la spécification ,Offre un、 Sûr et gérable Java framework.AdoptionOSGI Framework Peut supporter une sorte de Service application Déploiement et expansion de .
OSGI Les appareils compatibles peuvent être téléchargés et installés OSGIComponents, Peut également être supprimé une fois qu'il n'est plus nécessaire . Un certain nombre de composants seront enregistrés après leur installation Services, Et a été Framework D'autres composants sous .
Dans un OSGIDans l'environnement,Framework Gérer l'installation et la mise à jour des composants , Il gère également les composants et ServicesDépendances entre.
Framework Fournir aux développeurs de composants les ressources nécessaires pour JavaDéveloppement sur la plateforme, Fournit une capacité de chargement dynamique de code pour les composants développés , Et permet aux développeurs de développer 、 Déployer une grande Services C'est facile. .
Deuxièmement,,FrameworkPourJava Les développeurs de composants fournissent des modèles de programmation concis et cohérents , Simplifie la complexité du déploiement du développement . Le modèle de programmation permet aux développeurs de lier leurs propres spécifications d'interface à OSGIDans l'environnementService.
Un modèle de programmation cohérent aide les développeurs à faire face à des erreurs critiques qui peuvent être estimées .Framework Fonctionnera sur différents environnements matériels , Mais une interface cohérente garantit que les composants peuvent fonctionner sur une interface de service cohérente .

2、Niveau du module

La couche module est OSGi La partie la plus fondamentale du cadre .
OSGiModularité de, C'est par JarAjout de paquetsmetadata Pour définir quelles classes d'exposition , Quelles classes doivent être cachées , Son Unit é de commande est appelée composant Bundle(jarSac). 
BundleOui.jar Une Unit é physique modulaire sous forme de paquet ,Contient le Code、 Fichiers de ressources et métadonnées (metadata),Etjar Les limites physiques du paquet sont également les limites encapsulées du module logique d'exécution .
Bundle- Oui.OSGiÉléments de base, Il se manifeste toujours sous la forme de Java Traditional in the Concept JarSac.
AdoptionMETA-INFSous la table des matièresMANIFEST.MF Il est défini plus en détail dans le document .
Habituellement unMANIFEST.MFLe contenu du document est le suivant::

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-Name: UtilBundle-SymbolicName: com.ibm.director.la.utilBundle-Version: 1.0.0Bundle-RequiredExecutionEnvironment: J2SE-1.5Import-Package: org.osgi.framework;version="1.3.0"Export-Package: com.ibm.director.la.util;uses:="org.osgi.framework"Bundle-ClassPath: lib/junit.jar,

MANIFEST.MF Le stockage de fichiers est en fait BundleMétadonnées pour.
Le contenu des métadonnées peut être défini avec précision BundleLes différentes caractéristiques de, En même temps, c'est mieux Bundle Identifier tout en aidant l'utilisateur à BundlePour comprendre.

3、 Couche du cycle de vie

La couche du cycle de vie OSGi Une couche dans le cadre qui appartient à la couche supérieure du module , Le fonctionnement de la couche cycle de vie repose sur la fonctionnalité de la couche module .
La fonction principale de la couche cycle de vie est de contrôler l'installation dynamique 、Ouvert、Fermer、 Mise à jour et démontage des composants .
La couche du cycle de vie est capable de gérer les applications de l'extérieur ou de construire des applications auto - gérées (Ou une combinaison des deux), Et donne à l'application elle - même une grande dynamique . 
Bundle L'utilisation de APIAvecOSGi Les couches du cycle de vie du cadre interagissent .

4、Niveau de service

OSGi Le service est enregistré auprès de OSGiUn dans le cadreJavaObjet. Peut être défini lors de l'inscription ServicePropriétés de.Et obtenirService Peut être filtré en fonction des propriétés .
BundlePeut passerBundle Pour s'inscrire dans le contexte de Service Ou demander Service.

Trois、Niveau du module

1、Introduction modulaire

La modularité est la décomposition d'un grand système en plusieurs petites unités logiques qui collaborent entre elles , Améliorer la maintenance et l'encapsulation du système en forçant le réglage des limites logiques entre les modules .

Conception architecturale——OSGISpécifications

Module(module) Définit une limite logique , Le module lui - même contrôle précisément quelles classes sont entièrement encapsulées , Et quelles classes doivent être exposées pour une utilisation externe . .Les développeurs peuvent facilement bloquer l'implémentation à l'intérieur du module , Sera rendu public API Exposition externe .

2、OSGI Modulaire et orienté objet

.La Programmation orientée objet ne met pas toutes les fonctions dans la même classe . La Programmation orientée objet trouve plusieurs choses dans le domaine des problèmes , Chaque chose a une fonction différente , Essayez d'obtenir une haute cohésion et un faible couplage . La granularité modulaire orientée objet au niveau de la classe . 
OSGi La modularisation de JARAjout de paquetsmetadata Pour définir quelles classes doivent être exposées et quelles classes doivent être cachées dans le paquet , La granularité qui contrôle la visibilité est dans le composant (JARSac)Au niveau. 
OSGI La modularité et l'orientation objet permettent d'assurer une grande cohésion et un faible couplage en contrôlant la visibilité et la disponibilité , Mais la taille des grains est différente , L'un est au niveau des composants , L'un est au niveau de l'objet .

3、JAVA Les limites de la modularité

A、 Contrôle de la visibilité du Code sous - jacent

JavaOffreprivate、public、protectedEtpackage private(Pas de modificateur) Quatre niveaux de contrôle d'accès , Fournit un OO Caractéristiques de l'emballage des données .Packege A pour fonction de diviser le Code , Mais si le code dans le paquet doit être visible à l'extérieur du paquet ,Doit être réglé àpublic(protected,Utiliser l'héritage). 
org.serc.helloworld.Hello.java:Une interface est définie

package org.serc.helloworld;  public interface Hello {      void sayHello();  }


org.serc.helloworld.impl.HelloImpl.java:C'est fait.HelloInterface

package org.serc.helloworld.impl;import org.serc.helloworld.Hello;public class HelloImpl implements Hello{    final String helloString;    public HelloImpl(String helloString){        this.helloString = helloString;    }    public void sayHello(){        System.out.println(this.helloString);    }}


org.serc.helloworld.main.Main.javaDocumentation:

package org.serc.helloworld.main;import org.serc.helloworld.Hello;import org.serc.helloworld.HelloImpl;public class Main{    final String helloString;    public static void main(String[] args){        Hello hello = new HelloImpl(“Hello,SERC!”);        hello.sayHello();    }}


Trois fichiers dans des paquets différents .HelloImpl Les détails de mise en œuvre ne doivent pas être exposés à d'autres paquets ,Mais depuisMain.javaDemainComme vous pouvez le voir dans la méthode,Pour créerHelloExemples,Doit être introduitHelloImplCatégorie,MaisHelloImpl En tant que détails de mise en œuvre de l'interface , Ne doit pas être exposé à l'utilisateur , Violation du principe de l'encapsulation . 
Si vous ne voulez pasHelloImplExposé, Des travaux supplémentaires sont nécessaires pour s'assurer que les détails de la mise en oeuvre sont cachés , Il est facile de créer une implémentation HelloExemple d'interface. Il y a plusieurs façons de (Comme le mode usine)Pour réaliser, Mais ajoute un travail supplémentaire indépendant de la fonctionnalité de l'application elle - même ,- Oui.JavaLes limites de.

B、classpathLes limites de

InclasspathChinejarAu moment du sac, Ne donnez que le chemin du fichier ,EtjarLa version du paquet、Cohérence、Dépendance,Impossibleclasspath Défini dans ou à partir de classpath Voir les attributs correspondants dans . 
classpathDansjar Les paquets sont chargés dans l'ordre ,Par exemple: 
classpath=/servlet2.2/servlet.jar;/servlet2.3/servlet.jar, Dans la pratique,JavaUtiliserservlet2.2,Au lieu deservlet2.3. Si l'équipe se développe séparément dans un grand système ,Chacun pour son propre usageservletSac, Et le numéro de version est différent , Lors de la fusion finale des résultats de développement , Quelle version est utilisée servlet Le sac est difficile à trouver . 
Même siclasspath Peut remarquer les problèmes de version , Il n'est pas non plus possible d'identifier avec précision les dépendances . Les développeurs doivent ajouter des paquets dépendants en fonction des messages de sollicitation , Jusqu'à ce que la machine virtuelle ne fonctionne pas à l'exception d'un paquet manquant . 

C、OSGIC'est exact.JAVA Amélioration limitée

OSGi Très bien résolu JAVALes limites de:
Visibilité du paquet :OSGi En introduisant le mécanisme de visibilité du paquet , Contrôle complet des modules auxquels le Code d'un paquet est visible , Au lieu de se limiter à une visibilité non différenciée , Et donc parfait Java Contrôle d'accès au Code pour .
La version du paquet:OSGi En ajoutant des informations de version au paquet , Contrôle précis des dépendances du Code , Assurer la cohérence de la version du Code ,Ça compenseclasspathLes inconvénients de.

4、ComponentsBundleIntroduction

Components(bundle)Oui.jar Une Unit é physique modulaire sous forme de paquet , Code inclus 、 Fichiers de ressources et métadonnées (metadata),Etjar Les limites physiques du paquet sont également les limites encapsulées du module logique d'exécution . 

Conception architecturale——OSGISpécifications

En standardjarEnveloppémanifest Ajouter des composants au fichier (bundle) Caractéristiques modulaires de (metadata)Après,jar Le sac devient bundle. 
bundleEt fréquentjar La plus grande différence entre les paquets est les métadonnées .
Bundle Le but des métadonnées est de décrire avec précision bundleCaractéristiques,JeanOSGiPaire de cadresbundle Effectuer divers travaux de traitement ( Comme la résolution des dépendances , Encapsulation forcée, etc. ), Les métadonnées se composent principalement de trois parties : 

A、Informations lisibles(Facultatif)

OSGi La norme définit plusieurs entrées de métadonnées pour aider à mieux comprendre et utiliser bundle, Mais toutes les entrées ne sont pas obligatoires , Et n'a aucun effet sur les caractéristiques de modularisation ,OSGi Le cadre ignorera complètement l'information lisible .

Bundle-Name: SERC HelloworldBundle-Vendor: GR, SERCBundle-DocURL: http://elevenframework.orgBundle-Category: exampleBundle-Copyright: SERC  

B、bundleIdentificateur(Il faut)

bundle L'identificateur est utilisé pour identifier de façon unique un bundle.
Les premiersOSGi La norme ne fournit pas d'identification connue bundleMéthode,Jusqu'àOSGi R4Critères,“UniquebundleIdentificateur”On m'en a parlé..Pour rétrocompatibilité,Bundle-Name Ne peut pas être utilisé comme identificateur , Sinon, le travail de maintenance rétrocompatible sera augmenté , Alors utilisez le nouveau manifestPropriétésBundle-SymbolicName.

Bundle-SymbolicName: org.serc.helloworld

Bundle-Name C'est pour les utilisateurs. ,EtBundle-SymbolicNameOui.OSGi Frame Read ,JeanOSGi Le cadre peut identifier de façon unique un bundle. 
Un seul.Bundle-SymbolicName Ça doit être un identifiant unique bundle,Mais avec le temps,,bundle Il pourrait y avoir une nouvelle version , L'ajout d'une propriété de version permet bundle Des informations plus précises .

Bundle-Name: SERC HelloworldBundle-Vendor: GR, SERCBundle-DocURL: http://elevenframework.orgBundle-Category: exampleBundle-Copyright: SERC  

C、Visibilité du Code(Il faut)

La visibilité du Code est utilisée pour définir les codes internes et externes .InJavaSEDansjar Si le sac est placé classpath- Oui.,AlorsjarOui.classpath Tous les programmes suivants sont visibles , Et la visibilité ne peut pas changer .EtOSGi La norme définit les attributs suivants pour décrire la visibilité du Code :
Bundle-ClassPath: Définir la formation bundle Où se trouvent tous les codes ,Java DansclasspathEst définijarEmplacement du sac,EtBundle-ClassPath La propriété décrit bundleClasse internebundleChemin dans.Par exemple:

Bundle-ClassPath:.,other-classes/,embedded.jar

Export-Package: Exigences explicites en matière d'exposition et autres bundleCode partagé, Chaque paquet est séparé par des virgules , Chaque paquet peut être modifié par des mots modificateurs pour modifier d'autres caractéristiques du paquet .

Export-Package: org.serc.hellworld; vendor=”SERC”,org.serc.hellworld.impl; vendor=”Gou Rui” 

Import-Package:Définitionbundle Code externe dépendant , Son format et Export-PackageMême chose., Et vous pouvez aussi utiliser des modificateurs pour modifier le paquet . Les modificateurs sont utilisés pour limiter la portée des paquets dépendants ,Comme un filtre,Contrairement àExport-Package Les caractéristiques utilisées pour déclarer le paquet .Par exemple: 

Import-Package: org.serc.helloworld; vendor=”SERC”

Quatre、 Couche du cycle de vie

1、 Introduction à la couche du cycle de vie

La couche du cycle de vie OSGi Une couche dans le cadre qui appartient à la couche supérieure du module , Son fonctionnement repose sur la fonctionnalité de la couche modulaire . La fonction principale de la couche cycle de vie est de permettre aux développeurs de gérer les applications de l'extérieur ou de construire des applications auto - gérées (Ou une combinaison des deux), Et donne à l'application elle - même une grande dynamique .

2、 Introduction à la gestion du cycle de vie

En général,Procédure( Ou une partie de la procédure ) Doit obéir à une sorte de cycle de vie . Le cycle de vie du logiciel est 4 Une phase typique ,Comme suit:

Conception architecturale——OSGISpécifications

Si vous créez une application ,Il faut d'abord installer(install)Application; Lorsque toutes les dépendances de l'application sont satisfaites , L'application peut être exécutée ; Si l'application n'est plus nécessaire ,Ça peut s'arrêter.(stop);Après un certain temps,Une mise à jour peut être nécessaire(update)Version appliquée;Final, Peut être supprimé (remove)Application. 
En manipulant l'application à l'extérieur ou à l'intérieur , Terminer le processus de gestion du cycle de vie de l'application . Pour les applications non modulaires , L'opération s'adresse à l'ensemble de l'application ; Pour les applications modulaires , Peut être plus fin ( Pour un module dans l'application )Gestion du cycle de vie de.

3、OSGi bundleCycle de vie

Pour utiliser des composants (bundle), Il faut utiliser la couche cycle de vie APIAvecOSGi Les couches du cycle de vie du cadre interagissent .
OSGi Le noyau du cadre n'impose pas l'utilisation d'un APIMécanismes d'interaction(Comme la ligne de commande,GUI,OuXMLProfil, etc),C'est juste queJava APIC'est juste, Les développeurs peuvent créer n'importe quel modèle d'interaction qu'ils veulent , La flexibilité du cadre est garantie . 
En standardJavaEn programmation, Sera adopté jarMets le sac.classpathÀ utiliserjarSac,EtbundleC'est différent..Bundle Seulement si elle est installée (install)À unOSGi Peut être utilisé dans l'instance d'exécution du cadre ,EtOSGiAppui au cadrebundle Gestion complète du cycle de vie , Et prend en charge ces opérations administratives dans l'exécution de l'application , Sa dynamique est évidente . 
Bundle Le diagramme de transition de l'état du cycle de vie est le suivant :

Conception architecturale——OSGISpécifications

Peut passerBundleDegetStateComment obtenirbundleÉtat actuel de.
StartingEtStopping L'état est transitoire , Passe automatiquement à l'état suivant après un certain temps , Aucune condition de transfert n'est requise .

4、 Couche du cycle de vie API

Cycle de vie APIPrincipalement parBundleActivator、BundleContext、Bundle Trois interfaces de base .

A、BundleActivator

BundleActivator Permettre aux développeurs de capturer bundleDestartEtstopÉvénements, Et faire des réponses personnalisées . 
BundleActivatorLes interfaces sont définies comme suit::

public interface BundleActivator {    public void start(BundleContext context) throws Exception;    public void stop(Bundlecontext context) throws Exception;}

Si une classe implémenteBundleActivatorInterface, Alors la classe devient Activator. Mais il ne suffit pas d'avoir une mise en œuvre ,Il fautOSGi Le cadre le sait. ActivatorL'existence de.Il faut doncMANIFEST .Ajouter l'attribut suivant au fichier : 

Bundle-Activator:org.demo.Activator

QuandbundleDémarrage(start)Quand,OSGi Le cadre appelle ActivatorDestartMéthodes, Il en va de même pour stopMéthodes. 
Pas tous.bundleJ'en ai besoin.activator,Parfois...bundle Juste pour le reste bundlePartager le Code, Il n'est pas nécessaire d'effectuer des actions redondantes au démarrage et à l'arrêt .Utiliser ou nonBundleActivatorExcuse,Une analyse spécifique des problèmes spécifiques est nécessaire. 

B、BundleContext

BundleContext- Oui.bundle Contexte d'exécution dans le cadre , Fournit un moyen d'interagir avec le cadre . 
BundleContext Les méthodes de l'interface sont principalement divisées en deux catégories , Une catégorie est liée au déploiement et à la gestion du cycle de vie , Une autre catégorie concerne l'utilisation de la couche de service pour bundle Méthodes d'interaction .

public interface BundleContext {    String getProperty(String key);    Bundle getBundle();    Bundle installBundle(String location, InputStream input) throws BundleException;    Bundle installBundle(String location) throws BundleException;    Bundle getBundle(long id);    Bundle[] getBundles();    void addBundleListener(BundleListener listener);    void removeBundleListener(BundleListener listener);    void addFrameworkListener(FrameworkListener listener);    void removeFrameworkListener(FrameworkListener listener);}

BundleContext Interface pour bundle Est le seul contexte d'exécution ,Et seulement sibundleC'est àactive .Le contexte d'exécution est significatif lorsque l'état est ,C'est - à - dire dansstart Méthode appelée et stop Entre les deux points dans le temps où la méthode est appelée .Si unbundle Non. activePériode de temps,Mais le composantbundlecontextObjet utilisé, Le cadre lance une exception . 
.Le cadre utilise cet objet contextuel pour bundle Sécurité et allocation des ressources pour ,Alors...BundleContext L'objet doit être considéré comme privé , Il ne faut pas se laisser aller bundleTransfert entre.

C、Bundle

Bundle Représente logiquement un bundle,OSGi Une physique dans l'environnement bundleCorrespondant à unbundleObjet.bundleL'objet contientbundle Informations de base et bundle Interface de contrôle pour la période de déclaration . 
InBundleContextDans l'interface,getBundleLa méthode peut obtenirBundleObjet. 
Pour chaque bundle, Les cadres créent tous un Bundle Objet exprimé logiquement .BundleDéfini dans l'interfacebundle Approche de la gestion du cycle de vie :

public interface Bundle {    BundleContext getBundleContext();    long getBundleId();    Dictionary getHeaders();    Dictionary getHeaders(String locale);    String getLocation();    int getState();    String getSymbolicName();    Version getVersion();    void start(int options) throws BundleException;    void start() throws BundleException;    void stop(int options) throws BundleException;    void stop() throws BundleException;    void update(InputStream input) throws BundleException;    void update() throws BundleException;    void uninstall() throws BundleException;}

La plupartOSGi Toutes les implémentations du cadre vont locatioin Interprété comme signifiant OSGi bundleUnURL, Passe quand tu en as besoin URLOui.bundle Télécharger dans le cadre pour l'installation et l'utilisation .Mais...OSGiLa norme ne précise paslocation Doit prendre la forme URL,EtURL Ce n'est pas non plus une nécessité , Vous pouvez également utiliser le flux d'entrée (Input Stream)Pour installerbundle. 
bundle Je ne peux pas changer d'état par moi - même ,Comme unactiveDebundleJe ne peux passtopMoi - même.,stop Je lance une exception .

Cinq、Niveau de service

1、Description du service

Un service est un contrat entre un fournisseur de services et un consommateur de services . Les utilisateurs ne se soucient généralement pas des détails de la mise en oeuvre du service , Tout ce qui compte, c'est la satisfaction du contrat ( Quelles fonctions le service devrait - il fournir , Quel format est satisfait ). Le processus d'utilisation des services comprend la découverte des services et la conclusion d'ententes. , Le service correspondant doit être trouvé par les caractéristiques symboliques du Service .

2、OSGINiveau de service

Le niveau de service estOSGi La couche supérieure du cadre , Le niveau de service apporte plus de dynamique , Et en utilisant un modèle de programmation axé sur le service .Quand unbundle Discovery commence à utiliser OSGi Après un service , Le service peut changer ou disparaître à tout moment . 
OSGi Le cadre dispose d'un registre centralisé , Conformité au Registre publish-find-bindModèle: 

Conception architecturale——OSGISpécifications

Un fournisseur de servicesbundlePeut être publiéPOJO Entité servant de service ; Un utilisateur du service bundle Le service peut être trouvé et lié via le registre . 
Peut passerBundleContext Interface pour compléter la publication du service 、Découverte、BIND,Comme suit:

public interface BundleContext {       void addServiceListener(ServiceListener listener, String filter) throws InvalidSyntaxException;      void addServiceListener(ServiceListener listener);      void removeServiceListener(ServiceListener listener);      ServiceRegistration registerService(String[] clazzes, Object service, Dictionary properties);       ServiceRegistration registerService(String clazz, Object service, Dictionary properties);      ServiceRegistration[] getServiceReferences(String clazz, String filter) throws InvalidSyntaxException;      ServiceRegistration[] getAllServiceReferences(String clazz, String filter) throws InvalidSyntaxException;      ServiceReference getServiceReference(String clazz);      Object getService(ServiceReference reference);      boolean ungetService(ServiceReference reference);  }

3、Services de publication

Pour que les autres bundle Découvrez le Service , Le service doit être caractérisé avant sa publication . Les caractéristiques de service incluent le nom de l'interface ( Ça pourrait être un tableau de noms ), Implémentation de l'interface et une option java.util.Dictionary Type d'information sur les métadonnées .Voici quelques exemples:

String[] interfaces =  new String[]{StockListing.class.getName(), StockChart.class.getname()};  Dictionary metadata =  new Properties();  metadata.setProperty("name", "LSE");  metadata.setProperty("currency", Currency.getInstance("GBP"));  metadata.setProperty("country", "GB");  ServiceRegistration registration = bundleContext.registerService(interfaces, new LSE(), metadata);

Dans les codes ci - dessus,AdoptionServiceRegistration L'objet peut mettre à jour les métadonnées du service : 

registration.setProperties(newMetadata);

Les services peuvent être déconnectés directement : 

registration.unregister();

ServiceRegistration L'objet ne peut pas être différent des autres BundlesPartage,Parce queServiceRegistration Objet et service de publication bundle Interdépendance du cycle de vie .Sibundle N'existe plus dans l'environnement d'exécution du cadre ,AlorsServiceRegistration L'objet ne devrait pas non plus exister . 
Paramètres dans le Codenew LSE()C'est unPOJO, Il n'est pas nécessaire de réaliser OSGi Type ou utilisation des dimensions , Tant que le contrat de service est respecté . 
Si, avant de supprimer un service publié bundleEt l'arrêt, Le cadre aide à supprimer les services .

4、Services de découverte

Le bon service peut être trouvé dans le registre selon le contrat de service . L'interface pour découvrir le service et obtenir ses références est la suivante :

ServiceReference reference = bundleContext.getServiceReference(StockListing.class.getName());  

reference Est une référence indirecte à l'objet de service , L'objet de service n'est pas directement utilisé pour découpler l'utilisation du Service de la mise en oeuvre du service , Utilisez le registre des services comme intermédiaire entre les deux , Pour atteindre les objectifs du Service de suivi et de contrôle , Les utilisateurs peuvent également être informés de la disparition du service . 
ServiceReferenceÇa pourrait être dansbundle Partager , Avec l'utilisation du service bundleIndépendant du cycle de vie. 
IngetServiceReferenceDans la méthode,Sélectionnerservice La priorité par défaut pour est de sélectionner d'abord service.rankLe plus élevé,Inrank Sélectionnez le plus ancien enregistré dans le cadre dans le même cas . En plus des règles par défaut ,Il est encore possible degetServiceReferences En ajoutant un paramètre de filtre ( Comme deuxième argument pour appeler la méthode ) Pour faire quelques filtres .

ServiceReference[] references = bundleContext.getServiceReferences(StockListing.class.getName(),                                 "(&(currency=GBP)(objectClass=org.example.StockChart))");

Le paramètre correspondant est une chaîne , Le format de la chaîne appartient à LDAPFormat de la requête,InRFC1960 Description complète dans la norme . 
Le contenu à gauche du signe égal dans la chaîne est des métadonnées (Dictionary)La valeur de gauche dans, Correspond aux métadonnées du service en utilisant la valeur de droite correspondant à la valeur de gauche . Voici un exemple de correspondance : 
Correspondance des attributs:

(name=John Smith) (age>=20) (age<=65) 

Correspondance floue: 

(name~=johnsmith)

Les jokers correspondent: 

(name=Jo*n*Smith*)

Déterminer si un attribut existe : 

(name=)

Conditions et: 

(&(name=John Smith)(occupation=doctor))

Conditions ou: 

(|(name~=John Smith)(name~=Smith John))

*Condition non: ** 

(!(name=John Smith))

5、 Lier et utiliser les services

Après la découverte du Service , Avant d'utiliser le service , Les services mis en œuvre doivent être liés à partir du registre .

StockListing listing = (StockListing) bundleContext.getService(reference);

Retour àPOJO L'Instance et l'instance enregistrée dans le registre sont les mêmes . 
Chaque utilisationgetServiceLa méthode, Le registre ajoute le nombre d'utilisations du service correspondant à 1, Il enregistre également qui utilise le service . Si vous ne voulez pas utiliser le Service ,Services de déconnexion.

bundleContext.ungetService(reference); listing = null; 

Six、OSGIRéalisation

1、OSGIRéalisation concrète

OSGI- Oui.OSGi AllianceL'OrganisationJavaSpécification modulaire,Mais...OSGI L'Alliance n'a pas donné OSGIMise en œuvre du conteneur, Mise en œuvre spécifique par un tiers ,Plus utilisé actuellementOSGILe conteneur aApache Felix、Equinox、Spring DM.

2、OSGIDeJAVARéalisation

A、Apache Felix

Apache Felix- Oui.ApacheUn sous le drapeauOSGiCadre,FelixC'est unOSGiVersion4StandardApacheRéalisation.Apache Felix Les services fournis couvrent presque tous les OSGi 4.2La norme, En outre, certaines fonctions non standard sont disponibles ,Par exempleiPOJO.Apache Felix Le cadre lui - même est très compact ,C'est tout.3 Un sac plus un shellÇa marche.,Qu'il s'agisse de développement ouDebug C'est très simple. .

B、Equinox

Equinox- Oui.EclipseSous le drapeauOSGiCadre, Elle est aussi EclipseAdoption,- Oui.EclipseDePDE La couche inférieure de l'environnement de développement .Equinox C'est aussi un cadre assez complet en soi , La fonctionnalité offerte n'est pas comparable à Felix Moins. .Equinox Est considéré comme un développement Eclipse PluginPlus d'applications,Si vous développez unWebProcédure, Vous sentirez que la fonctionnalité et la documentation ne sont pas assez complètes .Equinox Le plus grand avantage est de Eclipseétroitement liés,Une fois installéPDE,C'est déjà fait.Equinox,Peut être pratique dansEclipse Développé par Bundle,Démarrage、 Les opérations telles que le déploiement sont également extrêmement simples ,Et il y a une spécialitéDebugInterface.

C、Spring DM

Spring DM- Oui.SpringSous le drapeauOSGiCadre,Spring DM La plus grande caractéristique de SpringCadre.

D、Knopflerfish

Knopflerfish- Oui.OSGiLe précurseur de, C'est assez standard OSGiCadre, Offre la grande majorité des fonctions standard .

3、OSGIDeC++Réalisation

A、CTK Plugin Framework

CTKEst basé surQt Projet Open Source développé pour soutenir le calcul d'images biomédicales .
CTKDansCTK Plugin Framework Le module s'inspire OSGIDes idées,Et a réalisé presque entièrementOSGICadreAPI.

B、C++ Micro Services

C++ Micro ServicesEst basé surOSGI Utilisé pour créer et gérer des systèmes logiciels modulaires C++Bibliothèque.

4、OSGIDeCRéalisation

Apache CelixEst basé surC/C++DeOSGIMise en œuvre de la spécification, Offre une programmation axée sur les composants et le service (SOP) Cadre pour le développement d'applications modulaires .
Apache CelixUtilisation principaleCDéveloppement linguistique,Pour soutenirC++, Ajout d'abstractions sous forme de bibliothèques .
Site officiel:http://celix.apache.org/

Sept、OSGIExemples d'application

Nous devons résoudre quelques problèmes :

1. Comment comprendre et comprendre correctement OSGITechnique?

Revenons à certains de nos scénarios de développement précédents ,Supposons que nous utilisionsSSH(struts+spring+hibernate) Cadre pour développer notre WebProjets, Nous concevons et développons des produits en modules , Le but de notre sous - module est de réaliser entre les modules “Découplage”, Un autre objectif est de faciliter le contrôle et la gestion d'un projet .
Après la décomposition modulaire d'un projet,Nous pouvons mettre différents modules à la disposition de différents développeurs pour compléter le développement,Puis le gestionnaire de projet rassemble les modules que tout le monde a complétés,Et ensuite assemblé en un produit final. En général, nous développons ce scénario de base .

Donc ce que nous avions prévu au moment du développement était la fonctionnalité du système , .Division des modules en fonction des fonctions du système ,C'est - à - dire, La fonctionnalité de ce produit ou les besoins du client sont une base importante pour la Division .

Mais au fur et à mesure que nous développons,Nous devons rester en contact les uns avec les autres.,Par exemple,AModule à partir deBLe module a des données.,EtBLe module peut être appeléCQuelques méthodes dans le module(En plus des classes d'outils de base communes).Donc ces modules ne sont qu'une partition logique.

Et surtout,,Nous déployons le projet final àtomcatOujBossDéploiement sur le serveur.Quand on démarrera le serveur,Pouvez - vous désactiver un module ou une fonction du projet?C'est impossible.,Une fois le serveur démarré,Tous les modules vont démarrer ensemble,Utiliser les ressources du serveur,Donc le module ne peut pas être éteint,Supposons qu'il soit forcé de l'enlever.,Affecte d'autres fonctions.

Ce sont là quelques - unes des limites de notre développement modulaire traditionnel. .

Nous poursuivons un état d'esprit dans le développement de logiciels, C'est ce qui se passe vraiment entre les modules. “Découplage”、“Séparation”,.De cette façon, nous serons plus flexibles dans la gestion et le développement de logiciels,.Plus de flexibilité et de contrôle même lors du déploiement de projets pour les clients. Mais on utilisait SSH .Nous ne pouvons pas répondre à cette exigence lorsque nous développons des produits avec des modèles architecturaux tels que des cadres .

C'est pourquoi nous“Architecte” Ou les plus grands technologues travaillent dur pour explorer et essayer le développement modulaire ,Et puis notreOSGI Des spécifications techniques sont apparues .

Maintenant notreOSGILa technologie peut répondre à ce que nous avons dit précédemment:Séparation complète entre les différents modules,Au lieu d'une séparation logique,Est une séparation physique,C'est - à - dire que certains modules peuvent être retirés directement après l'exécution du déploiement sans arrêter le serveur,Les fonctions des autres modules ne sont pas non plus affectées.

Par conséquent,,OSGI La technologie deviendra très importante à l'avenir , Parce qu'il est sur le chemin de réaliser le découplage des modules , Aller plus loin que ce que tout le monde utilise aujourd'hui SSH Le cadre va plus loin . Cette technologie est à grande échelle dans le futur 、 Accès élevé 、Haute concurrenceJava Domaine du développement modulaire , Ou dans la gestion normalisée du projet , Qui dépasserait largement SSH Statut du cadre égal .

Certains des principaux serveurs d'application ,OracleDeweblogicServeur,IBMDeWebSphere,JBoss,EtSunDe l'entrepriseglassfishServeur,C'est vrai.OSGI Offre un soutien solide ,Tout est dansOSGI Basé sur la technologie . Il y a tellement de grands fabricants qui soutiennent OSGICette technologie, On peut voir OSGIL'importance de la technologie.Donc dans le futurOSGI Est une technologie très importante pour l'avenir .

MaisOSGI Je ne peux toujours pas me détacher du support du cadre ,Parce queOSGI En soi, beaucoup spring Contrôle de base du cadre égal (Parce que pour réaliserAOP Fonctions telles que l'injection dépendante ), Mais quel projet ne dépend pas d'un tiers jarEt alors??

2.OSGI Comment la technologie contribue - t - elle au développement de nos projets? ?

(1)Présentation du projet

Ensuite, nous avons passé en revue le Code du projet pour montrer OSGILe charme de:
Ne nous précipitons pas pour comprendre comment utiliser OSGI, Commençons par un projet OSGIEffets de.
( Les codes d'ingénierie suivants sont des exemples de vidéos d'enseignement en ligne , Je n'ai pas de code source ici. )
(Dis - le à l'avance.: Le point clé que nous devons apprendre est comment notre site de shopping se combine OSGITechnique, Rendre le projet plus flexible et plus contrôlable , Et le site de shopping lui - même n'est pas la question .)
Tout d'abord,Eclipse Ouvrez d'abord notre projet de version serveur unique :

https://img-blog.csdn.net/20160310173347989?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Démarrage réussi:

https://img-blog.csdn.net/20160310173401567?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

C'est unWebProjets, On ouvre le Navigateur pour voir les effets :

https://img-blog.csdn.net/20160310173429161?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Comme vous pouvez le voir, c'est un projet de magasinage en ligne .

Regardons ce que nous faisons sur la base de OSGI Quelle est la différence entre un projet technologique et un projet général .
Présentez d'abord les modules de ce projet :

1. Présentation générale

https://img-blog.csdn.net/20160310173537333?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
2. Présentation des sous - catégories ( Sous - produits de grandes catégories )

https://img-blog.csdn.net/20160310173552836?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Après avoir cliqué sur Entrée, vous obtenez des informations spécifiques sur le produit

https://img-blog.csdn.net/20160310173601523?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

3.Panier
Il n'y a rien à acheter :

https://img-blog.csdn.net/20160310173611224?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Après l'achat:

https://img-blog.csdn.net/20160310173619274?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

4.Gestion des produits(Sur les étagères.、Cadre inférieur)

Je vois., Ce projet n'est pas différent de celui que nous développons habituellement ( Je sais que l'interface est rudimentaire = =), L'accent est mis sur le processus de démarrage et de chargement .

https://img-blog.csdn.net/20160310173629587?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

(2)À propos du serveur

Nous rechargeons dynamiquement ,C'est - à - dire“Déploiement à chaud” Pour lancer notre projet .C'est - à - dire, Notre projet le place dans WebUne fois dans le contenant, On peut lui enlever certaines fonctions , Et ça n'affectera pas les autres modules. .

On a déjà couru. tomcatQuand, Démarrer le serveur ,Oui.Web Le projet est chargé en une seule fois , Un message similaire apparaîtra sur la console :

https://img-blog.csdn.net/20160310173643287?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
Mais ce n'était pas le cas lorsque nous avons lancé le projet. :

https://img-blog.csdn.net/20160310173703556?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
Alors on n'a pas besoin tomcatEtjBoss, C'est comme ça que ça se déploie et commence WebEt le projet??Non, pas du tout.Web L'intergiciel du serveur ?Je vais vous dire,OSGI Il y a aussi une technologie intégrée WebServeur,C'estjetty.

 

Nous avons ouvert ce projet Run ConfigurationConfigurer la fenêtre, Jetez un coup d'oeil aux paquets plug - in nécessaires pour exécuter ce projet :

https://img-blog.csdn.net/20160310173803120?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Je vois.,Sauf quelques - uns.WebCe dont le projet a besoinjarSac,C'est toujours le cas.jettyL'existence de. Donc le serveur utilisé est jetty,Ce n'est plustomcat.


Tout le monde est peut - être encore familier tomcat,PourjettyPas trop familier., Alors, nous vous présentons brièvement jetty:
jetty C'est aussi un meilleur WebConteneur, En termes de performance, plus que tomcatBeaucoup plus puissant(Si la concurrence est élevée,Longue connexion). Et toute sa structure tomcat C'est beaucoup plus léger. (tomcat Plus gros. ), La différence spécifique que tout le monde peut aller en ligne pour voir par lui - même .


(3) Mode de fonctionnement et plug - ins

Nous allons maintenant examiner officiellement ce projet à OSGI Mode de fonctionnement sous :
Quand on a commencé , Quatre modules chargés ,Respectivement.:

https://img-blog.csdn.net/20160310173838100?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Selon l'idée de modularisation, ce sont les quatre modules fonctionnels correspondants .
Ils correspondent aux codes d'ingénierie des quatre modules fonctionnels que nous pouvons trouver dans EclipseVoir:

Regardons notre configuration de démarrage ( Toujours ouvert oui Run ConfigurationConfigurer la fenêtre):

https://img-blog.csdn.net/20160310173851028?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

https://img-blog.csdn.net/20160310173908287?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

La configuration est divisée en“WorkSpace”Et“Target Platform”, Nos espaces de travail ( Nous avons écrit nos propres modules de projet et classes d'outils ) Plug - in et plate - forme d'exécution pour (Quelques dépendancesjarConfiguration de)Plug - in pour, Une combinaison des deux pour démarrer notre projet fonctionnera .

Après le lancement du projet , Saisissez les commandes sur la console “ss”, Et tous nos plug - ins chargés fonctionnent :

https://img-blog.csdn.net/20160310173922491?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
Au démarrage , Il va d'abord charger EclipseDeOSGIPlug - in(Eclipse En soi. OSGIConteneur pour):

On ouvre le nôtre.EclipseRépertoire d'installation,Et trouverpluginsDossiers,Je vois.EclipseTous les plug - ins:

https://img-blog.csdn.net/20160310173950670?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Vous pouvez voir qu'il y a un dossier ,Oui.jar Forme du plug - in .

Comment comprendre les plug - ins ?
Les plug - ins sont en fait des outils de développement ou OSGI Conteneur géré et configuré jarSac.  

Nous ouvrons n'importe quel plug - in de type dossier ,Je vois.:

https://img-blog.csdn.net/20160310174004498?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Vous pouvez voir à l'intérieur sauf lib Il y a autre chose ,Et il y en a un“OSGI-INF”Dossiers. Et peu importe ce que c'est , C'est tout ce qu'il nous faut. EclipseJuste un.OSGIConteneur.

(4) Déploiement à chaud et démarrage à chaud

Revenons à l'essentiel. , Pendant le démarrage , On n'arrête pas de courir , Et ensuite arrêter un des modules :

Si on devait arrêter “Gestion”Module:

https://img-blog.csdn.net/20160310174017304?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

C'est - à - dire arrêteridPour22Plug - in pour

Résultats:

https://img-blog.csdn.net/20160310174029225?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
Puis rafraîchir la page principale de notre site :

https://img-blog.csdn.net/20160310174125101?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Découvrir notre“Gestion” Le module a disparu. !

La disparition de ce module n'est pas javascriptDe la technologie, C'est une technologie de serveur. , Nous l'avons désinstallé dynamiquement à l'intérieur du serveur .

Après la suppression de notre module de gestion , Les autres fonctionnalités du site ne sont pas affectées . Jusqu'à présent, notre serveur n'a fait aucune pause ou arrêt .

On arrête. “Panier”Module:

https://img-blog.csdn.net/20160310174849760?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Effets:

https://img-blog.csdn.net/20160310174743931?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Les autres modules restent intacts .

Nous avons désactivé deux modules ,Entrez maintenantss Regardez le fonctionnement de tous les plug - ins et modules :

https://img-blog.csdn.net/20160310174908917?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Vous pouvez voir que nos deux modules sont RESOLVEDStatut, C'est - à - dire l'état à résoudre .

https://img-blog.csdn.net/20160310174936589?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Bien sûr, nous pouvons également déployer nos modules avec le serveur allumé :
Si on démarre le module panier :

https://img-blog.csdn.net/20160310174936589?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
J'ai découvert que le panier était revenu :

https://img-blog.csdn.net/20160310174946605?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
C'est ce qu'on appelle un déploiement à chaud. , C'est ce projet qui l'a mis dans WebUne fois dans le contenant, On peut lui enlever certaines fonctions , Et ça n'affectera pas les autres modules. .


Laissez tout le monde se sentir vraiment à travers le site Web shopping OSGI Certaines des caractéristiques puissantes de cette technologie dans le développement et la gestion de projets .
————————————————
Avis de copyright:Cet article estCSDNBlogueurs「Lotus Leaf Spring」Article original de,SuivreCC 4.0 BY-SAAccord de droit d'auteur,Veuillez joindre un lien vers la source originale et cette déclaration..
Lien vers le texte original:https://blog.csdn.net/heyeqingquan/article/details/86491707

 

原网站

版权声明
本文为[Morpheus WB]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/186/202207050509477749.html