You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by st...@apache.org on 2018/01/31 23:22:18 UTC
tomee git commit: TOMEE-2167 add trim support for beans.xml
Repository: tomee
Updated Branches:
refs/heads/fb_tomee8 99206eb8c -> 74b2cad62
TOMEE-2167 add trim support for beans.xml
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/74b2cad6
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/74b2cad6
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/74b2cad6
Branch: refs/heads/fb_tomee8
Commit: 74b2cad6297c75061f82196f5b9c5ebe05b255fd
Parents: 99206eb
Author: Mark Struberg <st...@apache.org>
Authored: Thu Feb 1 00:20:15 2018 +0100
Committer: Mark Struberg <st...@apache.org>
Committed: Thu Feb 1 00:20:15 2018 +0100
----------------------------------------------------------------------
.../openejb/assembler/classic/BeansInfo.java | 1 +
.../java/org/apache/openejb/cdi/CdiScanner.java | 74 ++++++++++++++++----
.../openejb/cdi/OpenEJBBeanInfoService.java | 5 +-
.../apache/openejb/config/DeploymentLoader.java | 11 ++-
.../apache/openejb/config/ReadDescriptors.java | 11 ++-
5 files changed, 83 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/74b2cad6/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/BeansInfo.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/BeansInfo.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/BeansInfo.java
index b3f9dea..2cc4697 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/BeansInfo.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/BeansInfo.java
@@ -50,6 +50,7 @@ public class BeansInfo extends InfoObject {
public final List<String> alternatives = new LinkedList<>();
public final List<String> stereotypeAlternatives = new LinkedList<>();
public String discoveryMode;
+ public boolean trim;
public URI uri;
}
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/74b2cad6/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
index 68975e1..882e3d1 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
@@ -38,8 +38,9 @@ import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.container.BeanManagerImpl;
import org.apache.webbeans.intercept.InterceptorsManager;
import org.apache.webbeans.spi.BDABeansXmlScanner;
+import org.apache.webbeans.spi.BdaScannerService;
import org.apache.webbeans.spi.BeanArchiveService;
-import org.apache.webbeans.spi.ScannerService;
+import org.apache.webbeans.xml.DefaultBeanArchiveInformation;
import javax.decorator.Decorator;
import java.lang.annotation.Annotation;
@@ -59,7 +60,7 @@ import static java.util.Arrays.asList;
/**
* @version $Rev:$ $Date:$
*/
-public class CdiScanner implements ScannerService {
+public class CdiScanner implements BdaScannerService {
public static final String OPENEJB_CDI_FILTER_CLASSLOADER = "openejb.cdi.filter.classloader";
private static final Class<?>[] TRANSACTIONAL_INTERCEPTORS = new Class<?>[]{
@@ -67,7 +68,6 @@ public class CdiScanner implements ScannerService {
RequiredInterceptor.class, RequiredNewInterceptor.class, SupportsInterceptor.class
};
- private final Set<Class<?>> classes = new HashSet<>();
private final Set<Class<?>> startupClasses = new HashSet<>();
private final Set<URL> beansXml = new HashSet<>();
private final boolean logDebug;
@@ -75,8 +75,25 @@ public class CdiScanner implements ScannerService {
private WebBeansContext webBeansContext;
private ClassLoader containerLoader;
+ /**
+ * This BdaInfo is used for all manually added beans in this scanner.
+ */
+ private final DefaultBeanArchiveInformation tomeeBeanArchiveInformation;
+
+
+ /**
+ * for having proper scan mode 'SCOPED'/trim support we need to know which bean class
+ * has which beans.xml.
+ */
+ private Map<BeanArchiveService.BeanArchiveInformation, Set<Class<?>>> beanClassesPerBda = new HashMap<>();
+
+
public CdiScanner() {
logDebug = "true".equals(SystemInstance.get().getProperty("openejb.cdi.noclassdeffound.log", "false"));
+
+ tomeeBeanArchiveInformation = new DefaultBeanArchiveInformation("tomee");
+ tomeeBeanArchiveInformation.setBeanDiscoveryMode(BeanArchiveService.BeanDiscoveryMode.ALL);
+
}
public void setContext(final WebBeansContext webBeansContext) {
@@ -105,6 +122,7 @@ public class CdiScanner implements ScannerService {
// app beans
for (final EjbJarInfo ejbJar : appInfo.ejbJars) {
+ Set<Class<?>> classes = new HashSet<>();
final BeansInfo beans = ejbJar.beans;
if (beans == null || "false".equalsIgnoreCase(ejbJar.properties.getProperty("openejb.cdi.activated"))) {
@@ -194,10 +212,20 @@ public class CdiScanner implements ScannerService {
logger.info(" " + c);
}
}
+
+ if (!classes.isEmpty()) {
+ addClasses(tomeeBeanArchiveInformation, classes);
+ }
}
}
- private void addClasses(final Collection<String> list, final ClassLoader loader) {
+ private void addClasses(BeanArchiveService.BeanArchiveInformation bdaInfo, final Collection<String> list, final ClassLoader loader) {
+ Set<Class<?>> classes = beanClassesPerBda.get(bdaInfo);
+ if (classes == null) {
+ classes = new HashSet<>();
+ beanClassesPerBda.put(bdaInfo, classes);
+ }
+
for (final String s : list) {
final Class<?> load = load(s, loader);
if (load != null) {
@@ -205,10 +233,25 @@ public class CdiScanner implements ScannerService {
}
}
}
- private BeanArchiveService.BeanArchiveInformation handleBda(final StartupObject startupObject, final ClassLoader classLoader,final ClassLoaderComparator comparator,
- final BeansInfo beans, final ClassLoader scl, final boolean filterByClassLoader,
- final BeanArchiveService beanArchiveService, final boolean openejb,
- final BeansInfo.BDAInfo bda) {
+ private void addClasses(BeanArchiveService.BeanArchiveInformation bdaInfo, final Collection<Class<?>> list) {
+ Set<Class<?>> classes = beanClassesPerBda.get(bdaInfo);
+ if (classes == null) {
+ classes = new HashSet<>();
+ beanClassesPerBda.put(bdaInfo, classes);
+ }
+
+ classes.addAll(list);
+ }
+
+ @Override
+ public Map<BeanArchiveService.BeanArchiveInformation, Set<Class<?>>> getBeanClassesPerBda() {
+ return beanClassesPerBda;
+ }
+
+ private BeanArchiveService.BeanArchiveInformation handleBda(final StartupObject startupObject, final ClassLoader classLoader, final ClassLoaderComparator comparator,
+ final BeansInfo beans, final ClassLoader scl, final boolean filterByClassLoader,
+ final BeanArchiveService beanArchiveService, final boolean openejb,
+ final BeansInfo.BDAInfo bda) {
BeanArchiveService.BeanArchiveInformation information;
if (openejb) {
final OpenEJBBeanInfoService beanInfoService = OpenEJBBeanInfoService.class.cast(beanArchiveService);
@@ -226,10 +269,10 @@ public class CdiScanner implements ScannerService {
throw new IllegalStateException(e);
}
}
- addClasses(information.getAlternativeClasses(), classLoader);
- addClasses(information.getDecorators(), classLoader);
- addClasses(information.getInterceptors(), classLoader);
- addClasses(information.getAlternativeStereotypes(), classLoader);
+ addClasses(information, information.getAlternativeClasses(), classLoader);
+ addClasses(information, information.getDecorators(), classLoader);
+ addClasses(information, information.getInterceptors(), classLoader);
+ addClasses(information, information.getAlternativeStereotypes(), classLoader);
final boolean scanModeAnnotated = BeanArchiveService.BeanDiscoveryMode.ANNOTATED.equals(information.getBeanDiscoveryMode());
final boolean noScan = BeanArchiveService.BeanDiscoveryMode.NONE.equals(information.getBeanDiscoveryMode());
@@ -247,6 +290,7 @@ public class CdiScanner implements ScannerService {
}
}
+ Set<Class<?>> classes = new HashSet<>(bda.managedClasses.size());
for (final String name : bda.managedClasses) {
if (information.isClassExcluded(name)) {
continue;
@@ -278,6 +322,8 @@ public class CdiScanner implements ScannerService {
}
}
}
+
+ addClasses(information, classes);
}
return information;
@@ -348,12 +394,12 @@ public class CdiScanner implements ScannerService {
@Override
public Set<Class<?>> getBeanClasses() {
- return classes;
+ return Collections.EMPTY_SET;
}
@Override
public void release() {
- classes.clear();
+ beanClassesPerBda.clear();
}
public Set<Class<?>> getStartupClasses() {
http://git-wip-us.apache.org/repos/asf/tomee/blob/74b2cad6/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBBeanInfoService.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBBeanInfoService.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBBeanInfoService.java
index 1f6210b..964baf5 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBBeanInfoService.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBBeanInfoService.java
@@ -37,10 +37,13 @@ public class OpenEJBBeanInfoService implements BeanArchiveService {
}
public DefaultBeanArchiveInformation createBeanArchiveInformation(final BeansInfo.BDAInfo bda, final BeansInfo info, final ClassLoader loader) {
- final String mode = bda.discoveryMode == null? "ALL" : bda.discoveryMode;
+ String mode = bda.discoveryMode == null? "ALL" : bda.discoveryMode;
if (info != null && info.version != null && !"1.0".equals(info.version) && info.discoveryMode == null) {
throw new WebBeansConfigurationException("beans.xml with version 1.1 and higher must declare a bean-discovery-mode!");
}
+ if ("ALL".equalsIgnoreCase(mode) && bda.trim) {
+ mode = "TRIM";
+ }
final DefaultBeanArchiveInformation information = new DefaultBeanArchiveInformation(bda.uri.toASCIIString());
information.setVersion(info == null ? "1.1" : info.version);
http://git-wip-us.apache.org/repos/asf/tomee/blob/74b2cad6/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java b/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
index 1135c07..30645e0 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
@@ -1206,8 +1206,15 @@ public class DeploymentLoader implements DeploymentFilterable {
// check is done here since later we lost the data of the origin
ReadDescriptors.checkDuplicatedByBeansXml(beans, current);
- final String beanDiscoveryMode = beans.getBeanDiscoveryMode();
- current.getDiscoveryByUrl().put(url, beanDiscoveryMode == null ? "ALL" : beanDiscoveryMode);
+ String beanDiscoveryMode = beans.getBeanDiscoveryMode();
+ if (beanDiscoveryMode == null) {
+ beanDiscoveryMode = "ALL";
+ }
+ else if ("ALL".equalsIgnoreCase(beanDiscoveryMode) && beans.isTrim()) {
+ beanDiscoveryMode = "TRIM";
+ }
+
+ current.getDiscoveryByUrl().put(url, beanDiscoveryMode);
}
private void addBeansXmls(final AppModule appModule) {
http://git-wip-us.apache.org/repos/asf/tomee/blob/74b2cad6/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java b/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
index b3942a0..e8aad41 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
@@ -533,8 +533,15 @@ public class ReadDescriptors implements DynamicDeployer {
// check is done here since later we lost the data of the origin
ReadDescriptors.checkDuplicatedByBeansXml(beans, current);
- final String beanDiscoveryMode = beans.getBeanDiscoveryMode();
- current.getDiscoveryByUrl().put(url, beanDiscoveryMode == null ? "ALL" : beanDiscoveryMode);
+ String beanDiscoveryMode = beans.getBeanDiscoveryMode();
+ if (beanDiscoveryMode == null) {
+ beanDiscoveryMode = "ALL";
+ }
+ else if ("ALL".equalsIgnoreCase(beanDiscoveryMode) && beans.isTrim()) {
+ beanDiscoveryMode = "TRIM";
+ }
+
+ current.getDiscoveryByUrl().put(url, beanDiscoveryMode);
return current;
}