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()
+    {
+    }
+}


Reply via email to