Repository: tomee Updated Branches: refs/heads/develop e17c854b1 -> 8b82b6469
few more tck passing + excluding few others Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/8b82b646 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/8b82b646 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/8b82b646 Branch: refs/heads/develop Commit: 8b82b64699f6a59fad27ff5c139202bac7a0be7e Parents: e17c854 Author: Romain Manni-Bucau <[email protected]> Authored: Sun Jan 11 21:05:26 2015 +0100 Committer: Romain Manni-Bucau <[email protected]> Committed: Sun Jan 11 21:05:26 2015 +0100 ---------------------------------------------------------------------- .../openejb/OpenEJBArchiveProcessor.java | 64 ++++++++++++++------ .../openejb/cdi/CdiAppContextsService.java | 12 +++- .../server/httpd/HttpListenerRegistry.java | 22 +++++++ .../openejb/server/httpd/HttpRequestImpl.java | 2 +- .../openejb/server/httpd/HttpResponseImpl.java | 6 +- tck/cdi-embedded/pom.xml | 2 + tck/cdi-embedded/src/test/resources/failing.xml | 2 +- tck/cdi-embedded/src/test/resources/passing.xml | 28 +++++++++ 8 files changed, 115 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/8b82b646/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java ---------------------------------------------------------------------- diff --git a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java index 4593a75..1d6c72f 100644 --- a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java +++ b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java @@ -114,6 +114,7 @@ public class OpenEJBArchiveProcessor { final List<URL> additionalPaths = new ArrayList<>(); CompositeArchive scannedArchive = null; final Map<URL, List<String>> earMap = new HashMap<>(); + final Map<String, Object> altDD = new HashMap<>(); final List<Archive> earLibsArchives = new ArrayList<>(); final CompositeBeans earBeans = new CompositeBeans(); @@ -122,7 +123,7 @@ public class OpenEJBArchiveProcessor { final String prefix = isWebApp ? WEB_INF : META_INF; if (isEar || isWebApp) { final Map<ArchivePath, Node> jars = archive.getContent(new IncludeRegExpPaths(isEar ? "/.*\\.jar" : "/WEB-INF/lib/.*\\.jar")); - scannedArchive = analyzeLibs(parent, additionalPaths, earMap, earLibsArchives, earBeans, jars); + scannedArchive = analyzeLibs(parent, additionalPaths, earMap, earLibsArchives, earBeans, jars, altDD); } final URL[] urls = additionalPaths.toArray(new URL[additionalPaths.size()]); @@ -153,7 +154,20 @@ public class OpenEJBArchiveProcessor { final EjbModule earCdiModule = new EjbModule(appModule.getClassLoader(), DeploymentLoader.EAR_SCOPED_CDI_BEANS + appModule.getModuleId(), new EjbJar(), new OpenejbJar()); earCdiModule.setBeans(earBeans); earCdiModule.setFinder(earLibFinder); - earCdiModule.setEjbJar(new EjbJar()); // EmptyEjbJar would prevent to add scanned EJBs but this is *here* an aggregator so we need to be able to do so + + final EjbJar ejbJar; + final AssetSource ejbJarXml = AssetSource.class.isInstance(altDD.get(EJB_JAR_XML)) ? AssetSource.class.cast(altDD.get(EJB_JAR_XML)) : null; + if (ejbJarXml != null) { + try { + ejbJar = ReadDescriptors.readEjbJar(ejbJarXml.get()); + } catch (final Exception e) { + throw new OpenEJBRuntimeException(e); + } + } else { + ejbJar = new EjbJar(); + } + + earCdiModule.setEjbJar(ejbJar); // EmptyEjbJar would prevent to add scanned EJBs but this is *here* an aggregator so we need to be able to do so appModule.getEjbModules().add(earCdiModule); for (final Map.Entry<ArchivePath, Node> node : archive.getContent(new IncludeRegExpPaths("/.*\\.war")).entrySet()) { @@ -161,7 +175,7 @@ public class OpenEJBArchiveProcessor { if (ArchiveAsset.class.isInstance(asset)) { final Archive<?> webArchive = ArchiveAsset.class.cast(asset).getArchive(); if (WebArchive.class.isInstance(webArchive)) { - final Map<String, Object> altDD = new HashMap<>(); + final Map<String, Object> webAltDD = new HashMap<>(); final Node beansXml = findBeansXml(webArchive, WEB_INF); final List<URL> webappAdditionalPaths = new LinkedList<>(); @@ -171,7 +185,8 @@ public class OpenEJBArchiveProcessor { final CompositeArchive webAppArchive = analyzeLibs(parent, webappAdditionalPaths, webAppClassesByUrl, webAppArchives, webAppBeansXml, - webArchive.getContent(new IncludeRegExpPaths("/WEB-INF/lib/.*\\.jar"))); + webArchive.getContent(new IncludeRegExpPaths("/WEB-INF/lib/.*\\.jar")), + webAltDD); webAppArchives.add(webArchive); final SWClassLoader webLoader = new SWClassLoader(parent, webAppArchives.toArray(new Archive<?>[webAppArchives.size()])); @@ -186,9 +201,11 @@ public class OpenEJBArchiveProcessor { webModule.setScannableUrls(Collections.<URL>emptyList()); webModule.setFinder(finder); - final EjbModule ejbModule = new EjbModule(webLoader, webModule.getModuleId(), null, new EjbJar(), new OpenejbJar()); + final EjbJar webEjbJar = createEjbJar(prefix, webArchive); + + final EjbModule ejbModule = new EjbModule(webLoader, webModule.getModuleId(), null, webEjbJar, new OpenejbJar()); ejbModule.setBeans(webAppBeansXml); - ejbModule.getAltDDs().putAll(altDD); + ejbModule.getAltDDs().putAll(webAltDD); ejbModule.getAltDDs().put("beans.xml", webAppBeansXml); ejbModule.setFinder(finder); ejbModule.setClassLoader(webLoader); @@ -220,17 +237,7 @@ public class OpenEJBArchiveProcessor { testDD = new HashMap<>(); // ignore } - final EjbJar ejbJar; - final Node ejbJarXml = archive.get(prefix.concat(EJB_JAR_XML)); - if (ejbJarXml != null) { - try { - ejbJar = ReadDescriptors.readEjbJar(ejbJarXml.getAsset().openStream()); - } catch (final OpenEJBException e) { - throw new OpenEJBRuntimeException(e); - } - } else { - ejbJar = new EjbJar(); - } + final EjbJar ejbJar = createEjbJar(prefix, archive); if (ejbJar.getModuleName() == null) { final String name = archive.getName(); @@ -273,6 +280,21 @@ public class OpenEJBArchiveProcessor { return appModule; } + private static EjbJar createEjbJar(final String prefix, final Archive<?> webArchive) { + final EjbJar webEjbJar; + final Node webEjbJarXml = webArchive.get(prefix.concat(EJB_JAR_XML)); + if (webEjbJarXml != null) { + try { + webEjbJar = ReadDescriptors.readEjbJar(webEjbJarXml.getAsset().openStream()); + } catch (final OpenEJBException e) { + throw new OpenEJBRuntimeException(e); + } + } else { + webEjbJar = new EjbJar(); + } + return webEjbJar; + } + private static EjbModule addTestClassAsManagedBean(Class<?> javaClass, URLClassLoader tempClassLoader, AppModule appModule) { final EjbJar ejbJar = new EjbJar(); final OpenejbJar openejbJar = new OpenejbJar(); @@ -313,7 +335,8 @@ public class OpenEJBArchiveProcessor { final List<URL> additionalPaths, final Map<URL, List<String>> earMap, final List<Archive> earLibsArchives, final CompositeBeans earBeans, - final Map<ArchivePath, Node> jars) { + final Map<ArchivePath, Node> jars, + final Map<String, Object> altDD) { final List<org.apache.xbean.finder.archive.Archive> archives = new ArrayList<>(jars.size()); for (final Map.Entry<ArchivePath, Node> node : jars.entrySet()) { final Asset asset = node.getValue().getAsset(); @@ -351,6 +374,11 @@ public class OpenEJBArchiveProcessor { } archives.add(new ClassesArchive(earClasses)); } + + final Node ejbJarXml = libArchive.get(META_INF + EJB_JAR_XML); + if (ejbJarXml != null) { // not super, we should merge them surely but ok for use cases we met until today + altDD.put("ejb-jar.xml", new AssetSource(ejbJarXml.getAsset(), null)); + } } if (UrlAsset.class.isInstance(asset) || FileAsset.class.isInstance(asset)) { try { final URL url = UrlAsset.class.isInstance(asset) ? get(URL.class, "url", asset) : get(File.class, "file", asset).toURI().toURL(); http://git-wip-us.apache.org/repos/asf/tomee/blob/8b82b646/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java index afa3bf9..18e475e 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java @@ -364,8 +364,13 @@ public class CdiAppContextsService extends AbstractContextsService implements Co if (cid != null) { final ConversationManager conversationManager = webBeansContext.getConversationManager(); final ConversationImpl c = conversationManager.getPropogatedConversation(cid, session.getId()); - if (c != null && c.iUseIt() > 1) { - throw new BusyConversationException("busy conversation " + c.getId() + '(' + c.getSessionId() + ')'); + if (c != null) { + if (c.isTransient()) { + throw new IllegalStateException("Conversation " + cid + " missing"); + } + if (c.iUseIt() > 1) { + throw new BusyConversationException("busy conversation " + c.getId() + '(' + c.getSessionId() + ')'); + } } } } @@ -664,6 +669,9 @@ public class CdiAppContextsService extends AbstractContextsService implements Co } } } + if (context != null && createIfPropagated) { + context.setActive(true); + } return context; } http://git-wip-us.apache.org/repos/asf/tomee/blob/8b82b646/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java ---------------------------------------------------------------------- diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java index 4cb4bfb..e37232a 100644 --- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java +++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java @@ -21,6 +21,7 @@ import org.apache.openejb.assembler.classic.WebAppBuilder; import org.apache.openejb.cdi.CdiAppContextsService; import org.apache.openejb.cdi.Proxys; import org.apache.openejb.core.WebContext; +import org.apache.openejb.loader.IO; import org.apache.openejb.loader.SystemInstance; import org.apache.openejb.util.AppFinder; import org.apache.openejb.web.LightweightWebAppBuilder; @@ -31,7 +32,9 @@ import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; +import java.io.InputStream; import java.net.URI; +import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -141,6 +144,7 @@ public class HttpListenerRegistry implements HttpListener { listeners = new HashMap<>(registry); } + boolean found = false; for (final Map.Entry<String, HttpListener> entry : listeners.entrySet()) { final String pattern = entry.getKey(); if (path.matches(pattern) || path.equals(pattern)) { @@ -152,9 +156,27 @@ public class HttpListenerRegistry implements HttpListener { HttpRequestImpl.class.cast(request).noPathInfo(); } entry.getValue().onMessage(request, response); + found = true; break; } } + if (!found) { + final String servletPath = request.getServletPath(); + if (servletPath != null) { + final URL url = SystemInstance.get().getComponent(ServletContext.class).getResource(servletPath); + if (url != null) { + final InputStream from = url.openStream(); + try { + IO.copy(from, response.getOutputStream()); + } finally { + IO.close(from); + } + } + if (servletPath.endsWith(".html")) { + response.setContentType("text/html"); + } + } + } } finally { if (currentFL == null) { currentFilterListener.set(null); http://git-wip-us.apache.org/repos/asf/tomee/blob/8b82b646/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java ---------------------------------------------------------------------- diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java index a4a7db2..d285109 100644 --- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java +++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java @@ -542,7 +542,7 @@ public class HttpRequestImpl implements HttpRequest { } try { - uri = new URI(socketURI.toString() + token); + uri = new URI(socketURI.toString() + token.replace("//", "/")); } catch (URISyntaxException e) { throw new IOException("Malformed URI :" + token + " Exception: " + e.getMessage()); } http://git-wip-us.apache.org/repos/asf/tomee/blob/8b82b646/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java ---------------------------------------------------------------------- diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java index 8e46b5f..9692e28 100644 --- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java +++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java @@ -250,7 +250,9 @@ public class HttpResponseImpl implements HttpResponse { } public void flushBuffer() throws IOException { - // there is really no way to flush + if (writer != null) { + writer.flush(); + } } @Override @@ -419,6 +421,8 @@ public class HttpResponseImpl implements HttpResponse { * @throws java.io.IOException if an exception is thrown */ protected void writeMessage(OutputStream output, boolean indent) throws IOException { + flushBuffer(); + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); final DataOutputStream out = new DataOutputStream(baos); closeMessage(); http://git-wip-us.apache.org/repos/asf/tomee/blob/8b82b646/tck/cdi-embedded/pom.xml ---------------------------------------------------------------------- diff --git a/tck/cdi-embedded/pom.xml b/tck/cdi-embedded/pom.xml index 0786023..d33af5d 100644 --- a/tck/cdi-embedded/pom.xml +++ b/tck/cdi-embedded/pom.xml @@ -188,6 +188,8 @@ </property> </properties> <systemPropertyVariables> + <cdiTckExcludeDummy>true</cdiTckExcludeDummy> + <jms>new://Resource?type=javax.jms.ConnectionFactory</jms> <queue>new://Resource?type=Queue</queue> <topic>new://Resource?type=Topic</topic> http://git-wip-us.apache.org/repos/asf/tomee/blob/8b82b646/tck/cdi-embedded/src/test/resources/failing.xml ---------------------------------------------------------------------- diff --git a/tck/cdi-embedded/src/test/resources/failing.xml b/tck/cdi-embedded/src/test/resources/failing.xml index 24105ee..613b81e 100644 --- a/tck/cdi-embedded/src/test/resources/failing.xml +++ b/tck/cdi-embedded/src/test/resources/failing.xml @@ -31,7 +31,7 @@ -Dopenejb.embedded.try-jsp=true --> <classes> - <class name="org.jboss.cdi.tck.tests.event.observer.transactional.TransactionalObserverTest" /> + <class name="org.jboss.cdi.tck.tests.context.conversation.servlet.ServletConversationTest" /> </classes> </test> </suite> http://git-wip-us.apache.org/repos/asf/tomee/blob/8b82b646/tck/cdi-embedded/src/test/resources/passing.xml ---------------------------------------------------------------------- diff --git a/tck/cdi-embedded/src/test/resources/passing.xml b/tck/cdi-embedded/src/test/resources/passing.xml index 79b3821..c079edd 100644 --- a/tck/cdi-embedded/src/test/resources/passing.xml +++ b/tck/cdi-embedded/src/test/resources/passing.xml @@ -157,6 +157,34 @@ <exclude name="testFinalMethodWithClassLevelInterceptor" /> </methods> </class> + + <!-- CDITCK-462 javax.enterprise.context.conversation.id is not el compliant --> + <class name="org.jboss.cdi.tck.tests.context.conversation.LongRunningConversationPropagatedByFacesContextTest"> + <methods> + <exclude name="testConversationPropagatedAjax" /> + </methods> + </class> + + <!-- CDITCK-463 --> + <class name="org.jboss.cdi.tck.tests.lookup.manager.provider.custom.CustomCDIProviderTest"> + <methods> + <exclude name=".*" /> + </methods> + </class> + + <!-- not in web profile and not supported by embedded adapter anyway --> + <class name="org.jboss.cdi.tck.tests.deployment.packaging.rar.ResourceAdapterArchiveTest"> + <methods> + <exclude name=".*" /> + </methods> + </class> + + <!-- not supported by embedded adapter --> + <class name="org.jboss.cdi.tck.tests.lookup.injection.non.contextual.InjectionIntoNonContextualComponentTest"> + <methods> + <exclude name="testInjectionIntoTagHandler" /> + </methods> + </class> </classes> </test> </suite>
