You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gn...@apache.org on 2009/06/17 22:47:41 UTC
svn commit: r785789 - in /geronimo/sandbox/blueprint/blueprint-cm/src/main:
java/org/apache/geronimo/blueprint/compendium/cm/CmNamespaceHandler.java
resources/OSGI-INF/blueprint/blueprint-cm.xml
Author: gnodet
Date: Wed Jun 17 20:47:41 2009
New Revision: 785789
URL: http://svn.apache.org/viewvc?rev=785789&view=rev
Log:
Fix ConfigAdmin support broken because of the classloader change when creating service proxies for references
Modified:
geronimo/sandbox/blueprint/blueprint-cm/src/main/java/org/apache/geronimo/blueprint/compendium/cm/CmNamespaceHandler.java
geronimo/sandbox/blueprint/blueprint-cm/src/main/resources/OSGI-INF/blueprint/blueprint-cm.xml
Modified: geronimo/sandbox/blueprint/blueprint-cm/src/main/java/org/apache/geronimo/blueprint/compendium/cm/CmNamespaceHandler.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-cm/src/main/java/org/apache/geronimo/blueprint/compendium/cm/CmNamespaceHandler.java?rev=785789&r1=785788&r2=785789&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-cm/src/main/java/org/apache/geronimo/blueprint/compendium/cm/CmNamespaceHandler.java (original)
+++ geronimo/sandbox/blueprint/blueprint-cm/src/main/java/org/apache/geronimo/blueprint/compendium/cm/CmNamespaceHandler.java Wed Jun 17 20:47:41 2009
@@ -104,8 +104,6 @@
public static final String INTERFACE_ATTRIBUTE = "interface";
public static final String UPDATE_ATTRIBUTE = "update";
- public static final String CONFIG_ADMIN_REFERENCE_NAME = "blueprint.configadmin";
-
public static final String AUTO_EXPORT_DISABLED = "disabled";
public static final String AUTO_EXPORT_INTERFACES = "interfaces";
public static final String AUTO_EXPORT_CLASS_HIERARCHY = "class-hierarchy";
@@ -117,8 +115,28 @@
private static final Logger LOGGER = LoggerFactory.getLogger(CmNamespaceHandler.class);
+ // This property is static but it should be ok since there will be only a single instance
+ // of this class for the bundle
+ private static ConfigurationAdmin configAdmin;
+
private int idCounter;
+ public int getIdCounter() {
+ return idCounter;
+ }
+
+ public void setIdCounter(int idCounter) {
+ this.idCounter = idCounter;
+ }
+
+ public static ConfigurationAdmin getConfigAdmin() {
+ return configAdmin;
+ }
+
+ public void setConfigAdmin(ConfigurationAdmin configAdmin) {
+ this.configAdmin = configAdmin;
+ }
+
public URL getSchemaLocation(String namespace) {
return getClass().getResource("blueprint-cm.xsd");
}
@@ -126,7 +144,6 @@
public Metadata parse(Element element, ParserContext context) {
LOGGER.debug("Parsing element {" + element.getNamespaceURI() + "}" + element.getLocalName());
ComponentDefinitionRegistry registry = context.getComponentDefinitionRegistry();
- createConfigAdminProxy(context, registry);
registerManagedObjectManager(context, registry);
if (nodeNameEquals(element, PROPERTY_PLACEHOLDER_ELEMENT)) {
return parsePropertyPlaceholder(context, element);
@@ -140,7 +157,6 @@
public ComponentMetadata decorate(Node node, ComponentMetadata component, ParserContext context) {
LOGGER.debug("Decorating node {" + node.getNamespaceURI() + "}" + node.getLocalName());
ComponentDefinitionRegistry registry = context.getComponentDefinitionRegistry();
- createConfigAdminProxy(context, registry);
registerManagedObjectManager(context, registry);
if (node instanceof Element) {
if (nodeNameEquals(node, MANAGED_PROPERTIES_ELEMENT)) {
@@ -162,7 +178,7 @@
metadata.setScope(BeanMetadata.SCOPE_SINGLETON);
metadata.setRuntimeClass(CmPropertyPlaceholder.class);
metadata.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
- metadata.addProperty("configAdmin", createRef(context, CONFIG_ADMIN_REFERENCE_NAME));
+ metadata.addProperty("configAdmin", createConfigAdminProxy(context));
metadata.addProperty("persistentId", createValue(context, element.getAttribute(PERSISTENT_ID_ATTRIBUTE)));
String prefix = element.hasAttribute(PLACEHOLDER_PREFIX_ATTRIBUTE)
? element.getAttribute(PLACEHOLDER_PREFIX_ATTRIBUTE)
@@ -246,7 +262,7 @@
factoryMetadata.setRuntimeClass(CmManagedServiceFactory.class);
factoryMetadata.setInitMethod("init");
factoryMetadata.setDestroyMethod("destroy");
- factoryMetadata.addProperty("configAdmin", createRef(context, CONFIG_ADMIN_REFERENCE_NAME));
+ factoryMetadata.addProperty("configAdmin", createConfigAdminProxy(context));
factoryMetadata.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
factoryMetadata.addProperty("factoryPid", createValue(context, element.getAttribute(FACTORY_PID_ATTRIBUTE)));
String autoExport = element.hasAttribute(AUTO_EXPORT_ATTRIBUTE) ? element.getAttribute(AUTO_EXPORT_ATTRIBUTE) : AUTO_EXPORT_DEFAULT;
@@ -349,7 +365,7 @@
metadata.setDestroyMethod("destroy");
}
metadata.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
- metadata.addProperty("configAdmin", createRef(context, CONFIG_ADMIN_REFERENCE_NAME));
+ metadata.addProperty("configAdmin", createConfigAdminProxy(context));
metadata.addProperty("managedObjectManager", createRef(context, MANAGED_OBJECT_MANAGER_NAME));
metadata.addProperty("persistentId", createValue(context, persistentId));
if (element.hasAttribute(UPDATE_ATTRIBUTE)) {
@@ -378,7 +394,7 @@
metadata.setDestroyMethod("destroy");
}
metadata.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
- metadata.addProperty("configAdmin", createRef(context, CONFIG_ADMIN_REFERENCE_NAME));
+ metadata.addProperty("configAdmin", createConfigAdminProxy(context));
metadata.addProperty("managedObjectManager", createRef(context, MANAGED_OBJECT_MANAGER_NAME));
metadata.addProperty("persistentId", createValue(context, persistentId));
String updateStrategy = element.getAttribute(UPDATE_STRATEGY_ATTRIBUTE);
@@ -399,17 +415,16 @@
* Create a reference to the ConfigurationAdmin service if not already done
* and add it to the registry.
*
- * @param registry the registry to add the config admin reference to
+ * @param context the parser context
+ * @return a metadata pointing to the config admin
*/
- private void createConfigAdminProxy(ParserContext context, ComponentDefinitionRegistry registry) {
- if (registry.getComponentDefinition(CONFIG_ADMIN_REFERENCE_NAME) == null) {
- MutableReferenceMetadata reference = context.createMetadata(MutableReferenceMetadata.class);
- reference.setId(CONFIG_ADMIN_REFERENCE_NAME);
- reference.setInterface(ConfigurationAdmin.class.getName());
- reference.setAvailability(ReferenceMetadata.AVAILABILITY_MANDATORY);
- reference.setTimeout(300000);
- registry.registerComponentDefinition(reference);
- }
+ private Metadata createConfigAdminProxy(ParserContext context) {
+ MutableBeanMetadata bean = context.createMetadata(MutableBeanMetadata.class);
+ bean.setRuntimeClass(CmNamespaceHandler.class);
+ bean.setFactoryMethod("getConfigAdmin");
+ bean.setInitialization(MutableBeanMetadata.INITIALIZATION_LAZY);
+ bean.setScope(MutableBeanMetadata.SCOPE_PROTOTYPE);
+ return bean;
}
private void registerManagedObjectManager(ParserContext context, ComponentDefinitionRegistry registry) {
Modified: geronimo/sandbox/blueprint/blueprint-cm/src/main/resources/OSGI-INF/blueprint/blueprint-cm.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-cm/src/main/resources/OSGI-INF/blueprint/blueprint-cm.xml?rev=785789&r1=785788&r2=785789&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-cm/src/main/resources/OSGI-INF/blueprint/blueprint-cm.xml (original)
+++ geronimo/sandbox/blueprint/blueprint-cm/src/main/resources/OSGI-INF/blueprint/blueprint-cm.xml Wed Jun 17 20:47:41 2009
@@ -5,7 +5,11 @@
<service-properties>
<entry key="osgi.service.blueprint.namespace" value="http://www.osgi.org/xmlns/blueprint-cm/v1.0.0"/>
</service-properties>
- <bean class="org.apache.geronimo.blueprint.compendium.cm.CmNamespaceHandler"/>
+ <bean class="org.apache.geronimo.blueprint.compendium.cm.CmNamespaceHandler">
+ <property name="configAdmin">
+ <reference interface="org.osgi.service.cm.ConfigurationAdmin"/>
+ </property>
+ </bean>
</service>
</blueprint>
\ No newline at end of file