You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2018/02/21 10:47:30 UTC

svn commit: r1824954 - in /aries/trunk/jndi: jndi-core/src/main/java/org/apache/aries/jndi/startup/ jndi-core/src/test/java/org/apache/aries/jndi/ jndi-url/src/test/java/org/apache/aries/jndi/url/

Author: gnodet
Date: Wed Feb 21 10:47:29 2018
New Revision: 1824954

URL: http://svn.apache.org/viewvc?rev=1824954&view=rev
Log:
[jndi][ARIES-981] Ability to disable setting builders JVM singleton

Modified:
    aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/startup/Activator.java
    aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/InitialContextTest.java
    aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/ObjectFactoryTest.java
    aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/BlueprintURLContextTest.java

Modified: aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/startup/Activator.java
URL: http://svn.apache.org/viewvc/aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/startup/Activator.java?rev=1824954&r1=1824953&r2=1824954&view=diff
==============================================================================
--- aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/startup/Activator.java (original)
+++ aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/startup/Activator.java Wed Feb 21 10:47:29 2018
@@ -45,6 +45,7 @@ public class Activator implements Bundle
 
     private static final Logger LOGGER = LoggerFactory.getLogger(Activator.class.getName());
 
+    private static final String DISABLE_BUILDER = "org.apache.aries.jndi.disable.builder";
     private static final String FORCE_BUILDER = "org.apache.aries.jndi.force.builder";
 
     private static volatile Activator instance;
@@ -139,50 +140,52 @@ public class Activator implements Bundle
         icfBuilders = new CachingServiceTracker<>(context, InitialContextFactoryBuilder.class);
         urlObjectFactoryFinders = new CachingServiceTracker<>(context, URLObjectFactoryFinder.class);
 
-        try {
-            OSGiInitialContextFactoryBuilder builder = new OSGiInitialContextFactoryBuilder();
+        if (!disableBuilder(context)) {
             try {
-                NamingManager.setInitialContextFactoryBuilder(builder);
-            } catch (IllegalStateException e) {
-                // use reflection to force the builder to be used
-                if (forceBuilder(context)) {
-                    originalICFBuilder = swapStaticField(InitialContextFactoryBuilder.class, builder);
+                OSGiInitialContextFactoryBuilder builder = new OSGiInitialContextFactoryBuilder();
+                try {
+                    NamingManager.setInitialContextFactoryBuilder(builder);
+                } catch (IllegalStateException e) {
+                    // use reflection to force the builder to be used
+                    if (forceBuilder(context)) {
+                        originalICFBuilder = swapStaticField(InitialContextFactoryBuilder.class, builder);
+                    }
                 }
+                icfBuilder = builder;
+            } catch (NamingException e) {
+                LOGGER.debug("A failure occurred when attempting to register an InitialContextFactoryBuilder with the NamingManager. " +
+                        "Support for calling new InitialContext() will not be enabled.", e);
+            } catch (IllegalStateException e) {
+                // Log the problem at info level, but only log the exception at debug level, as in many cases this is not a real issue and people
+                // don't want to see stack traces at info level when everything it working as expected.
+                String msg = "It was not possible to register an InitialContextFactoryBuilder with the NamingManager because " +
+                        "another builder called " + getClassName(InitialContextFactoryBuilder.class) + " was already registered. Support for calling new InitialContext() will not be enabled.";
+                LOGGER.info(msg);
+                LOGGER.debug(msg, e);
             }
-            icfBuilder = builder;
-        } catch (NamingException e) {
-            LOGGER.debug("A failure occurred when attempting to register an InitialContextFactoryBuilder with the NamingManager. " +
-                         "Support for calling new InitialContext() will not be enabled.", e);
-        } catch (IllegalStateException e) {
-            // Log the problem at info level, but only log the exception at debug level, as in many cases this is not a real issue and people
-            // don't want to see stack traces at info level when everything it working as expected.
-            String msg = "It was not possible to register an InitialContextFactoryBuilder with the NamingManager because " +
-                         "another builder called " + getClassName(InitialContextFactoryBuilder.class) + " was already registered. Support for calling new InitialContext() will not be enabled.";
-            LOGGER.info(msg);
-            LOGGER.debug(msg, e);
-        }
 
-        try {
-            OSGiObjectFactoryBuilder builder = new OSGiObjectFactoryBuilder(context);
             try {
-                NamingManager.setObjectFactoryBuilder(builder);
-            } catch (IllegalStateException e) {
-                // use reflection to force the builder to be used
-                if (forceBuilder(context)) {
-                    originalOFBuilder = swapStaticField(ObjectFactoryBuilder.class, builder);
+                OSGiObjectFactoryBuilder builder = new OSGiObjectFactoryBuilder(context);
+                try {
+                    NamingManager.setObjectFactoryBuilder(builder);
+                } catch (IllegalStateException e) {
+                    // use reflection to force the builder to be used
+                    if (forceBuilder(context)) {
+                        originalOFBuilder = swapStaticField(ObjectFactoryBuilder.class, builder);
+                    }
                 }
-            }
-            ofBuilder = builder;
-        } catch (NamingException e) {
-            LOGGER.info("A failure occurred when attempting to register an ObjectFactoryBuilder with the NamingManager. " +
+                ofBuilder = builder;
+            } catch (NamingException e) {
+                LOGGER.info("A failure occurred when attempting to register an ObjectFactoryBuilder with the NamingManager. " +
                         "Looking up certain objects may not work correctly.", e);
-        } catch (IllegalStateException e) {
-            // Log the problem at info level, but only log the exception at debug level, as in many cases this is not a real issue and people
-            // don't want to see stack traces at info level when everything it working as expected.
-            String msg = "It was not possible to register an ObjectFactoryBuilder with the NamingManager because " +
-                         "another builder called " + getClassName(ObjectFactoryBuilder.class) + " was already registered. Looking up certain objects may not work correctly.";
-            LOGGER.info(msg);
-            LOGGER.debug(msg, e);
+            } catch (IllegalStateException e) {
+                // Log the problem at info level, but only log the exception at debug level, as in many cases this is not a real issue and people
+                // don't want to see stack traces at info level when everything it working as expected.
+                String msg = "It was not possible to register an ObjectFactoryBuilder with the NamingManager because " +
+                        "another builder called " + getClassName(ObjectFactoryBuilder.class) + " was already registered. Looking up certain objects may not work correctly.";
+                LOGGER.info(msg);
+                LOGGER.debug(msg, e);
+            }
         }
 
         context.registerService(JNDIProviderAdmin.class.getName(),
@@ -227,12 +230,21 @@ public class Activator implements Bundle
     private boolean forceBuilder(BundleContext context) {
         String forceBuilderProp = context.getProperty(FORCE_BUILDER);
         if (forceBuilderProp != null) {
-            return true;
+            return !"false".equals(forceBuilderProp) && !"no".equals(forceBuilderProp);
         }
         BundleRevision revision = context.getBundle().adapt(BundleRevision.class);
         return !(revision.getDeclaredCapabilities(FORCE_BUILDER).isEmpty());
     }
 
+    private boolean disableBuilder(BundleContext context) {
+        String disableBuilder = context.getProperty(DISABLE_BUILDER);
+        if (disableBuilder != null) {
+            return !"false".equals(disableBuilder) && !"no".equals(disableBuilder);
+        }
+        BundleRevision revision = context.getBundle().adapt(BundleRevision.class);
+        return !(revision.getDeclaredCapabilities(DISABLE_BUILDER).isEmpty());
+    }
+
     private String getClassName(Class<?> expectedType) {
         try {
             for (Field field : NamingManager.class.getDeclaredFields()) {

Modified: aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/InitialContextTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/InitialContextTest.java?rev=1824954&r1=1824953&r2=1824954&view=diff
==============================================================================
--- aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/InitialContextTest.java (original)
+++ aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/InitialContextTest.java Wed Feb 21 10:47:29 2018
@@ -58,6 +58,7 @@ public class InitialContextTest {
      */
     @Before
     public void setup() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
+        System.setProperty("org.apache.aries.jndi.disable.builder", "false");
         BundleContextMock mock = new BundleContextMock();
         mock.addBundle(mock.getBundle());
         bc = Skeleton.newMock(mock, BundleContext.class);

Modified: aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/ObjectFactoryTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/ObjectFactoryTest.java?rev=1824954&r1=1824953&r2=1824954&view=diff
==============================================================================
--- aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/ObjectFactoryTest.java (original)
+++ aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/ObjectFactoryTest.java Wed Feb 21 10:47:29 2018
@@ -56,6 +56,7 @@ public class ObjectFactoryTest {
      */
     @Before
     public void setup() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
+        System.setProperty("org.apache.aries.jndi.disable.builder", "false");
         BundleContextMock mock = new BundleContextMock();
         mock.addBundle(mock.getBundle());
         bc = Skeleton.newMock(mock, BundleContext.class);

Modified: aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/BlueprintURLContextTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/BlueprintURLContextTest.java?rev=1824954&r1=1824953&r2=1824954&view=diff
==============================================================================
--- aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/BlueprintURLContextTest.java (original)
+++ aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/BlueprintURLContextTest.java Wed Feb 21 10:47:29 2018
@@ -100,6 +100,7 @@ public class BlueprintURLContextTest {
   
   @BeforeClass
   public static void setup() throws Exception {
+    System.setProperty("org.apache.aries.jndi.disable.builder", "false");
     bundle = Skeleton.newMock(new BundleMock("aBundle", new Hashtable<String, String>()), Bundle.class);
     BundleContext bc = bundle.getBundleContext();
     new org.apache.aries.jndi.startup.Activator().start(bc);