Repository: tomee Updated Branches: refs/heads/develop da12fb12c -> 7da9d6f08
adding @Default to application composer to scan runner jar automatically Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/a0c37da9 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/a0c37da9 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/a0c37da9 Branch: refs/heads/develop Commit: a0c37da955c1f40652862fb8847d497838e47d66 Parents: da12fb1 Author: Romain Manni-Bucau <[email protected]> Authored: Fri Feb 6 09:55:14 2015 +0100 Committer: Romain Manni-Bucau <[email protected]> Committed: Fri Feb 6 09:55:14 2015 +0100 ---------------------------------------------------------------------- .../openejb/testing/ApplicationComposers.java | 64 +++++++++++++++++--- .../org/apache/openejb/testing/Default.java | 31 ++++++++++ 2 files changed, 85 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/a0c37da9/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java b/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java index 3c41676..43543e6 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java @@ -88,6 +88,7 @@ import org.apache.xbean.finder.UrlSet; import org.apache.xbean.finder.archive.Archive; import org.apache.xbean.finder.archive.ClassesArchive; import org.apache.xbean.finder.archive.CompositeArchive; +import org.apache.xbean.finder.archive.FileArchive; import org.apache.xbean.finder.archive.JarArchive; import org.xml.sax.InputSource; @@ -124,6 +125,7 @@ import java.util.concurrent.CountDownLatch; import static java.util.Arrays.asList; import static org.apache.openejb.config.DeploymentFilterable.DEPLOYMENTS_CLASSPATH_PROPERTY; +import static org.apache.openejb.loader.JarLocation.jarLocation; import static org.apache.openejb.util.Classes.ancestors; @SuppressWarnings("deprecation") @@ -306,7 +308,7 @@ public final class ApplicationComposers { errors.add(new Exception(gripe)); } - if (modules < 1 && testClass.getAnnotation(Classes.class) == null) { + if (modules < 1 && testClass.getAnnotation(Classes.class) == null && testClass.getAnnotation(Default.class) == null) { final String gripe = "Test class should have at least one @Module method"; errors.add(new Exception(gripe)); } @@ -529,6 +531,7 @@ public final class ApplicationComposers { final Jars jarsAnnotation = method.getAnnotation(Jars.class); final Classes classesAnnotation = method.getAnnotation(Classes.class); final org.apache.openejb.junit.Classes classesAnnotationOld = method.getAnnotation(org.apache.openejb.junit.Classes.class); + final boolean defaultConfig = method.getAnnotation(Default.class) != null; Class<?>[] classes = null; Class<?>[] cdiInterceptors = null; @@ -559,7 +562,8 @@ public final class ApplicationComposers { method.getAnnotation(Descriptors.class), method.getAnnotation(JaxrsProviders.class), webApp, globalJarsAnnotation, jarsAnnotation, - classes, cdiInterceptors, cdiAlternatives, cdiDecorators, cdi, innerClassesAsBean); + classes, cdiInterceptors, cdiAlternatives, cdiDecorators, cdi, innerClassesAsBean, + defaultConfig); } else if (obj instanceof WebModule) { // will add the ejbmodule too webModulesNb++; @@ -574,7 +578,11 @@ public final class ApplicationComposers { ejbModule.setBeans(beans(new Beans(), cdiDecorators, cdiInterceptors, cdiAlternatives)); } - webModule.setFinder(finderFromClasses(webModule, classes, findFiles(jarsAnnotation))); + Collection<File> files = findFiles(jarsAnnotation); + if (defaultConfig) { + (files == null ? files = new LinkedList<>() : files).add(jarLocation(testClass)); + } + webModule.setFinder(finderFromClasses(webModule, classes, files)); ejbModule.setFinder(webModule.getFinder()); } else if (obj instanceof EjbModule) { final EjbModule ejbModule = (EjbModule) obj; @@ -588,7 +596,11 @@ public final class ApplicationComposers { ejbModule.setBeans(beans(new Beans(), cdiDecorators, cdiInterceptors, cdiAlternatives)); } - ejbModule.setFinder(finderFromClasses(ejbModule, classes, findFiles(jarsAnnotation))); + Collection<File> files = findFiles(jarsAnnotation); + if (defaultConfig) { + (files == null ? files = new LinkedList<>() : files).add(jarLocation(testClass)); + } + ejbModule.setFinder(finderFromClasses(ejbModule, classes, files)); } else if (obj instanceof EjbJar) { final EjbJar ejbJar = (EjbJar) obj; @@ -604,7 +616,11 @@ public final class ApplicationComposers { ejbModule.setBeans(beans(new Beans(), cdiDecorators, cdiInterceptors, cdiAlternatives)); } - ejbModule.setFinder(finderFromClasses(ejbModule, classes, findFiles(jarsAnnotation))); + Collection<File> files = findFiles(jarsAnnotation); + if (defaultConfig) { + (files == null ? files = new LinkedList<>() : files).add(jarLocation(testClass)); + } + ejbModule.setFinder(finderFromClasses(ejbModule, classes, files)); } else if (obj instanceof EnterpriseBean) { final EnterpriseBean bean = (EnterpriseBean) obj; @@ -618,7 +634,11 @@ public final class ApplicationComposers { if (cdi) { ejbModule.setBeans(beans(new Beans(), cdiDecorators, cdiInterceptors, cdiAlternatives)); } - ejbModule.setFinder(finderFromClasses(ejbModule, classes, findFiles(jarsAnnotation))); + Collection<File> files = findFiles(jarsAnnotation); + if (defaultConfig) { + (files == null ? files = new LinkedList<>() : files).add(jarLocation(testClass)); + } + ejbModule.setFinder(finderFromClasses(ejbModule, classes, files)); } else if (obj instanceof Application) { application = (Application) obj; @@ -649,7 +669,11 @@ public final class ApplicationComposers { if (cdi) { ejbModule.setBeans(beans(beans, cdiDecorators, cdiInterceptors, cdiAlternatives)); } - ejbModule.setFinder(finderFromClasses(ejbModule, classes, findFiles(jarsAnnotation))); + Collection<File> files = findFiles(jarsAnnotation); + if (defaultConfig) { + (files == null ? files = new LinkedList<>() : files).add(jarLocation(testClass)); + } + ejbModule.setFinder(finderFromClasses(ejbModule, classes, files)); } else if (obj instanceof Class[]) { final Class[] beans = (Class[]) obj; @@ -711,7 +735,7 @@ public final class ApplicationComposers { null, null, webapp, globalJarsAnnotation, null, classClasses.value(), classClasses.cdiInterceptors(), classClasses.cdiAlternatives(), classClasses.cdiDecorators(), - classClasses.cdi(), classClasses.innerClassesAsBean()); + classClasses.cdi(), classClasses.innerClassesAsBean(), testClass.getAnnotation(Default.class) != null); webModulesNb++; } @@ -880,7 +904,8 @@ public final class ApplicationComposers { final Class<?>[] cdiAlternatives, final Class<?>[] cdiDecorators, final boolean cdi, - final boolean innerClassesAsBean) throws OpenEJBException { + final boolean innerClassesAsBean, + final boolean autoConfig) throws OpenEJBException { String root = webapp.getContextRoot(); if (root == null) { root = "/openejb"; @@ -890,6 +915,18 @@ public final class ApplicationComposers { final WebModule webModule = new WebModule(webapp, root, Thread.currentThread().getContextClassLoader(), "", root); + final File thisJar; + if (autoConfig) { + thisJar = jarLocation(testClass); + try { + webModule.getAltDDs().putAll(DeploymentLoader.mapDescriptors(new ResourceFinder("", webModule.getClassLoader(), thisJar.toURI().toURL()))); + } catch (final IOException e) { + throw new IllegalStateException(e); + } + } else { + thisJar = null; + } + webModule.getAltDDs().putAll(additionalDescriptors); for (final Descriptors d : asList(testClass.getAnnotation(Descriptors.class), descriptors)) { if (d != null) { @@ -946,6 +983,13 @@ public final class ApplicationComposers { libs.addAll(files); } } + if (autoConfig) { + if (libs == null) { + libs = new LinkedList<>(); + } + libs.add(thisJar); + } + final IAnnotationFinder finder = finderFromClasses(webModule, classes, libs); webModule.setFinder(finder); ejbModule.setFinder(webModule.getFinder()); @@ -1224,7 +1268,7 @@ public final class ApplicationComposers { final ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); for (final File f : others) { try { - archives.add(new JarArchive(classLoader, f.toURI().toURL())); + archives.add(f.isDirectory() ? new FileArchive(classLoader, f) : new JarArchive(classLoader, f.toURI().toURL())); } catch (final MalformedURLException e) { throw new IllegalArgumentException(e); } http://git-wip-us.apache.org/repos/asf/tomee/blob/a0c37da9/container/openejb-core/src/main/java/org/apache/openejb/testing/Default.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/testing/Default.java b/container/openejb-core/src/main/java/org/apache/openejb/testing/Default.java new file mode 100644 index 0000000..91ea33b --- /dev/null +++ b/container/openejb-core/src/main/java/org/apache/openejb/testing/Default.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.openejb.testing; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Add jar containing the running class to the scanned jars. + */ +@Target({ ElementType.TYPE, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +public @interface Default { +}
