You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by jb...@apache.org on 2010/10/15 23:48:23 UTC
svn commit: r1023123 - in /incubator/aries/sandbox/jbohn/interceptor-proto:
blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/
blueprint/blueprint-testbundlea/src/main/java/org/apache/aries/blueprint/testbundlea/
transaction/trans...
Author: jbohn
Date: Fri Oct 15 21:48:22 2010
New Revision: 1023123
URL: http://svn.apache.org/viewvc?rev=1023123&view=rev
Log:
ARIES-420 pass in availability when creating interceptor service and utilize interceptor rank to order results
Modified:
incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/InterceptorManager.java
incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-testbundlea/src/main/java/org/apache/aries/blueprint/testbundlea/NSHandlerTwo.java
incubator/aries/sandbox/jbohn/interceptor-proto/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxElementHandler.java
Modified: incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/InterceptorManager.java
URL: http://svn.apache.org/viewvc/incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/InterceptorManager.java?rev=1023123&r1=1023122&r2=1023123&view=diff
==============================================================================
--- incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/InterceptorManager.java (original)
+++ incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/InterceptorManager.java Fri Oct 15 21:48:22 2010
@@ -20,6 +20,7 @@ package org.apache.aries.blueprint.utils
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Comparator;
import java.util.Dictionary;
import java.util.HashMap;
import java.util.Hashtable;
@@ -58,8 +59,7 @@ public class InterceptorManager {
private static final Map<String, Interceptor> interceptorCollection = Collections.synchronizedMap(new HashMap<String, Interceptor>());
-//@JAB TODO: Need to pass desired interceptor rank to use as service rank (or continue use the the existing interceptor rank when regsitering service)
- public static synchronized void addInterceptorForBean(Interceptor interceptor, String beanId, ParserContext pc)
+ public static synchronized void addInterceptorForBean(Interceptor interceptor, int availability, String beanId, ParserContext pc)
{
LOGGER.debug("addInterceptorForBean interceptor {} bean {}", interceptor, beanId);
@@ -78,10 +78,11 @@ public class InterceptorManager {
Dictionary properties = new Hashtable();
properties.put(BUNDLE_ID, bundleId);
properties.put(BEAN, beanId);
- properties.put(URI, interceptor.getIdentity());
+ properties.put(URI, interceptor.getIdentity());
BundleContext bundleContext = bundle.getBundleContext();
if (interceptorCollection.get(interceptorKey) == null) {
+ // Register Service
LOGGER.debug("addInterceptorForBean about to register interceptor service with properties {}", properties);
bundleContext.registerService(Interceptor.class.getName(), interceptor, properties);
@@ -101,8 +102,7 @@ public class InterceptorManager {
ReferenceMetadataImpl referenceMetadata = new ReferenceMetadataImpl();
referenceMetadata.setId(id);
-//@JAB TODO: Need to allow the reference to be either mandatory or optional as required by the caller
- referenceMetadata.setAvailability(ReferenceMetadataImpl.AVAILABILITY_MANDATORY);
+ referenceMetadata.setAvailability(availability);
referenceMetadata.setRuntimeInterface(Interceptor.class);
referenceMetadata.setInterface(Interceptor.class.getName());
referenceMetadata.setFilter(filter);
@@ -141,13 +141,22 @@ public class InterceptorManager {
LOGGER.debug("getInterceptorsForBean matching reference found, about to get instance {}", interceptorRefMetadata);
Interceptor interceptor = (Interceptor) blueprintContainer.getComponentInstance(interceptorRefMetadata.getId());
if(interceptorList==null) interceptorList = new ArrayList<Interceptor>();
- //@JAB TODO: Need to order filters by service rank
interceptorList.add(interceptor);
}
}
}
- }
-
+ }
+
+ // order interceptor List by service rank
+ if (interceptorList != null) {
+ Collections.sort(interceptorList, new Comparator<Interceptor>(){
+ public int compare(Interceptor object1, Interceptor object2) {
+ //invert the order so higher ranks are sorted 1st
+ return object2.getRank() - object1.getRank();
+ }
+ });
+ }
+
return interceptorList;
}
Modified: incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-testbundlea/src/main/java/org/apache/aries/blueprint/testbundlea/NSHandlerTwo.java
URL: http://svn.apache.org/viewvc/incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-testbundlea/src/main/java/org/apache/aries/blueprint/testbundlea/NSHandlerTwo.java?rev=1023123&r1=1023122&r2=1023123&view=diff
==============================================================================
--- incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-testbundlea/src/main/java/org/apache/aries/blueprint/testbundlea/NSHandlerTwo.java (original)
+++ incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-testbundlea/src/main/java/org/apache/aries/blueprint/testbundlea/NSHandlerTwo.java Fri Oct 15 21:48:22 2010
@@ -29,6 +29,7 @@ import org.apache.aries.blueprint.Parser
import org.apache.aries.blueprint.utils.InterceptorManager;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
import org.osgi.service.blueprint.reflect.Metadata;
+import org.osgi.service.blueprint.reflect.ServiceReferenceMetadata;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -111,11 +112,7 @@ public class NSHandlerTwo implements Nam
ParserContext context) {
if(node.getLocalName().equals(ATTRIB_ONE)){
- InterceptorManager.addInterceptorForBean(tracker, component.getId(), context);
-// if(context.getComponentDefinitionRegistry().getInterceptors(component) == null ||
-// !context.getComponentDefinitionRegistry().getInterceptors(component).contains(tracker) ){
-// context.getComponentDefinitionRegistry().registerInterceptorWithComponent(component, tracker);
-// }
+ InterceptorManager.addInterceptorForBean(tracker, ServiceReferenceMetadata.AVAILABILITY_MANDATORY, component.getId(), context);
}
return component;
}
Modified: incubator/aries/sandbox/jbohn/interceptor-proto/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxElementHandler.java
URL: http://svn.apache.org/viewvc/incubator/aries/sandbox/jbohn/interceptor-proto/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxElementHandler.java?rev=1023123&r1=1023122&r2=1023123&view=diff
==============================================================================
--- incubator/aries/sandbox/jbohn/interceptor-proto/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxElementHandler.java (original)
+++ incubator/aries/sandbox/jbohn/interceptor-proto/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxElementHandler.java Fri Oct 15 21:48:22 2010
@@ -32,6 +32,7 @@ import org.apache.aries.blueprint.utils.
import org.apache.aries.transaction.Constants;
import org.apache.aries.transaction.TxComponentMetaDataHelper;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
+import org.osgi.service.blueprint.reflect.ServiceReferenceMetadata;
import org.osgi.service.blueprint.reflect.Metadata;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -72,7 +73,7 @@ public class TxElementHandler implements
// cdr.registerInterceptorWithComponent(cm, interceptor);
//Create interceptor service and reference for this bean instance
- InterceptorManager.addInterceptorForBean(interceptor, beanId, pc);
+ InterceptorManager.addInterceptorForBean(interceptor, ServiceReferenceMetadata.AVAILABILITY_MANDATORY, beanId, pc);
if (LOGGER.isDebugEnabled())
LOGGER.debug("parser setting comp trans data for " + elt.getAttribute(Constants.VALUE) + " "
@@ -156,7 +157,7 @@ public class TxElementHandler implements
// if the component has already been registered with this interceptor,
// the registration will be ignored.
for (String id : ids) {
- InterceptorManager.addInterceptorForBean(interceptor, id, pc);
+ InterceptorManager.addInterceptorForBean(interceptor, ServiceReferenceMetadata.AVAILABILITY_MANDATORY, id, pc);
// ComponentMetadata componentMetadata = cdr.getComponentDefinition(id);
// cdr.registerInterceptorWithComponent(componentMetadata, interceptor);
}
@@ -169,7 +170,7 @@ public class TxElementHandler implements
for (String id : ids) {
Matcher m = p.matcher(id);
if (m.matches()) {
- InterceptorManager.addInterceptorForBean(interceptor, id, pc);
+ InterceptorManager.addInterceptorForBean(interceptor, ServiceReferenceMetadata.AVAILABILITY_MANDATORY, id, pc);
// ComponentMetadata componentMetadata = cdr.getComponentDefinition(id);
// cdr.registerInterceptorWithComponent(componentMetadata, interceptor);
}