This is an automated email from the ASF dual-hosted git repository. djencks pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/felix-antora-site.git
commit 32127876e8a3db618b0969334f70715acf0fab7e Author: David Jencks <[email protected]> AuthorDate: Sun Jul 11 15:47:51 2021 -0700 remove mosgi doc (unmaintained) --- modules/ROOT/pages/documentation/subprojects.adoc | 2 +- .../subprojects/mosgi-managed-osgi-framework.adoc | 108 ------------- .../mosgi-managed-osgi-framework/probeguide.adoc | 180 --------------------- 3 files changed, 1 insertion(+), 289 deletions(-) diff --git a/modules/ROOT/pages/documentation/subprojects.adoc b/modules/ROOT/pages/documentation/subprojects.adoc index 667865b..ce7c83c 100644 --- a/modules/ROOT/pages/documentation/subprojects.adoc +++ b/modules/ROOT/pages/documentation/subprojects.adoc @@ -124,7 +124,7 @@ The last documentation may be found in the https://github.com/apache/felix-site- * https://github.com/apache/felix-site-pub/blob/last-cms/documentation/subprojects/apache-felix-maven-obr-plugin.html[Maven OBR Plugin] * https://github.com/apache/felix-site-pub/blob/last-cms/documentation/subprojects/apache-felix-maven-osgi-plugin.html[Maven OSGi Plugin] * https://github.com/apache/felix-site-pub/blob/last-cms/documentation/subprojects/apache-felix-maven-scr-plugin.html[Maven SCR Plugin] -* xref:documentation/subprojects/mosgi-managed-osgi-framework.adoc[MOSGi Managed OSGi framework] +* https://github.com/apache/felix-site-pub/blob/last-cms/documentation/subprojects/mosgi-managed-osgi-framework.html[MOSGi Managed OSGi framework] * xref:documentation/subprojects/apache-felix-osgi-core.adoc[OSGi Core] * xref:documentation/subprojects/apache-felix-script-console-plugin.adoc[Script Console Plugin] * xref:documentation/subprojects/apache-felix-serialization-framework.adoc[Serialization Framework] diff --git a/modules/ROOT/pages/documentation/subprojects/mosgi-managed-osgi-framework.adoc b/modules/ROOT/pages/documentation/subprojects/mosgi-managed-osgi-framework.adoc deleted file mode 100644 index 0e4b4a0..0000000 --- a/modules/ROOT/pages/documentation/subprojects/mosgi-managed-osgi-framework.adoc +++ /dev/null @@ -1,108 +0,0 @@ -= MOSGi Managed OSGi framework - -MOSGi enables the remote management of OSGi-compatible service gateways, using JMX. -The framework is a reference architecture for end-to-end gateway management. -It provides the following features: - -* relies on JMX management infrastructure (IP-based management), -* provides two JMX agents: the standard Java 1.5 agent and a specific Java 1.4 lightweight embedded agent (MX4J agent deviation), -* provides a way to deploy various probes on remote gateways, -* provides a management console, -* the graphical part of a probe (management console part) can be dynamically plugged in the management console and is dynamically downloaded. - -== Very fast QuickStart Guide - -Go into $FELIX_HOME/trunk/mosgi.doc and read Readme.txt. - -== General architecture - -The overall architecture is presented in the following picture : - -!MOSGiArchitecture.png! - -== How it works - -Managed OSGi gateways can install JMX probes from various repositories. -A JMX probe is a standard OSGi bundle that registers an xref:#_mbean_definition[#MBean] component in the managed gateway's JMX agent. - -The management console (running in a standard OSGi framework) is connected to each gateway through the JMX remoting protocol. -When it connects for the first time to a managed gateway, it asks for probes that are installed (i.e. -all MBeans registered in the TabUI JMX domain). -Then, for each MBean found, the management console asks for its graphical representation through a call to our standard API (component getUI() call). -This call redirects to a bundle in the GUI probe repository that is installed by the management console. -So the management console discovers at run-time the user interface it should use to supervise a specific remote gateway. - -Here is a description of different bundles that should be installed on both parts of the infrastructure (managed OSGi gateway and Management console). - -A managed OSGi gateway must host the following bundles : - -* JMX-MX4J Agent Service: provides a JMX agent. -Either through a wrapper to jdk1.5 standard agent or through using a specific lightweight inner agent1 (originate from mx4j project). -This agent service also declares a standard MBeanServer service interface.. -* JMX rmiregistry: wraps RMI registry life cycle. -It's used by the JMX remoting infrastructure to register -* JMX RMI connector: wraps a standard JMX remoting RMI connector -* Remote Logger: notifies log informations - -A JMX Console is an OSGi framework also (for simplicity) which should host two bundles : - -* JMX Console: the graphical framework that will host graphical plugins -* jmxconsole common tabs: tabs that are common to all gateways. -For the moment it only concerns a tab that shows remote notification (it works whith remote logger) - -== OSGi/JMX MBean registration - -MOSGi installs JMX-MX4J agent at the gateways level. -Any one can register an MBean to the JMX agent. -The registration can be made in two ways. -The direct code and the white board pattern. - -* In the direct code, one can register an MBean to the agent through the standard service interface : _javax.management.MBeanServer_ - -Example: - - org.osgi.framework.ServiceReference sr == context.getServiceReference(javax.management.MBeanServer.class.getName()); - javax.management.MBeanServer mbs=(javax.management.MBeanServer)context.getService(sr); - mbs.registerMBean(new MBeanImpl(), new ObjectName("Foo:FooName"); - -Exemple of such code is uses in _mosgi.managedelements.bundlesprobes_ code in felix repository - -* In the whiteboard pattern, one can register an MBean through registering its interface to the framework as a service. -If the interface name ends with MBean or if the interface is _javax.management.DynamicMBean_, the agent will automatically register the implementation as a standard MBean. -The objectName of the MBean can either be defined at registration time with the _org.apache.felix.mosgi.jmx.agent.Constants.OBJECTNAME_ property name or automatically build through introspection. - -Example: - - java.util.Properties prop=new java.util.Properties(); - prop.add( org.apache.felix.mosgi.jmx.agent.Constants.OBJECTNAME, "Foo:FooName"); - context.registerService(test.FooMBean.class.getName(), new test.Foo(), prop); - -== Management Console - -The management console is a ad-hoc jmx compatible console. -Its aim is not to be a concurrent to general purpose consoles like MX4J or JConsole but provides an ad-hoc user interface depending on the managed gateway. -The console is based on a plugin framework. -Each time the consol connects to a gateway it gets the list of available MBean. -Then for each registered MBean it asks for specific local bundles for managing it. -Each graphical bundle is integrated as a graphical tab in the management console. - -In the next screenshot, the gateway user has deployed 4 probes on the remote gateway : Remote Obr, Remote Bundle List, GNU/Linux and OSGi Plateform.!jmxconsoleGUI.png! - -In order to get these tabs, the gateway manager deploys the 4 probe bundles on the remote gateway and GUI tabs are automatically made available to the remote console. -These bundles are : - -* ObrProbe : a probe that enables interaction with obr for bundle deployment -* BundleProbe : a probe that enables the bundle life-cycle management -* GNU-Linux : a probe that gets status from running host operating system -* OSGi Platform : a probe that gets information from current running gateway - -These plugin are developed as simple examples and are available in felix repository. -A xref:documentation/subprojects/mosgi-managed-osgi-framework/probeguide.adoc[ProbeGuide] that describes plugin integration is available. -Plugin are dynamically removed and reinstalled each time you change your selected gateway. - -[discrete] -==== MBean Definition - -An MBean is a Management Component for the JMX framework. -It is made of an MBean interface and an implementation of it. -The MBean interface is used to make remote management with the implementation. diff --git a/modules/ROOT/pages/documentation/subprojects/mosgi-managed-osgi-framework/probeguide.adoc b/modules/ROOT/pages/documentation/subprojects/mosgi-managed-osgi-framework/probeguide.adoc deleted file mode 100644 index b491123..0000000 --- a/modules/ROOT/pages/documentation/subprojects/mosgi-managed-osgi-framework/probeguide.adoc +++ /dev/null @@ -1,180 +0,0 @@ -= Developing probes for MOSGi framework - -\{quote} - -\{quote} MOSGi is a management infrastructure for OSGi gateways remote management. -The architecture relies on JMX management infrastructure and is classically build on a three layered system: - -!ManagementLayers.png! - -* The probe layer: are low layer elements that drive the gateway. -They can either get information from the gateway (gateway status) or set information on it (install a bundle), -* The Agent layer: there is one agent per gateway and is responsible for maintaining access to a list of available probes, -* The Manager layer is the remote environment that can communicate with the agent to get information from the gateway through the probes - -There are various way to implements this architecture (CIM/Wbem, Snmp, JMX). -We have choose to use the JMX proposal because it is standardized in the java virtual machine since jdk1.5. - -== JMX management infrastructure synthesis - -Sun JMX proposal defines the following elements : - -!JMXLayers.png! - -* The agent is the registry for probes called MBeans and is accessed through connectors. -* MBeans are java objects that register themselves to the agent under some name -* Connectors are end points were external managers can communicate with. -There are currently two available connectors : an xml/http connector and a rmi based connector. -We are using the rmi connector (JSR160). - -In the JMX world probes are represented as MBeans. -They are java singleton object that declare a single interface to the agent. -This interface is registered under a unique name within the agent namespace. -The JMX namespace is structured as a domainname:mbeanname unique name. -The following html page represents an example of this kind of namespace (we use the httpconnector connector with the agent to get this information). - -!jmxmx4jhtml.png! - -These are various mbeans deployed on a specific gateway. -We can identify 4 columns : the mbean registered name (and domain), its implementation, a comment and a function to unregister it. - -Mbeans are component that declare a management interface that should have a syntactic name similar to the class they instrument. -For instance the class foo.Test should implement a management interface whose name is foo.TestMBean. -The registration mechanism associates a implementation (conform to the management interface) with an objectName (a unique identifier). -The corresponding call is something like :aMbeanServer.register(aMBeanImplementation, anObjectName);. -There are many kinds of MBeans (standard, dynamic, model and simple) but their description is out of the scope of this document. - -== MOSGi probe developpement - -Our management infrastructure proposes a framework for deploying standard mbean within OSGi gateways. -It also embeds a reference to a graphical part (manager view) directly in the Mbean itself. -Thus the management console is automatically populated with client part of the management system. - -=== Gateway probes - -These probes are developed in conformance to the following elements. - -* A probe must be registered under the domain TabUI. -It means that they will have a corresponding tab in our management console. -* A probe must implement a management interface conform to the JMX specification (ie : foo.LinuxProbe -\-> foo.LinuxProbeMBean) -* The management interface must extend TabIfc (which declares a single method : getBundleName()). -This methods returns an url were the management console should find a tab that can establish a management dialog with the probe. -* The probe is made available as a standard OSGi Mbean that will make its registration during the bundleActivator start method. - -The following picture illustrates relations between these elements. - -!MOSGiProbeClasses.png! - -For instance a Probe that declares a single management function _int getValue()_;should provide the following interface: - - package foo; - import insa.jmxconsole.gui.service.TabIfc; - public interface ProbeMBean extends TabIfc { - public int getValue(); - } - -And the following class: - ----- -package foo; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import insa.jmxconsole.gui.service.TabIfc; -import javax.management.MBeanServer; -public class Probe implements BundleActivator,ProbeMBean{ - ////////////////////////////////////////// - // BundleActivator Interface // - ////////////////////////////////////////// - /* The probe lifecycle is linked to the bundle lifecycle */ - public void start(BundleContext bc){ - /* Here we register the Mbean within the agent */ - ServiceReference sr = context.getServiceReference(MBeanServer.class.getName()); - if (sr!=null){ - MBeanServer server = (MbeanServer)this.bc.getService(sr); - server.registerMBean(this, new ObjectName("TabUI:name=Probe"); - } - } - public void stop(BundleContext bc){...} - /////////////////////////// - // Management interface // - /////////////////////////// - public int getValue(){return 10;} - - /* A getIfc function comes from RemoteIfc interface that enable the manager (remote console) to - a bundle that can communicate whith this probe from a remote URL */ - public String getBundleName(){ - return "http://somewhere/agraphicaltab.jar" - } -} ----- - -Once the probe is made as a bundle it can be deployed on the remote gateway. -Then a manager (management console) can ask communicate with the gateway agent to manage the probe. - -=== MOSGi JmxConsole architecture - -When a probe is deployed on a remote gateway it is manageable by standard management consoles like JConsole, MC4J... -We have developed our own management console that is able to manage probe in a more dedicated approach. - -The management console is based on a plugin mechanism. -Each plugin is represented as a tab and each tab manages a probe. -The console is launched with two bundles. -Remotegui.jar is the execution framework and remotecomponent.jar contains a sole remote logger service that gets remote notification from gateways. -The screen represented the gateway status after it has been launched.!EmptyConsole.png! -The left panel identifies connected gateways, The upper center panel is an container for tabs from managed gateways, - -The lower center panel contains the remote logger display that shows notifications from remote gateways. -When the user selects a gateway (green flag) the console will do the following actions : - -. Ask all MBeans in the TabUI domain. -. For each of these MBean, get the URL of bundle that provides the tab. -This is done through the call to getBundleName( ) method in RemoteIfc interface. -. Install the bundle on the gateway - -For instance if the user selects the green point he gets the following tabs. - -!TabbedConsole.png! - -4 probes have been deployed on the remote gateway and 4 graphical tabs have been installed. - -=== Graphical tab integration - -When developing a probe one shall provide a corresponding MOSGi tab. -It should follow these guidelines. - -* It should be a bundle in order to be remotely installed on the console -* It should implement Plugin interface with is the jmxconsole container interface specification. - -The plugin is mainly conform to the java beans specification development. -The jmxconsole acts as a bean container and each tab is a bean in this infrastructure. -This is the general architecture of a Tab class.!MOSGiConsoleTabClasses.png! - -The plugin interface has the following structure: - - package insa.jmxconsole.gui.service; - import java.awt.Component; - import java.beans.PropertyChangeListener; - public interface Plugin extends PropertyChangeListener{ - public String getName(); /* The name of the tab */ - public Component getGUI(); /* This is called by the container to get the graphical component */ - public void registerServicePlugin(); /* This is called by the framework when a new gateway is selected */ - public void unregisterServicePlugin(); - /* see before */ - public String pluginLocation(); /* This a unique identifier of the plugin */ - /* These are constants that enable communication between container and plugins. They are treated in the - propertyChange function brought by the javabean API */ - public static final String NEW_NODE_SELECTED="newNodeSelected"; - public static final String NEW_NODE_READY="newNodeReady"; - public static final String NEW_NODE_CONNECTION="newNodeConnection"; - public static final String EMPTY_NODE="emptyNode"; - public static final String PLUGIN_ADDED="pluggin_added"; - public static final String PLUGIN_REMOVED="pluggin_removed"; - } - -Implementation tabs are provided as open-source code. -You can find various implementation of this interface in felix repository in the _mosgi.managedelements.xxx.tab_ elements. - -=== Function call sequence - -The next figure presents a function call sequence when using MOSGi framework.
