Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "COSMOS Programming Model"

(Getting Code from CVS)
(Creating an MDR)
Line 17: Line 17:
 
=== Creating an MDR ===
 
=== Creating an MDR ===
 
Prerequisite: Import the framework bundles into workspace or install them in the target platform.   
 
Prerequisite: Import the framework bundles into workspace or install them in the target platform.   
Note: org.eclipse.cosmos.rm.sandbox.datamanager.sml bundle is an implementation of an MDR that uses an SML repository as the backend datastore. Please refer to it as an example for creating an MDR.  The following steps show how to create an MDR.   
+
Note: org.eclipse.cosmos.example.mdr and org.eclipse.cosmos.rm.sml.mdr in CVS can be used as examples for creating an MDR.  The following steps show how to create an MDR.   
 
* Create a plug-in project.  In the "Target Platform" section, select "an OSGi framework", and select "standard" from the dropdown box.  Click next to provide plugin ID, name, etc, and click Finish.
 
* Create a plug-in project.  In the "Target Platform" section, select "an OSGi framework", and select "standard" from the dropdown box.  Click next to provide plugin ID, name, etc, and click Finish.
 
* Edit the MANIFEST.MF file in the Plug-in Manifest Editor.  On the Dependencies tab, add the following dependencies and save the file:
 
* Edit the MANIFEST.MF file in the Plug-in Manifest Editor.  On the Dependencies tab, add the following dependencies and save the file:
 
**org.apache.muse.complete
 
**org.apache.muse.complete
**org.eclipse.cosmos.dc.sandbox.datamanager
+
**org.eclipse.cosmos.dc.mdr
 
* Create a class in this bundle that provides the implementation of the  
 
* Create a class in this bundle that provides the implementation of the  
 
**Annotate the class as a ManagedResource
 
**Annotate the class as a ManagedResource
Line 30: Line 30:
 
public class MyMDR extends AbstractMdr implements IDataManager, IMdrQuery
 
public class MyMDR extends AbstractMdr implements IDataManager, IMdrQuery
 
</pre>
 
</pre>
*Implement methods declared in interfaces and abstract methods from super class.  For example, the query method takes a CMDBf query as inputProvide adapter code here to parse the query, talk to the data source, and return the response in CMDBf response format.  The logic for parsing the query, invocation of APIs of data source and transforming the query output to CMDBf query response can take place in another class or OSGi bundle.
+
*Implement the getSelectorHandlerFactory method, which is an abstract method from the super class.  Return an instance of org.eclipse.cosmos.dc.cmdbf.services.provisional.query.service.ISelectorHandlerFactory.  A selector handler factory is a factory class creates handlers for CMDBf query.  Read more about the CMDBf query processing framework from this [[Providing_a_CMDBf_Query_and_Registration_Service | wiki page]].  
 
* An activator class is generated when the OSGi bundle is created.  Open the Activator java file in the editor.  COSMOS framework comes with an abstract activator that contains code required by the activators of all data managers.  Make the following updates in the activator java class:
 
* An activator class is generated when the OSGi bundle is created.  Open the Activator java file in the editor.  COSMOS framework comes with an abstract activator that contains code required by the activators of all data managers.  Make the following updates in the activator java class:
 
** Remove the "start" and "stop" method stubs generated by the eclipse.   
 
** Remove the "start" and "stop" method stubs generated by the eclipse.   

Revision as of 12:35, 12 December 2007

COSMOS provides a framework for collecting and visualizing data for system administration applications. By leveraging the COSMOS framework and providing the necessary extensions, programmers can quickly and easily create applications for collecting data from disparate data sources, and making data available through standard-based APIs or an easy-to-use user interface. This document explains the programming model used in extending the COSMOS framework.

Creating a Data Manager

Getting Code from CVS

  • Extract code from CVS using this project set file.
  • You will see errors in org.eclipse.cosmos.management.wsdm plugin. Apply this patch to remove the errors.
  • You will see errors in domain and broker projects, but they not really errors.

Class Diagram

DataManagerClassDiagram.jpg

Data Manager Architecture Block Diagram

Datamanager.jpg


Creating an MDR

Prerequisite: Import the framework bundles into workspace or install them in the target platform. Note: org.eclipse.cosmos.example.mdr and org.eclipse.cosmos.rm.sml.mdr in CVS can be used as examples for creating an MDR. The following steps show how to create an MDR.

  • Create a plug-in project. In the "Target Platform" section, select "an OSGi framework", and select "standard" from the dropdown box. Click next to provide plugin ID, name, etc, and click Finish.
  • Edit the MANIFEST.MF file in the Plug-in Manifest Editor. On the Dependencies tab, add the following dependencies and save the file:
    • org.apache.muse.complete
    • org.eclipse.cosmos.dc.mdr
  • Create a class in this bundle that provides the implementation of the
    • Annotate the class as a ManagedResource
    • Extend AbstractMDR class
    • Implement IDataManager and IMdrQuery (Although the superclass already implements these interfaces, we need this step as a temporary workaround for a bug in the management bundle.) The class signature looks something like this:
@ManagedResource
public class MyMDR extends AbstractMdr implements IDataManager, IMdrQuery
  • Implement the getSelectorHandlerFactory method, which is an abstract method from the super class. Return an instance of org.eclipse.cosmos.dc.cmdbf.services.provisional.query.service.ISelectorHandlerFactory. A selector handler factory is a factory class creates handlers for CMDBf query. Read more about the CMDBf query processing framework from this wiki page.
  • An activator class is generated when the OSGi bundle is created. Open the Activator java file in the editor. COSMOS framework comes with an abstract activator that contains code required by the activators of all data managers. Make the following updates in the activator java class:
    • Remove the "start" and "stop" method stubs generated by the eclipse.
    • Make the Activator class extend AbstractDataManagerActivator
    • Implement the getDataManagerInstance abstract method. The method will return an instance of the class that implements the capabilities. The activator will look like the following.
public class Activator extends AbstractDataManagerActivator {

	protected IDataManager getDataManagerInstance() {
		return new MyDataManager();
	}

}
  • Provide data manager configuration file: add a file call config.properties in the META-INF directory. This file contains configurable parameters for the data manager. The keys in the properties files are defined as constants in the IDataManager interface. The config values can be retrieve from the data manager implementation class using the getConfigProperty method inherited from AbstractDataManager. Here is a template of the config file:
#
# URI of the management domain
#
MGMT_DOMAIN_URI=http://localhost:80/cosmos/services/org.eclipse.cosmos.dc.domain.impl.ManagementDomain

#
# Resource ID of the management domain
#
MGMT_DOMAIN_RESOURCEID=DOMAIN

#
# URI of the data manager EPR
#
ENDPOINTADDRESS=http://localhost:80/cosmos/services/org.eclipse.cosmos.rm.dataManager.sml.impl.SmlRepositoryDataManager

#
# Resource ID of the data manager
#
ENDPOINTRESOURCEID=EXAMPLE

#
# Display name of the data manager
#
NAME=Data Manager EXAMPLE

#
# Classification of the data manager
#
CLASSIFICATION=example

#
# Dialect of the data manager
#
DIALECT=my dialect

Providing Custom Capabilities

A data manager can expose operations that are not part of the CMDBf specification by providing a custom capability and implementation. The org.eclipse.cosmos.dc.sandbox.example.* bundles provide an example on how to create a data manager with custom APIs.

The convention is to put code for the data manager in three bundles:

  1. API bundle: (e.g. org.eclipse.cosmos.dc.sandbox.example.common) This "common" bundle is used by both the server and the client.
  2. Implementation bundle: Server code that provides implementation of the custom capability.
  3. Client proxy: remote API for the data manager.

A capability is declared as a Java interface. (See org.eclipse.cosmos.dc.datamanager.example.api.ICustomCapability as an example. Please note the following components in the capability interface:

  • The interface declaration is decorated by the following annotation. Namespace is declared as a public constant in the interface class.
@ManagedResourceCapability(namespace=____)
  • Methods are decorated by the @ManagedOperation annotation.
  • The URI and QName of each operation and their parameters are also declared in the interface.

The steps for creating the implementation bundle is same as those used to create a basic MDR as described in the previous section. The difference is that the data manager implementation class will also implement the custom capability API in the class declaration, and provide the implementation in the class.

Client proxy for MDR and Data Manager

The org.eclipse.cosmos.dc.sandbox.datamanager.client and org.eclipse.cosmos.dc.sandbox.mdr.client bundles provide the client proxies for the data manager and MDR. If the client applications is simply invoking the COSMOS data manager capabilities and the CMDBf query API from remote, these two client implementation is sufficient. (See how a client application can use the proxies in the test code in org.eclipse.cosmos.dc.sandbox.datamanager.test.)

Subclass from MDRClient or DataManagerClient when you need to provide a client proxy of a data manager that provides custom capabilities.

Deployment

Back to the top