You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/08/14 11:56:53 UTC
svn commit: r1617907 - in
/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb:
config/ testing/ util/proxy/
Author: rmannibucau
Date: Thu Aug 14 09:56:53 2014
New Revision: 1617907
URL: http://svn.apache.org/r1617907
Log:
fixing meta for tests
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1617907&r1=1617906&r2=1617907&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Thu Aug 14 09:56:53 2014
@@ -1790,7 +1790,7 @@ public class AnnotationDeployer implemen
*/
buildAnnotatedRefs(beanInfo, annotationFinder, beanInfo.getClassLoader());
- processWebServiceClientHandlers(beanInfo, beanInfo.getClassLoader());
+ processWebServiceClientHandlers(beanInfo, annotationFinder, beanInfo.getClassLoader());
}
@@ -1911,7 +1911,20 @@ public class AnnotationDeployer implemen
validateRemoteClientRefs(classLoader, client, remoteClients);
- processWebServiceClientHandlers(client, classLoader);
+ final IAnnotationFinder finder = clientModule.getFinder();
+ if (!AnnotationFinder.class.isInstance(finder)) {
+ final Class<?>[] loadedClasses = new Class<?>[finder.getAnnotatedClassNames().size()];
+ int i = 0;
+ for (final String s : finder.getAnnotatedClassNames()) {
+ try {
+ loadedClasses[i++] = classLoader.loadClass(s);
+ } catch (final ClassNotFoundException e) {
+ // no-op
+ }
+ }
+ clientModule.getFinderReference().set(new FinderFactory.OpenEJBAnnotationFinder(new ClassesArchive(loadedClasses)));
+ }
+ processWebServiceClientHandlers(client, AnnotationFinder.class.cast(clientModule.getFinder()), classLoader);
return clientModule;
}
@@ -2238,7 +2251,7 @@ public class AnnotationDeployer implemen
*/
buildAnnotatedRefs(webApp, annotationFinder, classLoader);
- processWebServiceClientHandlers(webApp, classLoader);
+ processWebServiceClientHandlers(webApp, annotationFinder, classLoader);
return webModule;
}
@@ -2271,27 +2284,31 @@ public class AnnotationDeployer implemen
continue;
}
- final boolean dynamicBean = DynamicProxyImplFactory.isKnownDynamicallyImplemented(clazz);
final MetaAnnotatedClass<?> metaClass = new MetaAnnotatedClass(clazz);
+ final boolean dynamicBean = DynamicProxyImplFactory.isKnownDynamicallyImplemented(metaClass, clazz);
- final AnnotationFinder finder;
+ AnnotationFinder finder = null; // created lazily since not always needed
final AnnotationFinder annotationFinder;
-
if (ejbModule.getFinder() instanceof AnnotationFinder) {
- final AnnotationFinder af = (AnnotationFinder) ejbModule.getFinder();
+ AnnotationFinder af = (AnnotationFinder) ejbModule.getFinder();
final List<Class<?>> ancestors = Classes.ancestors(clazz);
+ if (dynamicBean) {
+ final Proxy p = metaClass.getAnnotation(Proxy.class);
+ if (p != null) {
+ ancestors.add(p.value());
+ }
+ }
+
final String[] names = new String[ancestors.size()];
int i = 0;
for (final Class<?> ancestor : ancestors) {
names[i++] = ancestor.getName();
}
annotationFinder = af.select(names);
- finder = af.select(clazz.getName());
- } else {
+ } else { // shouldn't occur
if (!dynamicBean) {
annotationFinder = createFinder(clazz);
- finder = new AnnotationFinder(new ClassesArchive(clazz));
} else {
final Class<?>[] classes;
final Proxy proxy = metaClass.getAnnotation(Proxy.class);
@@ -2301,7 +2318,6 @@ public class AnnotationDeployer implemen
classes = new Class<?>[]{clazz, proxy.value()};
}
annotationFinder = createFinder(classes);
- finder = new AnnotationFinder(new ClassesArchive(classes));
}
}
@@ -2353,6 +2369,9 @@ public class AnnotationDeployer implemen
if (bean.getTransactionType() == TransactionType.CONTAINER) {
processAttributes(new TransactionAttributeHandler(assemblyDescriptor, ejbName), clazz, annotationFinder);
} else {
+ if (finder == null) {
+ finder = annotationFinder.select(clazz.getName());
+ }
checkAttributes(new TransactionAttributeHandler(assemblyDescriptor, ejbName), ejbName, ejbModule, finder, "invalidTransactionAttribute");
}
@@ -2722,9 +2741,9 @@ public class AnnotationDeployer implemen
buildAnnotatedRefs(bean, annotationFinder, classLoader);
- processWebServiceHandlers(ejbModule, bean);
+ processWebServiceHandlers(ejbModule, bean, annotationFinder);
- processWebServiceClientHandlers(bean, classLoader);
+ processWebServiceClientHandlers(bean, annotationFinder, classLoader);
try {
if (BeanContext.Comp.class.getName().equals(bean.getEjbClass())) {
@@ -2771,7 +2790,7 @@ public class AnnotationDeployer implemen
*/
buildAnnotatedRefs(interceptor, annotationFinder, classLoader);
- processWebServiceClientHandlers(interceptor, classLoader);
+ processWebServiceClientHandlers(interceptor, annotationFinder, classLoader);
/**
* Interceptors do not have their own section in ejb-jar.xml for resource references
@@ -4672,9 +4691,9 @@ public class AnnotationDeployer implemen
/**
* Scan for @EJB, @Resource, @WebServiceRef, @PersistenceUnit, and @PersistenceContext on WebService HandlerChain classes
*/
- private void processWebServiceHandlers(final EjbModule ejbModule, final EnterpriseBean bean) throws OpenEJBException {
+ private void processWebServiceHandlers(final EjbModule ejbModule, final EnterpriseBean bean, final AnnotationFinder finder) throws OpenEJBException {
// add webservice handler classes to the class finder used in annotation processing
- final Set<Class<?>> classes = new HashSet<Class<?>>();
+ final Set<String> classes = new HashSet<>();
if (ejbModule.getWebservices() != null) {
for (final WebserviceDescription webservice : ejbModule.getWebservices().getWebserviceDescription()) {
for (final PortComponent port : webservice.getPortComponent()) {
@@ -4690,19 +4709,15 @@ public class AnnotationDeployer implemen
for (final Handler handler : handlerChain.getHandler()) {
final String handlerClass = realClassName(handler.getHandlerClass());
if (handlerClass != null) {
- try {
- final Class handlerClazz = ejbModule.getClassLoader().loadClass(handlerClass);
- classes.add(handlerClazz);
- } catch (final ClassNotFoundException e) {
- throw new OpenEJBException("Unable to load webservice handler class: " + handlerClass, e);
- }
+ classes.add(handlerClass);
}
}
}
}
}
}
- final AnnotationFinder handlersFinder = createFinder(classes.toArray(new Class<?>[classes.size()]));
+ classes.add(bean.getEjbClass());
+ final AnnotationFinder handlersFinder = finder.select(classes);
buildAnnotatedRefs(bean, handlersFinder, ejbModule.getClassLoader());
}
@@ -4713,13 +4728,13 @@ public class AnnotationDeployer implemen
* @param classLoader
* @throws OpenEJBException
*/
- private void processWebServiceClientHandlers(final JndiConsumer consumer, final ClassLoader classLoader) throws OpenEJBException {
+ private void processWebServiceClientHandlers(final JndiConsumer consumer, final AnnotationFinder finder, final ClassLoader classLoader) throws OpenEJBException {
if (SystemInstance.get().hasProperty("openejb.geronimo")) {
return;
}
- final Set<Class<?>> processedClasses = new HashSet<Class<?>>();
- final Set<Class<?>> handlerClasses = new HashSet<Class<?>>();
+ final Set<String> processedClasses = new HashSet<>();
+ final Set<String> handlerClasses = new HashSet<>();
do {
// get unprocessed handler classes
handlerClasses.clear();
@@ -4731,12 +4746,7 @@ public class AnnotationDeployer implemen
for (final org.apache.openejb.jee.HandlerChain handlerChain : chains.getHandlerChain()) {
for (final Handler handler : handlerChain.getHandler()) {
if (handler.getHandlerClass() != null) {
- try {
- final Class clazz = classLoader.loadClass(realClassName(handler.getHandlerClass()));
- handlerClasses.add(clazz);
- } catch (final ClassNotFoundException e) {
- throw new OpenEJBException("Unable to load webservice handler class: " + handler.getHandlerClass(), e);
- }
+ handlerClasses.add(realClassName(handler.getHandlerClass()));
}
}
}
@@ -4744,7 +4754,7 @@ public class AnnotationDeployer implemen
handlerClasses.removeAll(processedClasses);
// process handler classes
- final AnnotationFinder handlerAnnotationFinder = createFinder(handlerClasses.toArray(new Class<?>[handlerClasses.size()]));
+ final AnnotationFinder handlerAnnotationFinder = finder.select(handlerClasses);
/*
* @EJB
@@ -5124,11 +5134,6 @@ public class AnnotationDeployer implemen
return null;
}
- private boolean getFirstt(final List<?> list) {
- return list.size() > 0;
- }
-
-
/**
* Remote interface validation
*
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1617907&r1=1617906&r2=1617907&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java Thu Aug 14 09:56:53 2014
@@ -1124,7 +1124,7 @@ public class DeploymentLoader implements
try {
finder = FinderFactory.createFinder(appModule);
} catch (final Exception e) {
- finder = new FinderFactory.ModuleLimitedFinder(new org.apache.xbean.finder.AnnotationFinder(new WebappAggregatedArchive(appModule.getClassLoader(), appModule.getAltDDs(), xmls)));
+ finder = new FinderFactory.ModuleLimitedFinder(new FinderFactory.OpenEJBAnnotationFinder(new WebappAggregatedArchive(appModule.getClassLoader(), appModule.getAltDDs(), xmls)));
}
appModule.setEarLibFinder(finder);
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java?rev=1617907&r1=1617906&r2=1617907&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java Thu Aug 14 09:56:53 2014
@@ -20,6 +20,12 @@ package org.apache.openejb.config;
import org.apache.openejb.OpenEJBRuntimeException;
import org.apache.openejb.jee.Beans;
import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.Handler;
+import org.apache.openejb.jee.HandlerChain;
+import org.apache.openejb.jee.PortComponent;
+import org.apache.openejb.jee.Servlet;
+import org.apache.openejb.jee.SessionBean;
+import org.apache.openejb.jee.WebserviceDescription;
import org.apache.openejb.loader.SystemInstance;
import org.apache.xbean.finder.Annotated;
import org.apache.xbean.finder.AnnotationFinder;
@@ -69,14 +75,23 @@ public class FinderFactory {
if (module instanceof WebModule) {
final WebModule webModule = (WebModule) module;
finder = newFinder(new WebappAggregatedArchive(webModule, webModule.getScannableUrls()));
+ if (!finder.foundSomething()) { // test case (AppComposer with new WebApp())
+ finder = fallbackAnnotationFinder(module);
+ }
finder.link();
} else if (module instanceof ConnectorModule) {
final ConnectorModule connectorModule = (ConnectorModule) module;
finder = newFinder(new ConfigurableClasspathArchive(connectorModule, connectorModule.getLibraries()));
+ if (!finder.foundSomething()) { // test case
+ finder = fallbackAnnotationFinder(module);
+ }
finder.link();
} else if (module instanceof AppModule) {
final Collection<URL> urls = NewLoaderLogic.applyBuiltinExcludes(new UrlSet(AppModule.class.cast(module).getAdditionalLibraries())).getUrls();
finder = newFinder(new WebappAggregatedArchive(module.getClassLoader(), module.getAltDDs(), urls));
+ if (!finder.foundSomething()) { // test case
+ finder = fallbackAnnotationFinder(module);
+ }
} else if (module.getJarLocation() != null) {
final String location = module.getJarLocation();
final File file = new File(location);
@@ -118,9 +133,8 @@ public class FinderFactory {
}
private Class<?>[] ensureMinimalClasses(final DeploymentModule module) {
+ final Collection<Class<?>> finderClasses = new HashSet<>();
if (EjbModule.class.isInstance(module)) {
- final Collection<Class<?>> finderClasses = new HashSet<>();
-
final EjbModule ejb = EjbModule.class.cast(module);
final EnterpriseBean[] enterpriseBeans = ejb.getEjbJar().getEnterpriseBeans();
@@ -130,12 +144,44 @@ public class FinderFactory {
}
for (final EnterpriseBean bean : enterpriseBeans) {
+ final String name;
+ if (SessionBean.class.isInstance(bean)) {
+ final SessionBean sessionBean = SessionBean.class.cast(bean);
+ if (sessionBean.getProxy() == null) {
+ name = sessionBean.getEjbClass();
+ } else {
+ name = sessionBean.getProxy();
+ }
+ } else {
+ name = bean.getEjbClass();
+ }
try {
- finderClasses.addAll(ancestors(classLoader.loadClass(bean.getEjbClass())));
+ final Class<?> clazz = classLoader.loadClass(name);
+ finderClasses.addAll(ancestors(clazz));
} catch (final ClassNotFoundException e) {
// no-op
}
}
+ if (ejb.getWebservices() != null) {
+ for (final WebserviceDescription webservice : ejb.getWebservices().getWebserviceDescription()) {
+ for (final PortComponent port : webservice.getPortComponent()) {
+ if (port.getHandlerChains() == null) {
+ continue;
+ }
+ for (final HandlerChain handlerChain : port.getHandlerChains().getHandlerChain()) {
+ for (final Handler handler : handlerChain.getHandler()) {
+ if (handler.getHandlerClass() != null) {
+ try {
+ finderClasses.addAll(ancestors(classLoader.loadClass(handler.getHandlerClass())));
+ } catch (final ClassNotFoundException e) {
+ // no-op
+ }
+ }
+ }
+ }
+ }
+ }
+ }
for (final org.apache.openejb.jee.Interceptor interceptor : ejb.getEjbJar().getInterceptors()) {
try {
finderClasses.addAll(ancestors(classLoader.loadClass(interceptor.getInterceptorClass())));
@@ -177,10 +223,38 @@ public class FinderFactory {
}
}
}
-
- return finderClasses.toArray(new Class<?>[finderClasses.size()]);
+ } else if (WebModule.class.isInstance(module)) {
+ final WebModule web = WebModule.class.cast(module);
+ final ClassLoader classLoader = web.getClassLoader();
+ if (web.getWebApp() != null) {
+ for (final Servlet s : web.getWebApp().getServlet()) {
+ final String servletClass = s.getServletClass();
+ if (servletClass == null) {
+ continue;
+ }
+ try {
+ finderClasses.addAll(ancestors(classLoader.loadClass(servletClass)));
+ } catch (final ClassNotFoundException e) {
+ // no-op
+ }
+ }
+ for (final String s : web.getRestClasses()) {
+ try {
+ finderClasses.addAll(ancestors(classLoader.loadClass(s)));
+ } catch (final ClassNotFoundException e) {
+ // no-op
+ }
+ }
+ for (final String s : web.getEjbWebServices()) {
+ try {
+ finderClasses.addAll(ancestors(classLoader.loadClass(s)));
+ } catch (final ClassNotFoundException e) {
+ // no-op
+ }
+ }
+ }
}
- return new Class<?>[0];
+ return finderClasses.toArray(new Class<?>[finderClasses.size()]);
}
private static OpenEJBAnnotationFinder newFinder(final Archive archive) {
@@ -215,14 +289,19 @@ public class FinderFactory {
}
}
- public static class ModuleLimitedFinder implements IAnnotationFinder {
- private final IAnnotationFinder delegate;
+ public static class ModuleLimitedFinder implements IAnnotationFinder, AnnotationFinderDelegate {
+ private final OpenEJBAnnotationFinder delegate;
- public ModuleLimitedFinder(final IAnnotationFinder delegate) {
+ public ModuleLimitedFinder(final OpenEJBAnnotationFinder delegate) {
this.delegate = delegate;
}
@Override
+ public OpenEJBAnnotationFinder getOpenEJBFinder() {
+ return delegate;
+ }
+
+ @Override
public boolean isAnnotationPresent(final Class<? extends Annotation> annotation) {
return delegate.isAnnotationPresent(annotation);
}
@@ -435,7 +514,11 @@ public class FinderFactory {
}
}
- public static class OpenEJBAnnotationFinder extends AnnotationFinder {
+ public static interface AnnotationFinderDelegate {
+ OpenEJBAnnotationFinder getOpenEJBFinder();
+ }
+
+ public static class OpenEJBAnnotationFinder extends AnnotationFinder implements AnnotationFinderDelegate {
private static final String[] JVM_SCANNING_CONFIG = SystemInstance.get().getProperty("openejb.scanning.xbean.jvm", "java.").split(",");
public OpenEJBAnnotationFinder(final Archive archive) {
@@ -443,6 +526,11 @@ public class FinderFactory {
}
@Override
+ public OpenEJBAnnotationFinder getOpenEJBFinder() {
+ return this;
+ }
+
+ @Override
protected boolean isJvm(final String name) {
return sharedIsJvm(name);
}
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java?rev=1617907&r1=1617906&r2=1617907&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java Thu Aug 14 09:56:53 2014
@@ -104,6 +104,7 @@ import java.util.Properties;
import java.util.concurrent.Callable;
import static org.apache.openejb.config.DeploymentFilterable.DEPLOYMENTS_CLASSPATH_PROPERTY;
+import static org.apache.openejb.util.Classes.ancestors;
@SuppressWarnings("deprecation")
public final class ApplicationComposers {
@@ -313,7 +314,7 @@ public final class ApplicationComposers
ejbDeployment.setDeploymentId(testClass.getName());
final EjbModule ejbModule = new EjbModule(ejbJar, openejbJar);
- ejbModule.setFinder(new FinderFactory.OpenEJBAnnotationFinder(new ClassesArchive(testClass)));
+ ejbModule.setFinder(new FinderFactory.OpenEJBAnnotationFinder(new ClassesArchive(ancestors(testClass))));
appModule.getEjbModules().add(ejbModule);
}
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java?rev=1617907&r1=1617906&r2=1617907&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java Thu Aug 14 09:56:53 2014
@@ -33,6 +33,10 @@ import java.lang.reflect.Method;
public class DynamicProxyImplFactory {
public static boolean isKnownDynamicallyImplemented(final Class<?> clazz) {
final Annotated<Class<?>> metaClass = new MetaAnnotatedClass(clazz);
+ return isKnownDynamicallyImplemented(metaClass, clazz);
+ }
+
+ public static boolean isKnownDynamicallyImplemented(final Annotated<?> metaClass, final Class<?> clazz) {
return clazz.isInterface()
&& (metaClass.getAnnotation(PersistenceContext.class) != null
|| metaClass.getAnnotation(Proxy.class) != null);