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 7: Line 7:
 
The annotations should provide support for this model in order to
 
The annotations should provide support for this model in order to
 
enforce/encourage alignment with the existing Muse programming model.
 
enforce/encourage alignment with the existing Muse programming model.
 +
 +
<pre>
 +
/**
 +
* 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;
 +
}
 +
</pre>
  
 
<pre>
 
<pre>
Line 50: Line 81:
 
*/
 
*/
 
Class capability() default Void.class;
 
Class capability() default Void.class;
 +
}
 +
</pre>
 +
 +
<pre>
 +
/**
 +
* Annotation used to indicate a class to be exposed as a manageable resource.
 +
*/
 +
@Target(TYPE)
 +
@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;
 +
 
}
 
}
 
</pre>
 
</pre>

Revision as of 16:44, 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;
}
/**
 * Annotation used to indicate a class to be exposed as a manageable resource. 
 */
@Target(TYPE)
@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