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 04:16:35 UTC
svn commit: r1022810 - in /incubator/aries/sandbox/jbohn/interceptor-proto:
blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/utils/
blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/
transaction/transaction-ite...
Author: jbohn
Date: Fri Oct 15 02:16:35 2010
New Revision: 1022810
URL: http://svn.apache.org/viewvc?rev=1022810&view=rev
Log:
ARIES-420 only register a single interceptor service and create a service reference for each interceptor/bundle/bean combination
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-itests/src/test/java/org/apache/aries/blueprint/itests/TestConfigAdmin.java
incubator/aries/sandbox/jbohn/interceptor-proto/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.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=1022810&r1=1022809&r2=1022810&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 02:16:35 2010
@@ -19,9 +19,12 @@
package org.apache.aries.blueprint.utils;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Dictionary;
+import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
+import java.util.Map;
import org.apache.aries.blueprint.ComponentDefinitionRegistry;
import org.apache.aries.blueprint.ExtendedBlueprintContainer;
@@ -35,6 +38,7 @@ import org.osgi.framework.Filter;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.blueprint.reflect.ComponentMetadata;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -54,9 +58,12 @@ public class InterceptorManager {
private static final String FILTER_START = "(";
private static final String FILTER_END = ")";
private static final String FILTER_AND = "&";
+ private static final String DELIM = ":";
+
+ 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 void addInterceptorForBean(Interceptor interceptor, String beanId, ParserContext pc)
+ public static synchronized void addInterceptorForBean(Interceptor interceptor, String beanId, ParserContext pc)
{
LOGGER.debug("addInterceptorForBean interceptor {} bean {}", interceptor, beanId);
@@ -71,44 +78,50 @@ public class InterceptorManager {
}
if (bundle!=null && bundleId!=0) {
+ String interceptorKey = interceptor.getIdentity() + DELIM + bundleId + DELIM + beanId;
Dictionary properties = new Hashtable();
properties.put(BUNDLE_ID, bundleId);
properties.put(BEAN, beanId);
properties.put(URI, interceptor.getIdentity());
BundleContext bundleContext = bundle.getBundleContext();
- //@JAB TODO: Need to ensure that we only register service once per bean/bundle/interceptor
- LOGGER.debug("addInterceptorForBean about to register interceptor service with properties {}", properties);
- ServiceRegistration registration = bundleContext.registerService(Interceptor.class.getName(), interceptor, properties);
-
- String id = pc.generateId();
- String filter = FILTER_START +
- FILTER_AND +
- FILTER_START +
- BUNDLE_ID + "=" + bundleId +
- FILTER_END +
- FILTER_START +
- BEAN + "=" + beanId +
- FILTER_END +
-//@JAB TODO: Need to create a filter that will resolve to correct, single match but 1st need
-// to resolve filter comparison on get so that it does not need to be exact
-// FILTER_START +
-// URI + "=" + interceptor.getIdentity() +
-// FILTER_END +
- FILTER_END;
-
- 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.setRuntimeInterface(Interceptor.class);
- referenceMetadata.setInterface(Interceptor.class.getName());
- referenceMetadata.setFilter(filter);
-
- //@JAB TODO: Should only need to create one reference per bean/bundle/interceptor
- LOGGER.debug("addInterceptorForBean about to register interceptor service reference {}", properties);
- cdr.registerComponentDefinition(referenceMetadata);
-
+ if (interceptorCollection.get(interceptorKey) == null) {
+ LOGGER.debug("addInterceptorForBean about to register interceptor service with properties {}", properties);
+ ServiceRegistration registration = bundleContext.registerService(Interceptor.class.getName(), interceptor, properties);
+
+ String id = pc.generateId();
+ String filter = FILTER_START +
+ FILTER_AND +
+ FILTER_START +
+ BUNDLE_ID + "=" + bundleId +
+ FILTER_END +
+ FILTER_START +
+ BEAN + "=" + beanId +
+ FILTER_END +
+ //@JAB TODO: Need to create a filter that will resolve to correct, single match but 1st need
+ // to resolve filter comparison on get so that it does not need to be exact
+ // FILTER_START +
+ // URI + "=" + interceptor.getIdentity() +
+ // FILTER_END +
+ FILTER_END;
+
+ 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.setRuntimeInterface(Interceptor.class);
+ referenceMetadata.setInterface(Interceptor.class.getName());
+ referenceMetadata.setFilter(filter);
+
+ //@JAB TODO: Should only need to create one reference per bean/bundle/interceptor
+ LOGGER.debug("addInterceptorForBean about to register interceptor service reference {}", properties);
+ cdr.registerComponentDefinition(referenceMetadata);
+
+ interceptorCollection.put(interceptorKey, interceptor);
+ }
+ else {
+ LOGGER.debug("addInterceptorForBean interceptor already registered for bundle & bean " + interceptorKey );
+ }
}
else {
LOGGER.debug("addInterceptorForBean bundle is null - can not register interceptor service");
Modified: incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/TestConfigAdmin.java
URL: http://svn.apache.org/viewvc/incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/TestConfigAdmin.java?rev=1022810&r1=1022809&r2=1022810&view=diff
==============================================================================
--- incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/TestConfigAdmin.java (original)
+++ incubator/aries/sandbox/jbohn/interceptor-proto/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/TestConfigAdmin.java Fri Oct 15 02:16:35 2010
@@ -182,7 +182,7 @@ public class TestConfigAdmin extends Abs
mavenBundle("org.apache.aries.blueprint", "org.apache.aries.blueprint"),
mavenBundle("org.apache.aries.blueprint", "org.apache.aries.blueprint.sample").noStart(),
mavenBundle("org.osgi","org.osgi.compendium"),
-// org.ops4j.pax.exam.container.def.PaxRunnerOptions.vmOption("-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"),
+ //org.ops4j.pax.exam.container.def.PaxRunnerOptions.vmOption("-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"),
equinox().version("3.5.0")
);
Modified: incubator/aries/sandbox/jbohn/interceptor-proto/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/sandbox/jbohn/interceptor-proto/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java?rev=1022810&r1=1022809&r2=1022810&view=diff
==============================================================================
--- incubator/aries/sandbox/jbohn/interceptor-proto/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java (original)
+++ incubator/aries/sandbox/jbohn/interceptor-proto/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java Fri Oct 15 02:16:35 2010
@@ -52,8 +52,8 @@ import org.osgi.util.tracker.ServiceTrac
@RunWith(JUnit4TestRunner.class)
public abstract class AbstractIntegrationTest {
- public static final long DEFAULT_TIMEOUT = 60000;
-// public static final long DEFAULT_TIMEOUT = 0;
+// public static final long DEFAULT_TIMEOUT = 60000;
+ public static final long DEFAULT_TIMEOUT = 0;
private List<ServiceTracker> srs;
@@ -104,8 +104,8 @@ public abstract class AbstractIntegratio
mavenBundle("org.apache.aries.transaction", "org.apache.aries.transaction.testbundle"),
mavenBundle("org.apache.aries.transaction", "org.apache.aries.transaction.testds"),
- //new VMOption( "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000" ),
- //new TimeoutOption( 0 ),
+ new VMOption( "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000" ),
+ new TimeoutOption( 0 ),
equinox().version("3.5.0"));
options = updateOptions(options);