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