Repository: tomee Updated Branches: refs/heads/develop 1aed3c430 -> eb3736dd9
cleaner fix to link beans.xml to target/classes Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/eb3736dd Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/eb3736dd Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/eb3736dd Branch: refs/heads/develop Commit: eb3736dd930fbeb5fdd5c9f93c6862cc53afa7e6 Parents: 1aed3c4 Author: Romain Manni-Bucau <[email protected]> Authored: Thu Feb 26 15:54:03 2015 +0100 Committer: Romain Manni-Bucau <[email protected]> Committed: Thu Feb 26 15:54:03 2015 +0100 ---------------------------------------------------------------------- .../openejb/config/AnnotationDeployer.java | 42 ++++++++------------ .../org/apache/tomee/embedded/Container.java | 20 +++++++++- 2 files changed, 35 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/eb3736dd/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java b/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java index fbcf812..167b074 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java @@ -439,15 +439,6 @@ public class AnnotationDeployer implements DynamicDeployer { } public static class DiscoverAnnotatedBeans implements DynamicDeployer { - private ClassesFolderDiscover classesFolderDiscover; - - public DiscoverAnnotatedBeans() { - this.classesFolderDiscover = SystemInstance.get().getComponent(ClassesFolderDiscover.class); - if (this.classesFolderDiscover == null) { - this.classesFolderDiscover = new MavenClassesFolderDiscover(); - } - } - public AppModule deploy(AppModule appModule) throws OpenEJBException { if (!appModule.isWebapp() && !appModule.getWebModules().isEmpty()) { // need to scan for jsf stuff at least try { @@ -1676,11 +1667,10 @@ public class AnnotationDeployer implements DynamicDeployer { Collection<Class<?>> discoveredBeans = null; List<Class<? extends Extension>> extensions = null; - final Object altDDFound = altDD.get("beans.xml"); - final URL classesBeansXml = URL.class.isInstance(altDDFound) ? URL.class.cast(altDDFound) : null; + final FolderDDMapper ddMapper = SystemInstance.get().getComponent(FolderDDMapper.class); for (final Map.Entry<URL, List<String>> entry : map.entrySet()) { final URL key = entry.getKey(); - final URL beansXml = hasBeansXml(key, classesBeansXml); + final URL beansXml = hasBeansXml(key, ddMapper); final List<String> value = entry.getValue(); if (beansXml != null) { classes.put(beansXml, value); @@ -1772,7 +1762,7 @@ public class AnnotationDeployer implements DynamicDeployer { } } - public URL hasBeansXml(final URL url, final URL classesBeansXml) { + public URL hasBeansXml(final URL url, final FolderDDMapper ddMapper) { final String urlPath = url.getPath(); if (urlPath.endsWith("/WEB-INF/beans.xml")) { return url; @@ -1832,10 +1822,18 @@ public class AnnotationDeployer implements DynamicDeployer { // no-op } } - if (classesFolderDiscover != null) { + if (ddMapper != null) { final File asFile = URLs.toFile(url); - if (asFile.isDirectory() && classesFolderDiscover.isClassesFolder(asFile)) { - return classesBeansXml; + if (asFile.isDirectory()) { + final File ddFolder = ddMapper.getDDFolder(asFile); + final File file = new File(ddFolder, "beans.xml"); + if (file.isFile()) { + try { + return file.toURI().toURL(); + } catch (final MalformedURLException e) { + // no-op + } + } } } return null; @@ -5693,15 +5691,7 @@ public class AnnotationDeployer implements DynamicDeployer { // no-method } - public static interface ClassesFolderDiscover { - boolean isClassesFolder(final File dir); - } - - public static class MavenClassesFolderDiscover implements ClassesFolderDiscover { - @Override - public boolean isClassesFolder(final File dir) { - return dir.getName().equals("classes") - && dir.getParentFile().getName().equals("target"); - } + public static interface FolderDDMapper { + File getDDFolder(final File dir); } } http://git-wip-us.apache.org/repos/asf/tomee/blob/eb3736dd/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java ---------------------------------------------------------------------- diff --git a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java index 5aff35b..29e62ae 100644 --- a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java +++ b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java @@ -222,6 +222,14 @@ public class Container implements AutoCloseable { throw new IllegalArgumentException(e); } + final File beansXml = new File(docBase, "WEB-INF/beans.xml"); + if (beansXml.exists()) { // add it since it is not in the scanned path by default + try { + webModule.getAltDDs().put("beans.xml", beansXml.toURI().toURL()); + } catch (final MalformedURLException e) { + // no-op + } + } DeploymentLoader.addBeansXmls(webModule); final AppModule app = new AppModule(loader, null); @@ -229,7 +237,9 @@ public class Container implements AutoCloseable { app.setStandaloneModule(true); app.setModuleId(webModule.getModuleId()); try { - webModule.getAltDDs().putAll(DeploymentLoader.getWebDescriptors(jarLocation)); + final Map<String, URL> webDescriptors = DeploymentLoader.getWebDescriptors(jarLocation); + webDescriptors.remove("beans.xml"); + webModule.getAltDDs().putAll(webDescriptors); DeploymentLoader.addWebModule(webModule, app); DeploymentLoader.addWebModuleDescriptors(new File(webModule.getJarLocation()).toURI().toURL(), webModule, app); } catch (final Exception e) { @@ -239,6 +249,14 @@ public class Container implements AutoCloseable { addCallersAsEjbModule(loader, app, additionalCallers); systemInstance.addObserver(new StandardContextCustomizer(webModule)); + systemInstance.setComponent(AnnotationDeployer.FolderDDMapper.class, new AnnotationDeployer.FolderDDMapper() { + @Override + public File getDDFolder(final File dir) { + // maven + return dir.getName().equals("classes") && dir.getParentFile().getName().equals("target") ? + new File(docBase, "WEB-INF") : null; + } + }); try { final AppInfo appInfo = configurationFactory.configureApplication(app);
