Merge pull request #1198 from rmannibucau/rmannibucau/reduce-logservice-overhead

rewrite the CicularBuffer to reduce logservice overhead
diff --git a/tooling/karaf-maven-plugin/pom.xml b/tooling/karaf-maven-plugin/pom.xml
index 4b07966..bbc3865 100644
--- a/tooling/karaf-maven-plugin/pom.xml
+++ b/tooling/karaf-maven-plugin/pom.xml
@@ -43,10 +43,20 @@
     </properties>
 
     <dependencies>
-
+        <dependency>
+            <groupId>javax.annotation</groupId>
+            <artifactId>javax.annotation-api</artifactId>
+            <version>${javax.annotation.version}</version>
+        </dependency>
         <dependency>
             <groupId>org.apache.maven</groupId>
             <artifactId>maven-plugin-api</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>javax.annotation</groupId>
+                    <artifactId>jsr250-api</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.apache.maven.resolver</groupId>
diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/RunMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/RunMojo.java
index 8aa6ba0..60714b5 100644
--- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/RunMojo.java
+++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/RunMojo.java
@@ -142,6 +142,9 @@
     @Parameter(defaultValue = "180000")
     private long maximumStartupDuration;
 
+    @Parameter
+    private List<String> forbiddenDelegationPackages;
+
     private static final Pattern mvnPattern = Pattern.compile("mvn:([^/ ]+)/([^/ ]+)/([^/ ]*)(/([^/ ]+)(/([^/ ]+))?)?");
 
     public void execute() throws MojoExecutionException, MojoFailureException {
@@ -194,6 +197,9 @@
                     throw new ClassNotFoundException(
                             "avoid to use the classrealm loader which will prevent felix to match its reference");
                 }
+                if (name != null && forbiddenDelegationPackages != null && forbiddenDelegationPackages.stream().anyMatch(name::startsWith)) {
+                    throw new ClassNotFoundException(name);
+                }
                 return super.loadClass(name, resolve);
             }
         };
diff --git a/tooling/karaf-maven-plugin/src/test/java/org/apache/karaf/tooling/RunMojoTest.java b/tooling/karaf-maven-plugin/src/test/java/org/apache/karaf/tooling/RunMojoTest.java
index 6b8b9c2..aff1a4c 100644
--- a/tooling/karaf-maven-plugin/src/test/java/org/apache/karaf/tooling/RunMojoTest.java
+++ b/tooling/karaf-maven-plugin/src/test/java/org/apache/karaf/tooling/RunMojoTest.java
@@ -167,7 +167,7 @@
             mojo.deploy(context, null);
             fail("Expected MojoExecutionException");
         } catch (MojoExecutionException e) {
-            assertEquals("Project artifact doesn't exist", e.getMessage());
+            assertEquals("No artifact to deploy", e.getMessage());
         }
     }
 
@@ -188,7 +188,7 @@
             mojo.deploy(context, null);
             fail("Expected MojoExecutionException");
         } catch (MojoExecutionException e) {
-            assertEquals("Project artifact doesn't exist", e.getMessage());
+            assertEquals("No artifact to deploy", e.getMessage());
         }
     }
 
@@ -198,6 +198,8 @@
         Artifact artifact = mock(Artifact.class);
         File artifactFile = mock(File.class);
         expect(artifactFile.exists()).andReturn(true).times(2);
+        expect(artifactFile.getAbsolutePath()).andReturn("foo.jar").times(1);
+        expect(artifactFile.toURI()).andReturn(URI.create("file:///foo.jar")).times(1);
         replay(artifactFile);
         expect(artifact.getFile()).andReturn(artifactFile);
         replay(artifact);
@@ -209,7 +211,7 @@
             mojo.deploy(context, null);
             fail("Expected MojoExecutionException");
         } catch (MojoExecutionException e) {
-            assertEquals("Packaging jar is not supported", e.getMessage());
+            assertEquals("Can't deploy project artifact in container", e.getMessage());
         }
     }