X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fapi%2FDependencyResolver.java;h=466f1ed60cafdb1b40b1e4595e4aae57d76f42af;hp=39845454ef5ed17d108255dbf5e47f5b774ab93b;hb=e003fee1268ac5cb49234d412eccd150558d85e8;hpb=f0b05b4da18af9d90c22a7e890ea6beff12e5e83 diff --git a/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/DependencyResolver.java b/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/DependencyResolver.java index 39845454ef..466f1ed60c 100644 --- a/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/DependencyResolver.java +++ b/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/DependencyResolver.java @@ -7,10 +7,14 @@ */ package org.opendaylight.controller.config.api; +import javax.management.AttributeNotFoundException; +import javax.management.InstanceNotFoundException; +import javax.management.MBeanException; import javax.management.ObjectName; - +import javax.management.ReflectionException; import org.opendaylight.controller.config.api.annotations.AbstractServiceInterface; import org.opendaylight.yangtools.concepts.Identifiable; +import org.opendaylight.yangtools.yang.binding.BaseIdentity; /** * Each new {@link org.opendaylight.controller.config.spi.Module} can receive @@ -25,15 +29,13 @@ public interface DependencyResolver extends Identifiable { * To be used during validation phase to validate serice interface of * dependent module. * - * @param expectedServiceInterface - * MBean/MXBean interface which will back the proxy object. - * @param objectName - * ObjectName of dependent module without transaction name - * (platformON). - * @param jmxAttribute - * @throws {@link IllegalArgumentException} when module is not found - * @throws {@link IllegalStateException} if module does not export this - * service interface. + * @param expectedServiceInterface MBean/MXBean interface which will back the proxy object. + * @param objectName ObjectName of dependent module without transaction name + * (platformON). + * @param jmxAttribute for reporting + * @throws IllegalArgumentException when module is not found + * @throws IllegalStateException if module does not export this + * service interface. */ void validateDependency( Class expectedServiceInterface, @@ -43,10 +45,54 @@ public interface DependencyResolver extends Identifiable { * To be used during commit phase to wire actual dependencies. * * @return dependency instance using - * {@link org.opendaylight.controller.config.spi.Module#getInstance()} - * @throws {@link IllegalArgumentException} when module is not found + * {@link org.opendaylight.controller.config.spi.Module#getInstance()} + * @throws IllegalArgumentException when module is not found */ T resolveInstance(Class expectedType, ObjectName objectName, - JmxAttribute jmxAttribute); + JmxAttribute jmxAttribute); + + + /** + * To be used during commit phase to resolve identity-ref config attributes. + * + * @return actual class object generated from identity + */ + Class resolveIdentity(IdentityAttributeRef identityRef, Class expectedBaseClass); + + + /** + * Validate identity-ref config attribute. + */ + void validateIdentity(IdentityAttributeRef identityRef, Class expectedBaseClass, JmxAttribute jmxAttribute); + + /** + * Can be used during validation or commit phase to get attribute value of dependent module. + * + * @param name either direct ObjectName of a Module (type=Module) or service reference (type=ServiceReference) of dependent Module + * @param attribute String identifying attribute name in JMX. Note that attributes start with upper case. See {@link org.opendaylight.controller.config.api.JmxAttribute#getAttributeName()} + */ + Object getAttribute(ObjectName name, String attribute) + throws MBeanException, AttributeNotFoundException, + InstanceNotFoundException, ReflectionException; + + /** + * Helper method around {@link javax.management.JMX#newMXBeanProxy(javax.management.MBeanServerConnection, javax.management.ObjectName, Class)} }. + * Returns MXBean proxy for dependent module. Can be used during validation or commit phase to inspect dependent module's attributes. + * + * @param objectName either direct ObjectName of a Module (type=Module) or service reference (type=ServiceReference) of dependent Module + * @param interfaceClass MXBean interface to be used as a proxy + * @param type of proxy for type safe return value + * @return instance of MXBean proxy + */ + T newMXBeanProxy(ObjectName objectName, Class interfaceClass); + + /** + * Check whether a dependency will be reused or (re)created. Useful when deciding if current module could be also reused. + * + * @param objectName ObjectName ID of a dependency + * @param jmxAttribute JMXAttribute ID of a dependency + * @return true if the dependency will be reused false otherwise + */ + boolean canReuseDependency(ObjectName objectName, JmxAttribute jmxAttribute); }