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);
                 }