Author: rmannibucau
Date: Fri Jul 1 15:54:47 2011
New Revision: 1141969
URL: http://svn.apache.org/viewvc?rev=1141969&view=rev
Log:
refactoring a bit tck module,
modifying bval tcks module
still some work todo...
Added:
openejb/trunk/openejb3/tck/bval-embedded/src/test/java/
openejb/trunk/openejb3/tck/bval-embedded/src/test/java/org/
openejb/trunk/openejb3/tck/bval-embedded/src/test/java/org/apache/
openejb/trunk/openejb3/tck/bval-embedded/src/test/java/org/apache/openejb/
openejb/trunk/openejb3/tck/bval-embedded/src/test/java/org/apache/openejb/tck/
openejb/trunk/openejb3/tck/bval-embedded/src/test/java/org/apache/openejb/tck/bval/
openejb/trunk/openejb3/tck/bval-embedded/src/test/java/org/apache/openejb/tck/bval/impl/
openejb/trunk/openejb3/tck/bval-embedded/src/test/java/org/apache/openejb/tck/bval/impl/StandaloneContainersImpl.java
openejb/trunk/openejb3/tck/tck-common/
openejb/trunk/openejb3/tck/tck-common/pom.xml
openejb/trunk/openejb3/tck/tck-common/src/
openejb/trunk/openejb3/tck/tck-common/src/main/
openejb/trunk/openejb3/tck/tck-common/src/main/java/
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/Archive.java
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/ContainersImpl.java
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/StandaloneContainersImpl.java
Removed:
openejb/trunk/openejb3/tck/cdi-embedded/src/main/
openejb/trunk/openejb3/tck/cdi-embedded/src/test/java/org/apache/openejb/tck/cdi/embedded/Archive.java
openejb/trunk/openejb3/tck/cdi-embedded/src/test/java/org/apache/openejb/tck/cdi/embedded/ContainersImpl.java
openejb/trunk/openejb3/tck/cdi-embedded/src/test/java/org/apache/openejb/tck/cdi/embedded/StandaloneContainersImpl.java
Modified:
openejb/trunk/openejb3/tck/bval-embedded/pom.xml
openejb/trunk/openejb3/tck/bval-embedded/src/test/resources/META-INF/jboss-test-harness.properties
openejb/trunk/openejb3/tck/cdi-embedded/pom.xml
openejb/trunk/openejb3/tck/cdi-embedded/src/test/resources/META-INF/jboss-test-harness.properties
openejb/trunk/openejb3/tck/pom.xml
Modified: openejb/trunk/openejb3/tck/bval-embedded/pom.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/bval-embedded/pom.xml?rev=1141969&r1=1141968&r2=1141969&view=diff
==============================================================================
--- openejb/trunk/openejb3/tck/bval-embedded/pom.xml (original)
+++ openejb/trunk/openejb3/tck/bval-embedded/pom.xml Fri Jul 1 15:54:47 2011
@@ -30,11 +30,13 @@
<name>OpenEJB :: TCK :: Bean Validation Embedded</name>
<description>Aggregates dependencies and runs the JSR-303 TCK</description>
- <properties>
-
<validation.provider>org.apache.bval.jsr303.ApacheValidationProvider</validation.provider>
- </properties>
-
<dependencies>
+
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-validation_1.0_spec</artifactId>
+ <version>1.1</version>
+ </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>openejb-core</artifactId>
@@ -42,6 +44,12 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-common</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
@@ -72,19 +80,34 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>2.8</version>
+ <version>2.9</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/jsr303-tck-suite.xml</suiteXmlFile>
</suiteXmlFiles>
<argLine>-Xmx512m</argLine>
<forkMode>once</forkMode>
- <systemProperties>
- <property>
- <name>validation.provider</name>
- <value>${validation.provider}</value>
- </property>
- </systemProperties>
+ <systemPropertyVariables>
+
<validation.provider>org.apache.bval.jsr303.ApacheValidationProvider</validation.provider>
+ </systemPropertyVariables>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ <version>2.8</version>
+ <executions>
+ <execution>
+ <id>generate-test-report</id>
+ <phase>test</phase>
+ <goals>
+ <goal>report-only</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+
<outputDirectory>${project.build.directory}/surefire-reports</outputDirectory>
+ <outputName>test-report</outputName>
</configuration>
</plugin>
</plugins>
Added:
openejb/trunk/openejb3/tck/bval-embedded/src/test/java/org/apache/openejb/tck/bval/impl/StandaloneContainersImpl.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/bval-embedded/src/test/java/org/apache/openejb/tck/bval/impl/StandaloneContainersImpl.java?rev=1141969&view=auto
==============================================================================
---
openejb/trunk/openejb3/tck/bval-embedded/src/test/java/org/apache/openejb/tck/bval/impl/StandaloneContainersImpl.java
(added)
+++
openejb/trunk/openejb3/tck/bval-embedded/src/test/java/org/apache/openejb/tck/bval/impl/StandaloneContainersImpl.java
Fri Jul 1 15:54:47 2011
@@ -0,0 +1,80 @@
+package org.apache.openejb.tck.bval.impl;
+
+import org.apache.openejb.tck.impl.Archive;
+
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Collection;
+
+/**
+ * inspired from the hibernate implementation.
+ *
+ * @author Romain Manni-Bucau
+ */
+public class StandaloneContainersImpl extends
org.apache.openejb.tck.impl.StandaloneContainersImpl {
+ @Override public boolean deploy(Collection<Class<?>> classes,
Collection<URL> xmls) {
+ if ( xmls == null || !xmls.iterator().hasNext() ) {
+ Thread.currentThread().setContextClassLoader( new
IgnoringValidationXmlClassLoader() );
+ return true;
+ }
+
+ URL validationXmlUrl = xmls.iterator().next();
+ Thread.currentThread().setContextClassLoader( new
CustomValidationXmlClassLoader( validationXmlUrl.getPath() ) );
+
+ return super.deploy(classes, xmls);
+ }
+
+ private static class CustomValidationXmlClassLoader extends ClassLoader {
+ private final String customValidationXmlPath;
+
+ CustomValidationXmlClassLoader(String
pathToCustomValidationXml) {
+ super(
CustomValidationXmlClassLoader.class.getClassLoader() );
+ customValidationXmlPath = pathToCustomValidationXml;
+ }
+
+ public InputStream getResourceAsStream(String path) {
+ InputStream in;
+ if ( "META-INF/validation.xml".equals( path ) ) {
+ if ( customValidationXmlPath.contains( ".jar!"
) ) {
+ path =
customValidationXmlPath.substring( customValidationXmlPath.indexOf( "!" ) + 2 );
+ in = super.getResourceAsStream( path );
+ }
+ else {
+ in = loadFromDisk();
+ }
+ }
+ else {
+ in = super.getResourceAsStream( path );
+ }
+ return in;
+ }
+
+ private InputStream loadFromDisk() {
+ InputStream in;
+ try {
+ in = new BufferedInputStream( new
FileInputStream( customValidationXmlPath ) );
+ }
+ catch (IOException ioe) {
+ String msg = "Unble to load " +
customValidationXmlPath + " from disk";
+ throw new RuntimeException( msg );
+ }
+ return in;
+ }
+ }
+
+ private static class IgnoringValidationXmlClassLoader extends
ClassLoader {
+ IgnoringValidationXmlClassLoader() {
+ super(
IgnoringValidationXmlClassLoader.class.getClassLoader() );
+ }
+
+ public InputStream getResourceAsStream(String path) {
+ if ( "META-INF/validation.xml".equals( path ) ) {
+ return null;
+ }
+ return super.getResourceAsStream( path );
+ }
+ }
+}
Modified:
openejb/trunk/openejb3/tck/bval-embedded/src/test/resources/META-INF/jboss-test-harness.properties
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/bval-embedded/src/test/resources/META-INF/jboss-test-harness.properties?rev=1141969&r1=1141968&r2=1141969&view=diff
==============================================================================
---
openejb/trunk/openejb3/tck/bval-embedded/src/test/resources/META-INF/jboss-test-harness.properties
(original)
+++
openejb/trunk/openejb3/tck/bval-embedded/src/test/resources/META-INF/jboss-test-harness.properties
Fri Jul 1 15:54:47 2011
@@ -14,6 +14,10 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-org.jboss.testharness.spi.StandaloneContainers =
org.hibernate.jsr303.tck.util.StandaloneContainersImpl
-org.jboss.testharness.api.TestLauncher =
org.jboss.testharness.impl.runner.servlet.ServletTestLauncher
+org.jboss.testharness.api.TestLauncher=org.jboss.testharness.impl.runner.local.LocalTestLauncher
org.jboss.testharness.testPackage = org.hibernate.jsr303.tck.tests
+
+org.jboss.testharness.spi.StandaloneContainers =
org.apache.openejb.tck.bval.impl.StandaloneContainersImpl
+org.jboss.testharness.spi.Containers =
org.apache.openejb.tck.impl.ContainersImpl
+org.jboss.testharness.standalone = true
+org.jboss.testharness.runIntegrationTests = true
Modified: openejb/trunk/openejb3/tck/cdi-embedded/pom.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/cdi-embedded/pom.xml?rev=1141969&r1=1141968&r2=1141969&view=diff
==============================================================================
--- openejb/trunk/openejb3/tck/cdi-embedded/pom.xml (original)
+++ openejb/trunk/openejb3/tck/cdi-embedded/pom.xml Fri Jul 1 15:54:47 2011
@@ -33,6 +33,12 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>tck-common</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
Modified:
openejb/trunk/openejb3/tck/cdi-embedded/src/test/resources/META-INF/jboss-test-harness.properties
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/cdi-embedded/src/test/resources/META-INF/jboss-test-harness.properties?rev=1141969&r1=1141968&r2=1141969&view=diff
==============================================================================
---
openejb/trunk/openejb3/tck/cdi-embedded/src/test/resources/META-INF/jboss-test-harness.properties
(original)
+++
openejb/trunk/openejb3/tck/cdi-embedded/src/test/resources/META-INF/jboss-test-harness.properties
Fri Jul 1 15:54:47 2011
@@ -19,8 +19,8 @@ org.jboss.jsr299.tck.spi.Managers=org.ap
org.jboss.jsr299.tck.spi.Beans=org.apache.openejb.tck.cdi.embedded.BeansImpl
org.jboss.jsr299.tck.spi.Contexts=org.apache.openejb.tck.cdi.embedded.ContextsImpl
org.jboss.jsr299.tck.spi.EL=org.apache.openejb.tck.cdi.embedded.ELImpl
-org.jboss.testharness.spi.StandaloneContainers=org.apache.openejb.tck.cdi.embedded.StandaloneContainersImpl
-org.jboss.testharness.spi.Containers=org.apache.openejb.tck.cdi.embedded.ContainersImpl
+org.jboss.testharness.spi.StandaloneContainers=org.apache.openejb.tck.impl.StandaloneContainersImpl
+org.jboss.testharness.spi.Containers=org.apache.openejb.tck.impl.ContainersImpl
org.jboss.testharness.standalone=true
org.jboss.testharness.api.TestLauncher=org.jboss.testharness.impl.runner.local.LocalTestLauncher
Modified: openejb/trunk/openejb3/tck/pom.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/pom.xml?rev=1141969&r1=1141968&r2=1141969&view=diff
==============================================================================
--- openejb/trunk/openejb3/tck/pom.xml (original)
+++ openejb/trunk/openejb3/tck/pom.xml Fri Jul 1 15:54:47 2011
@@ -16,7 +16,8 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>openejb</artifactId>
<groupId>org.apache.openejb</groupId>
@@ -27,8 +28,29 @@
<packaging>pom</packaging>
<name>OpenEJB :: TCK</name>
+
<modules>
<module>cdi-embedded</module>
<module>bval-embedded</module>
+ <module>tck-common</module>
</modules>
+
+ <repositories>
+ <repository>
+ <id>jboss-public-repository-group</id>
+ <name>JBoss Public Maven Repository Group</name>
+ <url>https://repository.jboss.org/nexus/content/groups/public/</url>
+ <layout>default</layout>
+ <releases>
+ <enabled>true</enabled>
+ <updatePolicy>never</updatePolicy>
+ <checksumPolicy>fail</checksumPolicy>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ <updatePolicy>never</updatePolicy>
+ <checksumPolicy>warn</checksumPolicy>
+ </snapshots>
+ </repository>
+ </repositories>
</project>
Added: openejb/trunk/openejb3/tck/tck-common/pom.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/tck-common/pom.xml?rev=1141969&view=auto
==============================================================================
--- openejb/trunk/openejb3/tck/tck-common/pom.xml (added)
+++ openejb/trunk/openejb3/tck/tck-common/pom.xml Fri Jul 1 15:54:47 2011
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>tck</artifactId>
+ <groupId>org.apache.openejb</groupId>
+ <version>4.0.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>tck-common</artifactId>
+ <name>OpenEJB :: TCK :: Common</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.jboss.test-harness</groupId>
+ <artifactId>jboss-test-harness</artifactId>
+ <version>1.1.0-CR5</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>openejb-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+</project>
Added:
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/Archive.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/Archive.java?rev=1141969&view=auto
==============================================================================
---
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/Archive.java
(added)
+++
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/Archive.java
Fri Jul 1 15:54:47 2011
@@ -0,0 +1,146 @@
+/**
+ * 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.tck.impl;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.fail;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class Archive {
+
+ private final String name;
+
+ private final InputStream in;
+
+
+ public Archive(Iterable<URL> urls, Iterable<Class<?>> classes) {
+
+ try {
+ ClassLoader loader = Archive.class.getClassLoader();
+
+ // Create the ZIP file
+ final ByteArrayOutputStream byteArrayOutputStream = new
ByteArrayOutputStream();
+
+ final ZipOutputStream out = new ZipOutputStream(new
BufferedOutputStream(byteArrayOutputStream));
+
+ this.name = name(classes);
+
+ for (Class clazz : classes) {
+
+ String name = clazz.getName().replace(".", "/") + ".class";
+ // cla zz.getName().replace('.', File.separatorChar) +
".class"; // shouldn't work under windows
+
+ URL resource = loader.getResource(name);
+ if (resource == null) {
+ String path = clazz.getProtectionDomain().getCodeSource()
+ "!" + name;
+ try {
+ resource = new URL(path);
+ } catch (MalformedURLException mue) {
+ fail("can't find " + clazz.getName() + " neither from
" + name + " nor from " + path);
+ }
+ }
+ assertNotNull(resource);
+ InputStream in = new
BufferedInputStream(resource.openStream());
+
+ // Add ZIP entry to output stream.
+ out.putNextEntry(new ZipEntry(name));
+
+ int i;
+ while ((i = in.read()) != -1) {
+ out.write(i);
+ }
+
+ // Complete the entry
+ out.closeEntry();
+ }
+
+ boolean willBeDeployed = false;
+ int i;
+ for (final URL url : urls) {
+
+ final String fileName = new File(url.getFile()).getName();
+ final String name = "META-INF/" + fileName;
+
+ out.putNextEntry(new ZipEntry(name));
+
+ final InputStream in = new
BufferedInputStream(url.openStream());
+
+ while ((i = in.read()) != -1) {
+ out.write(i);
+ }
+
+ in.close();
+
+ willBeDeployed = willBeDeployed
+ || "persistence.xml".equals(fileName)
+ || "ejb-jar.xml".equals(fileName) ||
"beans.xml".equals(fileName)
+ || "application.xml".equals(fileName) ||
"application-client.xml".equals(fileName); // TODO: put eveything in a list:
org.apache.openejb.config.DeploymentLoader.discoverModuleType()
+ }
+
+ if (!willBeDeployed) { // force it to be a module
+ out.putNextEntry(new ZipEntry("META-INF/beans.xml"));
+ final InputStream in = new ByteArrayInputStream("<beans
/>".getBytes());
+
+ while ((i = in.read()) != -1) {
+ out.write(i);
+ }
+
+ in.close();
+ }
+
+ // Complete the ZIP file
+ out.close();
+
+ this.in = new
ByteArrayInputStream(byteArrayOutputStream.toByteArray());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public InputStream getIn() {
+ return in;
+ }
+
+ private String name(Iterable<Class<?>> classes) {
+ for (Class<?> clazz : classes) {
+ if (clazz.getName().endsWith("AbstractJSR299Test")) continue;
+ if (clazz.getName().endsWith("Test")) {
+ return clazz.getName() + ".jar";
+ }
+ }
+
+ return "test-archive.jar";
+ }
+}
Added:
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/ContainersImpl.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/ContainersImpl.java?rev=1141969&view=auto
==============================================================================
---
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/ContainersImpl.java
(added)
+++
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/ContainersImpl.java
Fri Jul 1 15:54:47 2011
@@ -0,0 +1,255 @@
+/**
+ * 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.tck.impl;
+
+import org.apache.openejb.OpenEJB;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.cdi.ThreadSingletonServiceImpl;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.SetAccessible;
+import org.apache.webbeans.config.WebBeansContext;
+import org.jboss.testharness.api.DeploymentException;
+import org.jboss.testharness.impl.packaging.ear.EjbJarXml;
+import org.jboss.testharness.impl.packaging.ear.PersistenceXml;
+import org.jboss.testharness.spi.Containers;
+
+import javax.ejb.embeddable.EJBContainer;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.Closeable;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.Flushable;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.RandomAccessFile;
+import java.lang.reflect.Field;
+import java.net.URL;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ContainersImpl implements Containers {
+
+ private static String stuck;
+
+ private Exception exception;
+ private EJBContainer container;
+
+ @Override
+ public boolean deploy(InputStream archive, String name) {
+ if (!OpenEJB.isInitialized()) stuck = name;
+ else System.out.println("STUCK " + stuck);
+
+ exception = null;
+
+ final Assembler assembler =
SystemInstance.get().getComponent(Assembler.class);
+
+ ThreadSingletonServiceImpl.exit(null);
+ if (assembler != null) {
+ assembler.destroy();
+ }
+ try {
+ final Map<String, Object> map = new HashMap<String, Object>();
+ map.put(EJBContainer.MODULES, writeToFile(archive, name));
+ map.put(EJBContainer.APP_NAME, name);
+
+ container = EJBContainer.createEJBContainer(map);
+
+ final WebBeansContext webBeansContext =
ThreadSingletonServiceImpl.get();
+ dump(webBeansContext.getBeanManagerImpl());
+
+ } catch (Exception e) {
+ exception = e;
+ return false;
+ }
+
+ return true;
+ }
+
+ private void dump(Object o) {
+ try {
+ final Class<? extends Object> clazz = o.getClass();
+
+ for (Field field : clazz.getDeclaredFields()) {
+ SetAccessible.on(field);
+
+ if (Collection.class.isAssignableFrom(field.getType())) {
+ final Collection collection = (Collection) field.get(o);
+ System.out.println(field.getName() + "\t= " +
collection.size());
+ }
+ }
+ } catch (Exception e) {
+
+ }
+ }
+
+ private URL getResource(Class clazz, String path) {
+ final String resourcePath = clazz.getPackage().getName().replace(".",
"/") + "/" + path;
+
+ return clazz.getClassLoader().getResource(resourcePath);
+ }
+
+
+ public static void main(String[] args) throws IOException {
+ new ContainersImpl().memoryMappedFile();
+
+ System.out.println();
+ }
+
+ public void memoryMappedFile() throws IOException {
+
+ FileChannel rwChannel = new RandomAccessFile(new
File("/tmp/memory-mapped.txt"), "rw").getChannel();
+
+ final byte[] bytes = "hello world".getBytes();
+
+ ByteBuffer writeonlybuffer =
rwChannel.map(FileChannel.MapMode.READ_WRITE, 0, bytes.length);
+ writeonlybuffer.put(bytes);
+ writeonlybuffer.compact();
+ }
+
+ private File writeToFile(InputStream archive, String name) throws
IOException {
+ final File file = File.createTempFile("deploy", "-" + name);
+ file.deleteOnExit();
+
+ try {
+
+ Map<String, URL> resources = new HashMap<String, URL>();
+
+ final Class<?> clazz =
this.getClass().getClassLoader().loadClass(name.replace(".jar", ""));
+
+ if (clazz.isAnnotationPresent(EjbJarXml.class)) {
+ final URL resource = getResource(clazz,
clazz.getAnnotation(EjbJarXml.class).value());
+
+ if (resource != null) resources.put("META-INF/ejb-jar.xml",
resource);
+ }
+
+ if (clazz.isAnnotationPresent(PersistenceXml.class)) {
+ final URL resource = getResource(clazz,
clazz.getAnnotation(PersistenceXml.class).value());
+
+ if (resource != null)
resources.put("META-INF/persistence.xml", resource);
+ }
+
+ final boolean isJar = name.endsWith(".jar");
+
+ final ZipInputStream zin = new ZipInputStream(archive);
+ final ByteArrayOutputStream byteArrayOutputStream = new
ByteArrayOutputStream(524288);
+ final ZipOutputStream zout = new
ZipOutputStream(byteArrayOutputStream);
+
+ for (ZipEntry entry; (entry = zin.getNextEntry()) != null; ) {
+ String entryName = entry.getName();
+
+ if (isJar && entryName.startsWith("WEB-INF/classes/")) {
+ entryName = entryName.replaceFirst("WEB-INF/classes/", "");
+ }
+
+ InputStream src = zin;
+
+ if (resources.containsKey(entryName)) {
+ src = resources.get(entryName).openStream();
+ }
+
+ resources.remove(entryName);
+
+ zout.putNextEntry(new ZipEntry(entryName));
+
+ copy(src, zout);
+ }
+
+ for (Map.Entry<String, URL> entry : resources.entrySet()) {
+
+ zout.putNextEntry(new ZipEntry(entry.getKey()));
+
+ copy(entry.getValue().openStream(), zout);
+ }
+
+ if (!resources.containsKey("META-INF/beans.xml")) { // force it to
be a module
+ zout.putNextEntry(new ZipEntry("META-INF/beans.xml"));
+ final InputStream in = new ByteArrayInputStream("<beans
/>".getBytes());
+ copy(in, zout);
+ in.close();
+ }
+
+ close(zin);
+ close(zout);
+
+ writeToFile(file, byteArrayOutputStream);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return file;
+ }
+
+ private void writeToFile(File file, ByteArrayOutputStream
byteArrayOutputStream) throws IOException {
+ final byte[] bytes = byteArrayOutputStream.toByteArray();
+
+ final FileOutputStream fileOutputStream = new FileOutputStream(file);
+ fileOutputStream.write(bytes);
+ fileOutputStream.close();
+ }
+
+ private static void copy(InputStream from, OutputStream to) throws
IOException {
+ byte[] buffer = new byte[1024];
+ int length = 0;
+ while ((length = from.read(buffer)) != -1) {
+ to.write(buffer, 0, length);
+ }
+ }
+
+ public static void close(Closeable closeable) throws IOException {
+ if (closeable == null) return;
+ try {
+ if (closeable instanceof Flushable) {
+ ((Flushable) closeable).flush();
+ }
+ } catch (IOException e) {
+ }
+ try {
+ closeable.close();
+ } catch (IOException e) {
+ }
+ }
+
+
+ @Override
+ public DeploymentException getDeploymentException() {
+ return new DeploymentException(exception.getLocalizedMessage(),
exception);
+ }
+
+ @Override
+ public void undeploy(String name) {
+ if (container != null) container.close();
+ }
+
+ @Override
+ public void setup() throws IOException {
+ }
+
+ @Override
+ public void cleanup() throws IOException {
+ }
+}
Added:
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/StandaloneContainersImpl.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/StandaloneContainersImpl.java?rev=1141969&view=auto
==============================================================================
---
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/StandaloneContainersImpl.java
(added)
+++
openejb/trunk/openejb3/tck/tck-common/src/main/java/org/apache/openejb/tck/impl/StandaloneContainersImpl.java
Fri Jul 1 15:54:47 2011
@@ -0,0 +1,73 @@
+/**
+ * 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.tck.impl;
+
+import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.jboss.testharness.api.DeploymentException;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class StandaloneContainersImpl
+ implements org.jboss.testharness.spi.StandaloneContainers
+{
+
+ private final ContainersImpl containers = new ContainersImpl();
+
+ protected ContainersImpl getContainers() {
+ return containers;
+ }
+
+ @Override
+ public void deploy(Collection<Class<?>> classes)
+ throws DeploymentException
+ {
+ deploy(classes, Collections.EMPTY_LIST);
+ }
+
+ @Override
+ public boolean deploy(Collection<Class<?>> classes, Collection<URL> xmls)
+ {
+ final Archive archive = new Archive(xmls, classes);
+ return containers.deploy(archive.getIn(), archive.getName());
+ }
+
+ @Override
+ public DeploymentException getDeploymentException()
+ {
+ return containers.getDeploymentException();
+ }
+
+ @Override
+ public void undeploy()
+ {
+ containers.undeploy(null);
+ }
+
+ @Override
+ public void setup()
+ {
+ }
+
+ @Override
+ public void cleanup()
+ {
+ }
+}