You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gu...@apache.org on 2013/07/05 14:44:35 UTC
svn commit: r1499988 - in /felix/trunk/ipojo/runtime/core/src:
main/java/org/apache/felix/ipojo/extender/internal/linker/ManagedType.java
test/java/org/apache/felix/ipojo/extender/internal/linker/ManagedTypeTestCase.java
Author: guillaume
Date: Fri Jul 5 12:44:35 2013
New Revision: 1499988
URL: http://svn.apache.org/r1499988
Log:
FELIX-4164 Instance / Component matching regression
* Tracks instances specifying the component's name OR the component's classname
Modified:
felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/extender/internal/linker/ManagedType.java
felix/trunk/ipojo/runtime/core/src/test/java/org/apache/felix/ipojo/extender/internal/linker/ManagedTypeTestCase.java
Modified: felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/extender/internal/linker/ManagedType.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/extender/internal/linker/ManagedType.java?rev=1499988&r1=1499987&r2=1499988&view=diff
==============================================================================
--- felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/extender/internal/linker/ManagedType.java (original)
+++ felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/extender/internal/linker/ManagedType.java Fri Jul 5 12:44:35 2013
@@ -124,25 +124,32 @@ public class ManagedType implements Fact
String version = m_declaration.getComponentVersion();
if (version != null) {
// Track instance for:
- // * this component AND
+ // * this component's name OR classname
+ // AND
// * this component's version OR no version
filter = format(
- "(&(objectClass=%s)(%s=%s)(|(%s=%s)(!(%s=*))))",
+ "(&(objectClass=%s)(|(%s=%s)(%s=%s))(|(%s=%s)(!(%s=*))))",
InstanceDeclaration.class.getName(),
InstanceDeclaration.COMPONENT_NAME_PROPERTY,
m_declaration.getComponentName(),
+ InstanceDeclaration.COMPONENT_NAME_PROPERTY,
+ getComponentClassname(),
InstanceDeclaration.COMPONENT_VERSION_PROPERTY,
version,
InstanceDeclaration.COMPONENT_VERSION_PROPERTY
);
} else {
// Track instance for:
- // * this component AND no version
+ // * this component's name OR classname
+ // AND
+ // * no version
filter = format(
- "(&(objectClass=%s)(%s=%s)(!(%s=*)))",
+ "(&(objectClass=%s)(|(%s=%s)(%s=%s))(!(%s=*)))",
InstanceDeclaration.class.getName(),
InstanceDeclaration.COMPONENT_NAME_PROPERTY,
m_declaration.getComponentName(),
+ InstanceDeclaration.COMPONENT_NAME_PROPERTY,
+ getComponentClassname(),
InstanceDeclaration.COMPONENT_VERSION_PROPERTY
);
}
@@ -150,6 +157,13 @@ public class ManagedType implements Fact
}
/**
+ * Returns the {@literal classname} attribute value.
+ */
+ private String getComponentClassname() {
+ return m_declaration.getComponentMetadata().getAttribute("classname");
+ }
+
+ /**
* Starting the management.
* We open only the extension tracker.
*/
Modified: felix/trunk/ipojo/runtime/core/src/test/java/org/apache/felix/ipojo/extender/internal/linker/ManagedTypeTestCase.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/runtime/core/src/test/java/org/apache/felix/ipojo/extender/internal/linker/ManagedTypeTestCase.java?rev=1499988&r1=1499987&r2=1499988&view=diff
==============================================================================
--- felix/trunk/ipojo/runtime/core/src/test/java/org/apache/felix/ipojo/extender/internal/linker/ManagedTypeTestCase.java (original)
+++ felix/trunk/ipojo/runtime/core/src/test/java/org/apache/felix/ipojo/extender/internal/linker/ManagedTypeTestCase.java Fri Jul 5 12:44:35 2013
@@ -20,12 +20,16 @@
package org.apache.felix.ipojo.extender.internal.linker;
import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.contains;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.apache.felix.ipojo.extender.ExtensionDeclaration;
+import org.apache.felix.ipojo.extender.InstanceDeclaration;
import org.apache.felix.ipojo.extender.TypeDeclaration;
import org.apache.felix.ipojo.extender.queue.QueueService;
+import org.apache.felix.ipojo.metadata.Attribute;
+import org.apache.felix.ipojo.metadata.Element;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.osgi.framework.BundleContext;
@@ -65,12 +69,31 @@ public class ManagedTypeTestCase extends
);
when(declaration.getExtension()).thenReturn("test");
+ when(declaration.getComponentMetadata()).thenReturn(element("test", "f.q.n.Type"));
+ when(declaration.getComponentName()).thenReturn("Type");
when(filter.toString()).thenReturn(filterStr);
ManagedType managedType = new ManagedType(bundleContext, queueService, declaration);
managedType.start();
verify(bundleContext).getAllServiceReferences(null, filterStr);
+
+ // Check that the filter contains a logical OR with component's name and classname
+ verify(bundleContext).createFilter(
+ contains(
+ String.format("(|(%s=%s)(%s=%s))",
+ InstanceDeclaration.COMPONENT_NAME_PROPERTY,
+ "Type",
+ InstanceDeclaration.COMPONENT_NAME_PROPERTY,
+ "f.q.n.Type")
+ )
+ );
+ }
+
+ private Element element(String type, String classname) {
+ Element root = new Element(type, null);
+ root.addAttribute(new Attribute("classname", classname));
+ return root;
}
}