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 Bug Design 209248"

Line 83: Line 83:
 
}
 
}
 
</pre>
 
</pre>
 +
 +
The following annotations (proposed as a way to support the Singleton requirement for CMDBf) can be used for this purpose as well.
  
 
<pre>
 
<pre>
 
/**
 
/**
  * Annotation used to indicate a class to be exposed as a manageable resource.  
+
  * Annotation used to indicate a factory method to construct a framework component.  
 
  */
 
  */
@Target(TYPE)
+
@Target(METHOD)
 
@Retention(RUNTIME)
 
@Retention(RUNTIME)
 
public @interface ManagedResourceFactory {
 
public @interface ManagedResourceFactory {

Revision as of 16:51, 16 November 2007

The Muse programming model is a composition-oriented model, where capabilities can be imposed on a resource implementation externally. In the annotations, the composition model can be supported programatically by creating a single facade over multiple capability implementations, but the annotations don't provide any support to make this easier.

The annotations should provide support for this model in order to enforce/encourage alignment with the existing Muse programming model.

/**
 * Annotation used to indicate an interface which to be exposed as a distinct 
 * management capability. 
 */
@Target(TYPE)
@Retention(RUNTIME)
public @interface ManagedResourceCapability {
	
	/**
	 * A text description of the capability. 
	 * This attribute is intended for tooling support. 
	 * 
	 */
	String description() default "";
	/**
	 * The namespace of the capability. This namespace will be used for all
	 * operations and properties exposed by this capability (unless overridden) 
	 * and will uniquely identify the capability when introspecting its resource.  
	 */
	String namespace();
	
	/**
	 * Indicates that the annotated implementation may be used in conjunction
	 * with the ComposableManagedCapabilitySet annotation to implement a 
	 * composite managed resource  
	 */
	boolean composable() default false;
}

/**
 * Annotation used to decorate a ManagedResource with externally implemented capabilities 
 */
@Target(TYPE)
@Retention(RUNTIME)
public @interface ComposableManagedCapabilitySet {

	/**
	 * The set of capability classes to decorate the targeted 
	 * ManagedResource instance with. This annotation works
	 * in conjunction with the ManagedFrameworkAutowire, 
	 * ManagedResourceCapability, and ManagedResourceFactory  
	 * annotations to enable the framework to replicate the
	 * delcarative programming model exposed by Muse.xml  
	 */
	Class[] set() default {};
	
}

/**
 * Annotation used to support autowiring of 
 * Components within the management framework.
 */
@Target(FIELD)
@Retention(RUNTIME)
public @interface ManagedFrameworkAutowire {
	/**
	 * Name of the desired Component
	 */
	String name() default "";
	
	/**
	 * Class of the desired Capability. This attribute works 
	 * in conjunction with the ComposableManagedCapabilitySet
	 *  annotation
	 */
	Class capability() default Void.class;
}

The following annotations (proposed as a way to support the Singleton requirement for CMDBf) can be used for this purpose as well.

/**
 * Annotation used to indicate a factory method to construct a framework component. 
 */
@Target(METHOD)
@Retention(RUNTIME)
public @interface ManagedResourceFactory {
	
	/**
	 * If true, indicates that the resource is a singleton, and only the default 
	 * instance may be registered. All other instances attempting to register will
	 * be rejected   
	 */
	boolean singleton() default false;
	
}

Back to the top