If this is purely OSGi, you can use their Version class for a better way of
comparing versions.

On 15 July 2017 at 11:30, <[email protected]> wrote:

> Repository: logging-log4j2
> Updated Branches:
>   refs/heads/master 8133b6a02 -> 9a08eb08f
>
>
> LOG4J2-1971 - Register Log4j-core as a service. Bypass tests that don't
> work on MacOS
>
>
> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
> Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/
> commit/2c16e17d
> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2c16e17d
> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2c16e17d
>
> Branch: refs/heads/master
> Commit: 2c16e17d2a636155804c166ccff7b3d389fe03f0
> Parents: 8133b6a
> Author: Ralph Goers <[email protected]>
> Authored: Sat Jul 15 09:26:32 2017 -0700
> Committer: Ralph Goers <[email protected]>
> Committed: Sat Jul 15 09:26:40 2017 -0700
>
> ----------------------------------------------------------------------
>  .../apache/logging/log4j/util/Activator.java    | 27 +++++++++++++++++---
>  .../apache/logging/log4j/util/ProviderUtil.java |  5 ++++
>  .../logging/log4j/core/osgi/Activator.java      | 11 ++++++++
>  .../appender/FileAppenderPermissionsTest.java   |  6 +++++
>  ...irectWriteTempCompressedFilePatternTest.java |  4 +++
>  ...ngAppenderTempCompressedFilePatternTest.java |  4 +++
>  6 files changed, 53 insertions(+), 4 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 2c16e17d/log4j-api/src/main/java/org/apache/logging/log4j/
> util/Activator.java
> ----------------------------------------------------------------------
> diff --git 
> a/log4j-api/src/main/java/org/apache/logging/log4j/util/Activator.java
> b/log4j-api/src/main/java/org/apache/logging/log4j/util/Activator.java
> index 2547b7d..30cd566 100644
> --- a/log4j-api/src/main/java/org/apache/logging/log4j/util/Activator.java
> +++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/Activator.java
> @@ -18,10 +18,12 @@ package org.apache.logging.log4j.util;
>
>  import java.net.URL;
>  import java.security.Permission;
> +import java.util.Collection;
>  import java.util.List;
>
>  import org.apache.logging.log4j.Logger;
>  import org.apache.logging.log4j.spi.LoggerContextFactory;
> +import org.apache.logging.log4j.spi.Provider;
>  import org.apache.logging.log4j.status.StatusLogger;
>  import org.osgi.framework.AdaptPermission;
>  import org.osgi.framework.AdminPermission;
> @@ -29,6 +31,8 @@ import org.osgi.framework.Bundle;
>  import org.osgi.framework.BundleActivator;
>  import org.osgi.framework.BundleContext;
>  import org.osgi.framework.BundleEvent;
> +import org.osgi.framework.InvalidSyntaxException;
> +import org.osgi.framework.ServiceReference;
>  import org.osgi.framework.SynchronousBundleListener;
>  import org.osgi.framework.wiring.BundleWire;
>  import org.osgi.framework.wiring.BundleWiring;
> @@ -63,7 +67,7 @@ public class Activator implements BundleActivator,
> SynchronousBundleListener {
>          try {
>              checkPermission(new AdminPermission(bundle,
> AdminPermission.RESOURCE));
>              checkPermission(new AdaptPermission(BundleWiring.class.getName(),
> bundle, AdaptPermission.ADAPT));
> -            loadProvider(bundle.adapt(BundleWiring.class));
> +            loadProvider(bundle.getBundleContext(),
> bundle.adapt(BundleWiring.class));
>          } catch (final SecurityException e) {
>              LOGGER.debug("Cannot access bundle [{}] contents. Ignoring.",
> bundle.getSymbolicName(), e);
>          } catch (final Exception e) {
> @@ -71,8 +75,23 @@ public class Activator implements BundleActivator,
> SynchronousBundleListener {
>          }
>      }
>
> -    private void loadProvider(final BundleWiring bundleWiring) {
> -        ProviderUtil.loadProviders(bundleWiring.getClassLoader());
> +    private void loadProvider(final BundleContext context, final
> BundleWiring bundleWiring) {
> +        String filter = "(APIVersion>=2.60)";
> +        try {
> +            Collection<ServiceReference<Provider>> serviceReferences =
> context.getServiceReferences(Provider.class, filter);
> +            Provider maxProvider = null;
> +            for (ServiceReference<Provider> serviceReference :
> serviceReferences) {
> +                Provider provider = context.getService(serviceReference);
> +                if (maxProvider == null || provider.getPriority() >
> maxProvider.getPriority()) {
> +                    maxProvider = provider;
> +                }
> +            }
> +            if (maxProvider != null) {
> +                ProviderUtil.addProvider(maxProvider);
> +            }
> +        } catch (InvalidSyntaxException ex) {
> +            LOGGER.error("Invalid service filter: " + filter, ex);
> +        }
>          final List<URL> urls = bundleWiring.findEntries("META-INF",
> "log4j-provider.properties", 0);
>          for (final URL url : urls) {
>              ProviderUtil.loadProvider(url, bundleWiring.getClassLoader())
> ;
> @@ -86,7 +105,7 @@ public class Activator implements BundleActivator,
> SynchronousBundleListener {
>          final BundleWiring self = context.getBundle().adapt(
> BundleWiring.class);
>          final List<BundleWire> required = self.getRequiredWires(
> LoggerContextFactory.class.getName());
>          for (final BundleWire wire : required) {
> -            loadProvider(wire.getProviderWiring());
> +            loadProvider(context, wire.getProviderWiring());
>          }
>          context.addBundleListener(this);
>          final Bundle[] bundles = context.getBundles();
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 2c16e17d/log4j-api/src/main/java/org/apache/logging/log4j/
> util/ProviderUtil.java
> ----------------------------------------------------------------------
> diff --git 
> a/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java
> b/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java
> index 3bb5ad4..9449217 100644
> --- a/log4j-api/src/main/java/org/apache/logging/log4j/util/
> ProviderUtil.java
> +++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/
> ProviderUtil.java
> @@ -69,6 +69,11 @@ public final class ProviderUtil {
>          }
>      }
>
> +    protected static void addProvider(Provider provider) {
> +        PROVIDERS.add(provider);
> +        LOGGER.debug("Loaded Provider {}", provider);
> +    }
> +
>      /**
>       * Loads an individual Provider implementation. This method is really
> only useful for the OSGi bundle activator and
>       * this class itself.
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 2c16e17d/log4j-core/src/main/java/org/apache/logging/log4j/
> core/osgi/Activator.java
> ----------------------------------------------------------------------
> diff --git 
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/osgi/Activator.java
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/
> osgi/Activator.java
> index 4da1ecc..ab9f5ba 100644
> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/
> osgi/Activator.java
> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/
> osgi/Activator.java
> @@ -17,18 +17,22 @@
>
>  package org.apache.logging.log4j.core.osgi;
>
> +import java.util.Hashtable;
>  import java.util.concurrent.atomic.AtomicReference;
>
>  import org.apache.logging.log4j.LogManager;
>  import org.apache.logging.log4j.Logger;
>  import org.apache.logging.log4j.core.config.plugins.util.PluginRegistry;
> +import org.apache.logging.log4j.core.impl.Log4jProvider;
>  import org.apache.logging.log4j.core.util.Constants;
> +import org.apache.logging.log4j.spi.Provider;
>  import org.apache.logging.log4j.status.StatusLogger;
>  import org.apache.logging.log4j.util.PropertiesUtil;
>  import org.osgi.framework.Bundle;
>  import org.osgi.framework.BundleActivator;
>  import org.osgi.framework.BundleContext;
>  import org.osgi.framework.BundleEvent;
> +import org.osgi.framework.ServiceRegistration;
>  import org.osgi.framework.SynchronousBundleListener;
>  import org.osgi.framework.wiring.BundleWiring;
>
> @@ -41,8 +45,14 @@ public final class Activator implements
> BundleActivator, SynchronousBundleListen
>
>      private final AtomicReference<BundleContext> contextRef = new
> AtomicReference<>();
>
> +    ServiceRegistration provideRegistration = null;
> +
>      @Override
>      public void start(final BundleContext context) throws Exception {
> +        Provider provider = new Log4jProvider();
> +        Hashtable<String, String> props = new Hashtable<>();
> +        props.put("APIVersion", "2.60");
> +        provideRegistration = 
> context.registerService(Provider.class.getName(),
> provider, props);
>          // allow the user to override the default ContextSelector (e.g.,
> by using BasicContextSelector for a global cfg)
>          if 
> (PropertiesUtil.getProperties().getStringProperty(Constants.LOG4J_CONTEXT_SELECTOR)
> == null) {
>              System.setProperty(Constants.LOG4J_CONTEXT_SELECTOR,
> BundleContextSelector.class.getName());
> @@ -80,6 +90,7 @@ public final class Activator implements BundleActivator,
> SynchronousBundleListen
>
>      @Override
>      public void stop(final BundleContext context) throws Exception {
> +        provideRegistration.unregister();
>          this.contextRef.compareAndSet(context, null);
>          LogManager.shutdown();
>      }
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 2c16e17d/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/
> FileAppenderPermissionsTest.java
> ----------------------------------------------------------------------
> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/FileAppenderPermissionsTest.java b/log4j-core/src/test/java/
> org/apache/logging/log4j/core/appender/FileAppenderPermissionsTest.java
> index 8f67a27..6dbd712 100644
> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/
> FileAppenderPermissionsTest.java
> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/
> FileAppenderPermissionsTest.java
> @@ -33,9 +33,11 @@ import java.util.Arrays;
>  import java.util.Collection;
>  import java.util.List;
>
> +import org.apache.commons.lang3.SystemUtils;
>  import org.apache.logging.log4j.Level;
>  import org.apache.logging.log4j.core.Layout;
>  import org.apache.logging.log4j.core.LogEvent;
> +import org.apache.logging.log4j.core.config.status.StatusConfiguration;
>  import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>  import org.apache.logging.log4j.core.layout.PatternLayout;
>  import org.apache.logging.log4j.core.util.FileUtils;
> @@ -79,6 +81,7 @@ public class FileAppenderPermissionsTest {
>
>      @BeforeClass
>      public static void beforeClass() {
> +        System.setProperty("log4j2.debug", "true");
>          Assume.assumeTrue(FileUtils.isFilePosixAttributeViewSupported());
>      }
>
> @@ -188,6 +191,9 @@ public class FileAppenderPermissionsTest {
>      }
>
>      public static String findAGroup(final String user) throws IOException
> {
> +        if (SystemUtils.IS_OS_MAC_OSX) {
> +            return "staff";
> +        }
>          String group = user;
>          try (FileInputStream fis = new FileInputStream("/etc/group")) {
>              final List<String> groups = 
> org.apache.commons.io.IOUtils.readLines(fis,
> Charset.defaultCharset());
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 2c16e17d/log4j-core/src/test/java/org/apache/logging/log4j/
> core/appender/rolling/RollingAppenderDirectWriteTemp
> CompressedFilePatternTest.java
> ----------------------------------------------------------------------
> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.java
> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/
> RollingAppenderDirectWriteTempCompressedFilePatternTest.java
> index 4e913cf..06f1cbc 100644
> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/rolling/RollingAppenderDirectWriteTemp
> CompressedFilePatternTest.java
> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/rolling/RollingAppenderDirectWriteTemp
> CompressedFilePatternTest.java
> @@ -32,8 +32,10 @@ import java.nio.file.WatchEvent;
>  import java.nio.file.WatchKey;
>  import java.nio.file.WatchService;
>
> +import org.apache.commons.lang3.SystemUtils;
>  import org.apache.logging.log4j.Logger;
>  import org.apache.logging.log4j.junit.LoggerContextRule;
> +import org.junit.Assume;
>  import org.junit.Before;
>  import org.junit.Rule;
>  import org.junit.Test;
> @@ -58,6 +60,8 @@ public class 
> RollingAppenderDirectWriteTempCompressedFilePatternTest
> {
>
>      @Before
>      public void setUp() throws Exception {
> +        // Disable this test on MacOS. FileWatcher isn't fast enough to
> work properly.
> +        Assume.assumeTrue(!SystemUtils.IS_OS_MAC_OSX);
>          this.logger = loggerContextRule.getLogger(
> RollingAppenderDirectWriteTest.class.getName());
>      }
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 2c16e17d/log4j-core/src/test/java/org/apache/logging/log4j/
> core/appender/rolling/RollingAppenderTempCompressedFilePatternTest.java
> ----------------------------------------------------------------------
> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/rolling/RollingAppenderTempCompressedFilePatternTest.java
> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/
> RollingAppenderTempCompressedFilePatternTest.java
> index c1755ee..03fd6be 100644
> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/rolling/RollingAppenderTempCompressedFilePatternTest.java
> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/rolling/RollingAppenderTempCompressedFilePatternTest.java
> @@ -38,9 +38,11 @@ import java.util.concurrent.TimeUnit;
>  import org.apache.commons.compress.compressors.CompressorException;
>  import org.apache.commons.compress.compressors.CompressorStreamFactory;
>  import org.apache.commons.compress.utils.IOUtils;
> +import org.apache.commons.lang3.SystemUtils;
>  import org.apache.logging.log4j.Logger;
>  import org.apache.logging.log4j.core.util.Closer;
>  import org.apache.logging.log4j.junit.LoggerContextRule;
> +import org.junit.Assume;
>  import org.junit.Before;
>  import org.junit.Rule;
>  import org.junit.Test;
> @@ -66,6 +68,8 @@ public class RollingAppenderTempCompressedFilePatternTest
> {
>
>      @Before
>      public void setUp() throws Exception {
> +        // Disable this test on MacOS. FileWatcher isn't fast enough to
> work properly.
> +        Assume.assumeTrue(!SystemUtils.IS_OS_MAC_OSX);
>          this.logger = loggerContextRule.getLogger(
> RollingAppenderTempCompressedFilePatternTest.class.getName());
>      }
>
>
>


-- 
Matt Sicker <[email protected]>

Reply via email to