You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jg...@apache.org on 2017/11/28 20:52:24 UTC

[06/11] tomee git commit: TOMEE-2151 Use correct classloader for creating application resources specified in resources.xml. Added examples and arquillian tests

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-business-logic/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-business-logic/pom.xml b/examples/simple-ear/moviefun-business-logic/pom.xml
new file mode 100644
index 0000000..441a338
--- /dev/null
+++ b/examples/simple-ear/moviefun-business-logic/pom.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+-->
+
+<!-- $Rev: 638272 $ $Date: 2008-03-18 01:59:59 -0700 (Tue, 18 Mar 2008) $ -->
+
+<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>
+    <groupId>org.superbiz</groupId>
+    <artifactId>moviefun-ear-parent</artifactId>
+    <version>1.1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>moviefun-business-logic</artifactId>
+  <packaging>jar</packaging>
+  <name>OpenEJB :: Examples :: Simple EAR :: Business Logic</name>
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+  <repositories>
+    <repository>
+      <id>apache-m2-snapshot</id>
+      <name>Apache Snapshot Repository</name>
+      <url>https://repository.apache.org/content/groups/snapshots/</url>
+    </repository>
+  </repositories>
+  <build>
+    <defaultGoal>install</defaultGoal>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+  <dependencies>
+    <dependency>
+      <groupId>org.superbiz</groupId>
+      <artifactId>moviefun-business-model</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>javaee-api</artifactId>
+      <version>7.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+      <scope>test</scope>
+    </dependency>
+    <!--
+    The <scope>test</scope> guarantees that non of your runtime
+    code is dependent on any OpenEJB classes.
+    -->
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>openejb-core</artifactId>
+      <version>4.7.5-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-business-logic/src/main/java/org/superbiz/logic/MoviesBean.java
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-business-logic/src/main/java/org/superbiz/logic/MoviesBean.java b/examples/simple-ear/moviefun-business-logic/src/main/java/org/superbiz/logic/MoviesBean.java
new file mode 100644
index 0000000..6a7bcf6
--- /dev/null
+++ b/examples/simple-ear/moviefun-business-logic/src/main/java/org/superbiz/logic/MoviesBean.java
@@ -0,0 +1,120 @@
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.superbiz.logic;
+
+import org.superbiz.model.Movie;
+import org.superbiz.model.Movies;
+
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.*;
+import javax.persistence.metamodel.EntityType;
+import java.util.List;
+
+@Stateless
+public class MoviesBean implements Movies {
+
+    @PersistenceContext(unitName = "movie-unit")
+    private EntityManager entityManager;
+
+    @Override
+    public Movie find(Long id) {
+        return entityManager.find(Movie.class, id);
+    }
+
+    @Override
+    public void addMovie(Movie movie) {
+        entityManager.persist(movie);
+    }
+
+    @Override
+    public void editMovie(Movie movie) {
+        entityManager.merge(movie);
+    }
+
+    @Override
+    public void deleteMovieId(long id) {
+        Movie movie = entityManager.find(Movie.class, id);
+        entityManager.remove(movie);
+    }
+
+    @Override
+    public List<Movie> getMovies() {
+        CriteriaQuery<Movie> cq = entityManager.getCriteriaBuilder().createQuery(Movie.class);
+        cq.select(cq.from(Movie.class));
+        return entityManager.createQuery(cq).getResultList();
+    }
+
+    @Override
+    public List<Movie> findAll(int firstResult, int maxResults) {
+        CriteriaQuery<Movie> cq = entityManager.getCriteriaBuilder().createQuery(Movie.class);
+        cq.select(cq.from(Movie.class));
+        TypedQuery<Movie> q = entityManager.createQuery(cq);
+        q.setMaxResults(maxResults);
+        q.setFirstResult(firstResult);
+        return q.getResultList();
+    }
+
+    @Override
+    public int countAll() {
+        CriteriaQuery<Long> cq = entityManager.getCriteriaBuilder().createQuery(Long.class);
+        Root<Movie> rt = cq.from(Movie.class);
+        cq.select(entityManager.getCriteriaBuilder().count(rt));
+        TypedQuery<Long> q = entityManager.createQuery(cq);
+        return (q.getSingleResult()).intValue();
+    }
+
+    @Override
+    public int count(String field, String searchTerm) {
+        CriteriaBuilder qb = entityManager.getCriteriaBuilder();
+        CriteriaQuery<Long> cq = qb.createQuery(Long.class);
+        Root<Movie> root = cq.from(Movie.class);
+        EntityType<Movie> type = entityManager.getMetamodel().entity(Movie.class);
+
+        Path<String> path = root.get(type.getDeclaredSingularAttribute(field, String.class));
+        Predicate condition = qb.like(path, "%" + searchTerm + "%");
+
+        cq.select(qb.count(root));
+        cq.where(condition);
+
+        return entityManager.createQuery(cq).getSingleResult().intValue();
+    }
+
+    @Override
+    public List<Movie> findRange(String field, String searchTerm, int firstResult, int maxResults) {
+        CriteriaBuilder qb = entityManager.getCriteriaBuilder();
+        CriteriaQuery<Movie> cq = qb.createQuery(Movie.class);
+        Root<Movie> root = cq.from(Movie.class);
+        EntityType<Movie> type = entityManager.getMetamodel().entity(Movie.class);
+
+        Path<String> path = root.get(type.getDeclaredSingularAttribute(field, String.class));
+        Predicate condition = qb.like(path, "%" + searchTerm + "%");
+
+        cq.where(condition);
+        TypedQuery<Movie> q = entityManager.createQuery(cq);
+        q.setMaxResults(maxResults);
+        q.setFirstResult(firstResult);
+        return q.getResultList();
+    }
+
+    @Override
+    public void clean() {
+        entityManager.createQuery("delete from Movie").executeUpdate();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-business-logic/src/main/resources/META-INF/ejb-jar.xml
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-business-logic/src/main/resources/META-INF/ejb-jar.xml b/examples/simple-ear/moviefun-business-logic/src/main/resources/META-INF/ejb-jar.xml
new file mode 100644
index 0000000..91be4f8
--- /dev/null
+++ b/examples/simple-ear/moviefun-business-logic/src/main/resources/META-INF/ejb-jar.xml
@@ -0,0 +1 @@
+<ejb-jar/>

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-business-logic/src/test/java/org/superbiz/logic/MoviesTest.java
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-business-logic/src/test/java/org/superbiz/logic/MoviesTest.java b/examples/simple-ear/moviefun-business-logic/src/test/java/org/superbiz/logic/MoviesTest.java
new file mode 100644
index 0000000..6dd1827
--- /dev/null
+++ b/examples/simple-ear/moviefun-business-logic/src/test/java/org/superbiz/logic/MoviesTest.java
@@ -0,0 +1,65 @@
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.superbiz.logic;
+
+import junit.framework.TestCase;
+import org.superbiz.model.Movie;
+import org.superbiz.model.Movies;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import java.util.List;
+import java.util.Properties;
+
+//START SNIPPET: code
+
+public class MoviesTest extends TestCase {
+
+    public void test() throws Exception {
+        Properties p = new Properties();
+        p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
+
+        p.put("openejb.deployments.classpath.ear", "true");
+
+        p.put("movieDatabase", "new://Resource?type=DataSource");
+        p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
+        p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
+
+        p.put("movieDatabaseUnmanaged", "new://Resource?type=DataSource");
+        p.put("movieDatabaseUnmanaged.JdbcDriver", "org.hsqldb.jdbcDriver");
+        p.put("movieDatabaseUnmanaged.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
+        p.put("movieDatabaseUnmanaged.JtaManaged", "false");
+
+        Context context = new InitialContext(p);
+
+        Movies movies = (Movies) context.lookup("MoviesBeanLocal");
+
+        movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992));
+        movies.addMovie(new Movie("Joel Coen", "Fargo", 1996));
+        movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998));
+
+        List<Movie> list = movies.getMovies();
+        assertEquals("List.size()", 3, list.size());
+
+        for (Movie movie : list) {
+            movies.deleteMovieId(movie.getId());
+        }
+
+        assertEquals("Movies.getMovies()", 0, movies.getMovies().size());
+    }
+}
+//END SNIPPET: code

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-business-model/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-business-model/pom.xml b/examples/simple-ear/moviefun-business-model/pom.xml
new file mode 100644
index 0000000..810d5c2
--- /dev/null
+++ b/examples/simple-ear/moviefun-business-model/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+-->
+
+<!-- $Rev: 638272 $ $Date: 2008-03-18 01:59:59 -0700 (Tue, 18 Mar 2008) $ -->
+
+<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>
+    <groupId>org.superbiz</groupId>
+    <artifactId>moviefun-ear-parent</artifactId>
+    <version>1.1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>moviefun-business-model</artifactId>
+  <packaging>jar</packaging>
+  <name>OpenEJB :: Examples :: Simple EAR :: Business Model</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>javaee-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+  </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-business-model/src/main/java/org/superbiz/model/Movie.java
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-business-model/src/main/java/org/superbiz/model/Movie.java b/examples/simple-ear/moviefun-business-model/src/main/java/org/superbiz/model/Movie.java
new file mode 100644
index 0000000..f3fe9d2
--- /dev/null
+++ b/examples/simple-ear/moviefun-business-model/src/main/java/org/superbiz/model/Movie.java
@@ -0,0 +1,104 @@
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.superbiz.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+@Entity
+public class Movie implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private long id;
+
+    private String director;
+    private String title;
+    private int year;
+    private String genre;
+    private int rating;
+
+    public Movie() {
+    }
+
+    public Movie(String title, String director, String genre, int rating, int year) {
+        this.director = director;
+        this.title = title;
+        this.year = year;
+        this.genre = genre;
+        this.rating = rating;
+    }
+
+    public Movie(String director, String title, int year) {
+        this.director = director;
+        this.title = title;
+        this.year = year;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getDirector() {
+        return director;
+    }
+
+    public void setDirector(String director) {
+        this.director = director;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public int getYear() {
+        return year;
+    }
+
+    public void setYear(int year) {
+        this.year = year;
+    }
+
+    public String getGenre() {
+        return genre;
+    }
+
+    public void setGenre(String genre) {
+        this.genre = genre;
+    }
+
+    public int getRating() {
+        return rating;
+    }
+
+    public void setRating(int rating) {
+        this.rating = rating;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-business-model/src/main/java/org/superbiz/model/Movies.java
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-business-model/src/main/java/org/superbiz/model/Movies.java b/examples/simple-ear/moviefun-business-model/src/main/java/org/superbiz/model/Movies.java
new file mode 100644
index 0000000..b5efb95
--- /dev/null
+++ b/examples/simple-ear/moviefun-business-model/src/main/java/org/superbiz/model/Movies.java
@@ -0,0 +1,27 @@
+package org.superbiz.model;
+
+import javax.ejb.Local;
+import java.util.List;
+
+@Local
+public interface Movies {
+    Movie find(Long id);
+
+    void addMovie(Movie movie);
+
+    void editMovie(Movie movie);
+
+    void deleteMovieId(long id);
+
+    List<Movie> getMovies();
+
+    List<Movie> findAll(int firstResult, int maxResults);
+
+    int countAll();
+
+    int count(String field, String searchTerm);
+
+    List<Movie> findRange(String field, String searchTerm, int firstResult, int maxResults);
+
+    void clean();
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-business-model/src/main/resources/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-business-model/src/main/resources/META-INF/persistence.xml b/examples/simple-ear/moviefun-business-model/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 0000000..a92d490
--- /dev/null
+++ b/examples/simple-ear/moviefun-business-model/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+-->
+<!-- START SNIPPET: code -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+
+  <persistence-unit name="movie-unit">
+    <jta-data-source>movieDatabase</jta-data-source>
+    <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>
+    <class>org.superbiz.model.Movie</class>
+
+    <properties>
+      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
+    </properties>
+  </persistence-unit>
+</persistence>
+    <!-- END SNIPPET: code -->

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-ear/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-ear/pom.xml b/examples/simple-ear/moviefun-ear/pom.xml
new file mode 100644
index 0000000..8adbaa1
--- /dev/null
+++ b/examples/simple-ear/moviefun-ear/pom.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<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>
+        <groupId>org.superbiz</groupId>
+        <artifactId>moviefun-ear-parent</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>moviefun-ear</artifactId>
+    <packaging>ear</packaging>
+    <name>OpenEJB :: Examples :: Simple EAR :: EAR Packaging</name>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.superbiz</groupId>
+            <artifactId>moviefun-business-logic</artifactId>
+            <version>${project.version}</version>
+            <type>ejb</type>
+        </dependency>
+        <dependency>
+            <groupId>org.superbiz</groupId>
+            <artifactId>moviefun-webapp</artifactId>
+            <type>war</type>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-ear-plugin</artifactId>
+                <version>2.10.1</version>
+                <configuration>
+                    <version>6</version>
+                    <generateApplicationXml>true</generateApplicationXml>
+                    <defaultLibBundleDir>lib</defaultLibBundleDir>
+                    <modules>
+                        <webModule>
+                            <groupId>org.superbiz</groupId>
+                            <artifactId>moviefun-webapp</artifactId>
+                            <contextRoot>/moviefun</contextRoot>
+                        </webModule>
+                        <ejbModule>
+                            <groupId>org.superbiz</groupId>
+                            <artifactId>moviefun-business-logic</artifactId>
+                        </ejbModule>
+                    </modules>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-functional-tests/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-functional-tests/pom.xml b/examples/simple-ear/moviefun-functional-tests/pom.xml
new file mode 100644
index 0000000..03a7c85
--- /dev/null
+++ b/examples/simple-ear/moviefun-functional-tests/pom.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+-->
+
+<!-- $Rev: 638272 $ $Date: 2008-03-18 01:59:59 -0700 (Tue, 18 Mar 2008) $ -->
+
+<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>
+    <groupId>org.superbiz</groupId>
+    <artifactId>moviefun-ear-parent</artifactId>
+    <version>1.1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>moviefun-functional-test</artifactId>
+  <packaging>jar</packaging>
+  <name>OpenEJB :: Examples :: Simple EAR :: Functional Tests</name>
+
+  <properties>
+    <version.shrinkwrap.resolver>2.0.0</version.shrinkwrap.resolver>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+      <!-- Override dependency resolver with test version. This must go *BEFORE*
+        the Arquillian BOM. -->
+      <dependency>
+        <groupId>org.jboss.shrinkwrap.resolver</groupId>
+        <artifactId>shrinkwrap-resolver-bom</artifactId>
+        <version>${version.shrinkwrap.resolver}</version>
+        <scope>import</scope>
+        <type>pom</type>
+      </dependency>
+      <!-- Now pull in our server-based unit testing framework -->
+      <dependency>
+        <groupId>org.jboss.arquillian</groupId>
+        <artifactId>arquillian-bom</artifactId>
+        <version>1.1.10.Final</version>
+        <scope>import</scope>
+        <type>pom</type>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>javaee-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.superbiz</groupId>
+      <artifactId>moviefun-ear</artifactId>
+      <version>${project.version}</version>
+      <type>ear</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>jstl</artifactId>
+      <version>1.2</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>openejb-core</artifactId>
+      <version>4.7.5-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>taglibs</groupId>
+      <artifactId>standard</artifactId>
+      <version>1.1.2</version>
+    </dependency>
+    <dependency>
+      <groupId>net.sourceforge.htmlunit</groupId>
+      <artifactId>htmlunit</artifactId>
+      <version>2.8</version>
+      <type>jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>tomee-embedded</artifactId>
+      <version>1.7.5-SNAPSHOT</version>
+      <!--<classifier>uber</classifier> -->
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.4</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.junit</groupId>
+      <artifactId>arquillian-junit-container</artifactId>
+      <version>1.1.10.Final</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.shrinkwrap.resolver</groupId>
+      <artifactId>shrinkwrap-resolver-depchain</artifactId>
+      <type>pom</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.shrinkwrap.resolver</groupId>
+      <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
+      <version>${version.shrinkwrap.resolver}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>arquillian-tomee-remote</artifactId>
+      <version>1.7.5-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-functional-tests/src/test/java/org/superbiz/moviefun/DeployInWebAppsDirectoryTest.java
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-functional-tests/src/test/java/org/superbiz/moviefun/DeployInWebAppsDirectoryTest.java b/examples/simple-ear/moviefun-functional-tests/src/test/java/org/superbiz/moviefun/DeployInWebAppsDirectoryTest.java
new file mode 100644
index 0000000..754281a
--- /dev/null
+++ b/examples/simple-ear/moviefun-functional-tests/src/test/java/org/superbiz/moviefun/DeployInWebAppsDirectoryTest.java
@@ -0,0 +1,130 @@
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.superbiz.moviefun;
+
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import org.apache.openejb.loader.IO;
+import org.apache.tomee.arquillian.remote.RemoteTomEEConfiguration;
+import org.apache.tomee.arquillian.remote.RemoteTomEEContainer;
+import org.jboss.shrinkwrap.resolver.api.maven.Maven;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.concurrent.Callable;
+
+import static org.junit.Assert.assertTrue;
+
+@Ignore("Not implemented yet")
+/*
+ * This test deploys the ear in a manual fashion. Normally the remote adapter deploys using the deployer.
+ * Here we'll use the arquillian adapter to control the lifecycle of the server, but we'll do the deploy
+ * by hand into the webapps directory directly. The EAR deployment was fixed in TOMEE-2145.
+ *
+ */
+public class DeployInWebAppsDirectoryTest {
+
+    @Test
+    public void test() throws Exception {
+        final RemoteTomEEConfiguration configuration = new RemoteTomEEConfiguration();
+        configuration.setGroupId("org.apache.openejb");
+        configuration.setArtifactId("apache-tomee");
+        configuration.setClassifier("plus");
+        configuration.setVersion("1.7.5-SNAPSHOT");
+        configuration.setHttpPort(-1);
+
+        final RemoteTomEEContainer container = new RemoteTomEEContainer();
+        container.setup(configuration);
+
+        try {
+            container.start();
+
+            final File webapps = new File(configuration.getDir(), "apache-tomee-" + configuration.getClassifier() + "-" + configuration.getVersion() + "/webapps");
+            webapps.mkdirs();
+
+            final File enterpriseArchive = Maven.resolver().resolve("org.superbiz:moviefun-ear:ear:1.1.0-SNAPSHOT")
+                    .withoutTransitivity().asSingleFile();
+
+            IO.copy(enterpriseArchive, new File(webapps, "moviefun-ear.ear"));
+            final String appUrl = "http://localhost:" + configuration.getHttpPort() + "/moviefun";
+
+            runTests(appUrl);
+
+            container.stop();
+
+            // restart the container, make sure all is still well
+            container.start();
+
+        } finally {
+            container.stop();
+        }
+    }
+
+    private void runTests(final String appUrl) throws IOException {
+        final WebClient webClient = new WebClient();
+
+        HtmlPage page = attempt(new Callable<HtmlPage>() {
+
+            @Override
+            public HtmlPage call() throws Exception {
+                return getPage(webClient, appUrl);
+            }
+        }, 30);
+
+        assertMoviesPresent(page);
+
+        page = webClient.getPage(appUrl + "/moviefun");
+
+        assertMoviesPresent(page);
+        webClient.closeAllWindows();
+    }
+
+    private <T> T attempt(final Callable<T> callable, int numberOfAttempts) {
+        int tries = 0;
+
+        while (tries < numberOfAttempts) {
+            try {
+                return callable.call();
+            } catch (final Exception e) {
+                // ignore the exception and try again
+                tries++;
+                try {
+                    Thread.sleep(1000);
+                } catch (final InterruptedException ie) {
+                    // ignore
+                }
+            }
+        }
+
+        throw new IllegalStateException("Unable to invoke callable successfully after " + numberOfAttempts + " attempts");
+    }
+
+    private HtmlPage getPage(final WebClient webClient, final String url) throws IOException {
+        return webClient.getPage(url + "/setup.jsp");
+    }
+
+    private void assertMoviesPresent(HtmlPage page) {
+        String pageAsText = page.asText();
+        assertTrue(pageAsText.contains("Wedding Crashers"));
+        assertTrue(pageAsText.contains("Starsky & Hutch"));
+        assertTrue(pageAsText.contains("Shanghai Knights"));
+        assertTrue(pageAsText.contains("I-Spy"));
+        assertTrue(pageAsText.contains("The Royal Tenenbaums"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-functional-tests/src/test/java/org/superbiz/moviefun/MoviesArquillianHtmlUnitTest.java
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-functional-tests/src/test/java/org/superbiz/moviefun/MoviesArquillianHtmlUnitTest.java b/examples/simple-ear/moviefun-functional-tests/src/test/java/org/superbiz/moviefun/MoviesArquillianHtmlUnitTest.java
new file mode 100644
index 0000000..5066f5d
--- /dev/null
+++ b/examples/simple-ear/moviefun-functional-tests/src/test/java/org/superbiz/moviefun/MoviesArquillianHtmlUnitTest.java
@@ -0,0 +1,75 @@
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.superbiz.moviefun;
+
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.RunAsClient;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
+import org.jboss.shrinkwrap.resolver.api.maven.Maven;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.net.URL;
+
+import static org.junit.Assert.assertTrue;
+
+@RunWith(Arquillian.class)
+@RunAsClient
+public class MoviesArquillianHtmlUnitTest {
+
+    @Deployment
+    public static EnterpriseArchive createDeployment() {
+        final EnterpriseArchive enterpriseArchive = Maven.resolver().resolve("org.superbiz:moviefun-ear:ear:1.1.0-SNAPSHOT")
+                .withoutTransitivity().asSingle(EnterpriseArchive.class);
+
+        System.out.println(enterpriseArchive.toString(true));
+
+        return enterpriseArchive;
+    }
+
+    @ArquillianResource
+    private URL deploymentUrl;
+
+    @Test
+    public void testShouldMakeSureWebappIsWorking() throws Exception {
+        final String url = "http://" + deploymentUrl.getHost() + ":" + deploymentUrl.getPort() + "/moviefun";
+
+        WebClient webClient = new WebClient();
+        HtmlPage page = webClient.getPage(url + "/setup.jsp");
+
+        assertMoviesPresent(page);
+
+        page = webClient.getPage(url + "/moviefun");
+
+        assertMoviesPresent(page);
+        webClient.closeAllWindows();
+    }
+
+    private void assertMoviesPresent(HtmlPage page) {
+        String pageAsText = page.asText();
+        assertTrue(pageAsText.contains("Wedding Crashers"));
+        assertTrue(pageAsText.contains("Starsky & Hutch"));
+        assertTrue(pageAsText.contains("Shanghai Knights"));
+        assertTrue(pageAsText.contains("I-Spy"));
+        assertTrue(pageAsText.contains("The Royal Tenenbaums"));
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-functional-tests/src/test/resources/META-INF/application-client.xml
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-functional-tests/src/test/resources/META-INF/application-client.xml b/examples/simple-ear/moviefun-functional-tests/src/test/resources/META-INF/application-client.xml
new file mode 100644
index 0000000..1e91dca
--- /dev/null
+++ b/examples/simple-ear/moviefun-functional-tests/src/test/resources/META-INF/application-client.xml
@@ -0,0 +1 @@
+<application-client/>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-functional-tests/src/test/resources/arquillian.xml
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-functional-tests/src/test/resources/arquillian.xml b/examples/simple-ear/moviefun-functional-tests/src/test/resources/arquillian.xml
new file mode 100644
index 0000000..c726dce
--- /dev/null
+++ b/examples/simple-ear/moviefun-functional-tests/src/test/resources/arquillian.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+
+    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.
+-->
+<arquillian
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    >
+
+  <container qualifier="tomee" default="true">
+    <configuration>
+      <property name="httpPort">-1</property>
+      <property name="stopPort">-1</property>
+      <property name="tomcatVersion"></property>
+      <property name="dßßir">target/apache-tomee-remote</property>
+      <property name="appWorkingDir">target/arquillian-test-working-dir</property>
+    </configuration>
+  </container>
+</arquillian>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-webapp/pom.xml
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-webapp/pom.xml b/examples/simple-ear/moviefun-webapp/pom.xml
new file mode 100644
index 0000000..133dbf9
--- /dev/null
+++ b/examples/simple-ear/moviefun-webapp/pom.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<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">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.superbiz</groupId>
+    <artifactId>moviefun-ear-parent</artifactId>
+    <version>1.1.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>moviefun-webapp</artifactId>
+  <packaging>war</packaging>
+  <name>OpenEJB :: Examples :: Simple EAR :: Webapp</name>
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.superbiz</groupId>
+      <artifactId>moviefun-business-model</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>javaee-api</artifactId>
+      <version>6.0-6</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>jstl</artifactId>
+      <version>1.2</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>openejb-core</artifactId>
+      <version>4.7.5-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>taglibs</groupId>
+      <artifactId>standard</artifactId>
+      <version>1.1.2</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>net.sourceforge.htmlunit</groupId>
+      <artifactId>htmlunit</artifactId>
+      <version>2.8</version>
+      <type>jar</type>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-webapp/src/main/java/org/superbiz/moviefun/ActionServlet.java
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-webapp/src/main/java/org/superbiz/moviefun/ActionServlet.java b/examples/simple-ear/moviefun-webapp/src/main/java/org/superbiz/moviefun/ActionServlet.java
new file mode 100644
index 0000000..bf467bf
--- /dev/null
+++ b/examples/simple-ear/moviefun-webapp/src/main/java/org/superbiz/moviefun/ActionServlet.java
@@ -0,0 +1,143 @@
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.superbiz.moviefun;
+
+import org.superbiz.model.Movie;
+import org.superbiz.model.Movies;
+
+import javax.ejb.EJB;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * @version $Revision$ $Date$
+ */
+@WebServlet("/moviefun/*")
+public class ActionServlet extends HttpServlet {
+
+    private static final long serialVersionUID = -5832176047021911038L;
+
+    public static int PAGE_SIZE = 5;
+
+    @EJB
+    private Movies moviesBean;
+
+    @Override
+    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        process(request, response);
+    }
+
+    @Override
+    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        process(request, response);
+    }
+
+    private void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        String action = request.getParameter("action");
+
+        if ("Add".equals(action)) {
+
+            String title = request.getParameter("title");
+            String director = request.getParameter("director");
+            String genre = request.getParameter("genre");
+            int rating = Integer.parseInt(request.getParameter("rating"));
+            int year = Integer.parseInt(request.getParameter("year"));
+
+            Movie movie = new Movie(title, director, genre, rating, year);
+
+            moviesBean.addMovie(movie);
+            response.sendRedirect("moviefun");
+            return;
+
+        } else if ("Remove".equals(action)) {
+
+            String[] ids = request.getParameterValues("id");
+            for (String id : ids) {
+                moviesBean.deleteMovieId(new Long(id));
+            }
+
+            response.sendRedirect("moviefun");
+            return;
+
+        } else {
+            String key = request.getParameter("key");
+            String field = request.getParameter("field");
+
+            int count = 0;
+
+            if (isEmpty(key) || isEmpty(field)) {
+                count = moviesBean.countAll();
+                key = "";
+                field = "";
+            } else {
+                count = moviesBean.count(field, key);
+            }
+
+            int page = 1;
+
+            try {
+                page = Integer.parseInt(request.getParameter("page"));
+            } catch (Exception e) {
+            }
+
+            int pageCount = (count / PAGE_SIZE);
+            if (pageCount == 0 || count % PAGE_SIZE != 0) {
+                pageCount++;
+            }
+
+            if (page < 1) {
+                page = 1;
+            }
+
+            if (page > pageCount) {
+                page = pageCount;
+            }
+
+            int start = (page - 1) * PAGE_SIZE;
+            List<Movie> range;
+
+            if (isEmpty(key) || isEmpty(field)) {
+                range = moviesBean.findAll(start, PAGE_SIZE);
+            } else {
+                range = moviesBean.findRange(field, key, start, PAGE_SIZE);
+            }
+
+            int end = start + range.size();
+
+            request.setAttribute("count", count);
+            request.setAttribute("start", start + 1);
+            request.setAttribute("end", end);
+            request.setAttribute("page", page);
+            request.setAttribute("pageCount", pageCount);
+            request.setAttribute("movies", range);
+            request.setAttribute("key", key);
+            request.setAttribute("field", field);
+        }
+
+        request.getRequestDispatcher("WEB-INF/moviefun.jsp").forward(request, response);
+    }
+
+    private static boolean isEmpty(final String input) {
+        return input == null || input.trim().length() == 0;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-webapp/src/main/webapp/WEB-INF/moviefun.jsp
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-webapp/src/main/webapp/WEB-INF/moviefun.jsp b/examples/simple-ear/moviefun-webapp/src/main/webapp/WEB-INF/moviefun.jsp
new file mode 100644
index 0000000..4c2a241
--- /dev/null
+++ b/examples/simple-ear/moviefun-webapp/src/main/webapp/WEB-INF/moviefun.jsp
@@ -0,0 +1,124 @@
+<%--
+    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.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c' %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
+<c:set var="language" value="${pageContext.request.locale}"/>
+<fmt:setLocale value="${language}"/>
+
+<!DOCTYPE html>
+<html lang="${language}">
+<head>
+  <meta charset="utf-8">
+  <title>Moviefun</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <meta name="description" content="">
+  <meta name="author" content="">
+
+  <!-- Le styles -->
+  <link href="assets/css/bootstrap.css" rel="stylesheet">
+  <link href="assets/css/movie.css" rel="stylesheet">
+  <style>
+    body {
+      padding-top: 60px;
+      /* 60px to make the container go all the way to the bottom of the topbar */
+    }
+  </style>
+  <link href="assets/css/bootstrap-responsive.css" rel="stylesheet">
+
+</head>
+
+<body>
+
+<div class="navbar navbar-inverse navbar-fixed-top">
+  <div class="navbar-inner">
+    <div class="container">
+      <a class="btn btn-navbar" data-toggle="collapse"
+         data-target=".nav-collapse"> <span class="icon-bar"></span> <span
+          class="icon-bar"></span> <span class="icon-bar"></span>
+      </a> <a class="brand" href="#">Moviefun</a>
+
+      <form class="navbar-form pull-right">
+        <select name="field">
+          <option value="title">Title</option>
+          <option value="director">Director</option>
+          <option value="genre">Genre</option>
+        </select> <input type="text" name="key" size="20">
+        <button type="submit" class="btn">Search</button>
+      </form>
+
+      <!--/.nav-collapse -->
+    </div>
+  </div>
+</div>
+
+<div class="container">
+
+  <h1>Moviefun</h1>
+
+  <form class="movie-input-form form-inline" action="moviefun"
+        method="post">
+    <p>Add Movie</p>
+    <input type="text" name="title" placeholder="Title" size="29"/> <input
+      type="text" name="director" placeholder="Director" size="17"/> <input
+      type="text" name="genre" placeholder="Genre" size="14"/> <input
+      type="text" name="rating" placeholder="Rating" size="7"/> <input
+      type="text" name="year" placeholder="Year" size="4"
+      style="width: 110px;"/> <input type="submit" name="action"
+                                     class="btn btn-primary" value="Add"/>
+  </form>
+
+  <table class="table table-striped table-bordered">
+    <thead>
+    <tr>
+      <th>Title</th>
+      <th>Director</th>
+      <th>Genre</th>
+      <th>Rating</th>
+      <th>Year</th>
+      <th>&nbsp;</th>
+    </tr>
+    </thead>
+    <tbody>
+    <c:forEach items="${movies}" var="movie">
+      <tr>
+        <td><c:out value="${movie.title}"/></td>
+        <td><c:out value="${movie.director}"/></td>
+        <td><c:out value="${movie.genre}"/></td>
+        <td><c:out value="${movie.rating}"/></td>
+        <td><c:out value="${movie.year}"/></td>
+        <td><a href="?action=Remove&id=${movie.id}"><i
+            class="icon-trash"></i></a></td>
+      </tr>
+    </c:forEach>
+    </tbody>
+  </table>
+  <c:if test="${count > 0}">
+    <c:if test="${page > 1}">
+      <a href="<c:url value="moviefun"><c:param name="page" value="${page - 1}"/><c:param name="field" value="${field}"/><c:param name="key" value="${key}"/></c:url>">&lt; Prev</a>&nbsp;
+    </c:if>
+    Showing records ${start} to ${end} of ${count}
+    <c:if test="${page < pageCount}">
+      &nbsp;<a href="<c:url value="moviefun"><c:param name="page" value="${page + 1}"/><c:param name="field" value="${field}"/><c:param name="key"
+                                                                                                                                        value="${key}"/></c:url>">Next &gt;</a>
+    </c:if>
+  </c:if>
+</div>
+<!-- /container -->
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-webapp/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-webapp/src/main/webapp/WEB-INF/web.xml b/examples/simple-ear/moviefun-webapp/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..c2b6882
--- /dev/null
+++ b/examples/simple-ear/moviefun-webapp/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+
+<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
+  <welcome-file-list>
+    <welcome-file>index.jsp</welcome-file>
+  </welcome-file-list>
+</web-app>
+

http://git-wip-us.apache.org/repos/asf/tomee/blob/d362df28/examples/simple-ear/moviefun-webapp/src/main/webapp/assets/css/bootstrap-responsive.css
----------------------------------------------------------------------
diff --git a/examples/simple-ear/moviefun-webapp/src/main/webapp/assets/css/bootstrap-responsive.css b/examples/simple-ear/moviefun-webapp/src/main/webapp/assets/css/bootstrap-responsive.css
new file mode 100644
index 0000000..bfbd2c7
--- /dev/null
+++ b/examples/simple-ear/moviefun-webapp/src/main/webapp/assets/css/bootstrap-responsive.css
@@ -0,0 +1,1285 @@
+/*!
+ * Bootstrap Responsive v2.1.1
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+
+.clearfix {
+    *zoom: 1;
+}
+
+.clearfix:before,
+.clearfix:after {
+    display: table;
+    line-height: 0;
+    content: "";
+}
+
+.clearfix:after {
+    clear: both;
+}
+
+.hide-text {
+    font: 0/0 a;
+    color: transparent;
+    text-shadow: none;
+    background-color: transparent;
+    border: 0;
+}
+
+.input-block-level {
+    display: block;
+    width: 100%;
+    min-height: 30px;
+    -webkit-box-sizing: border-box;
+    -moz-box-sizing: border-box;
+    box-sizing: border-box;
+}
+
+.hidden {
+    display: none;
+    visibility: hidden;
+}
+
+.visible-phone {
+    display: none !important;
+}
+
+.visible-tablet {
+    display: none !important;
+}
+
+.hidden-desktop {
+    display: none !important;
+}
+
+.visible-desktop {
+    display: inherit !important;
+}
+
+@media (min-width: 768px) and (max-width: 979px) {
+    .hidden-desktop {
+        display: inherit !important;
+    }
+
+    .visible-desktop {
+        display: none !important;
+    }
+
+    .visible-tablet {
+        display: inherit !important;
+    }
+
+    .hidden-tablet {
+        display: none !important;
+    }
+}
+
+@media (max-width: 767px) {
+    .hidden-desktop {
+        display: inherit !important;
+    }
+
+    .visible-desktop {
+        display: none !important;
+    }
+
+    .visible-phone {
+        display: inherit !important;
+    }
+
+    .hidden-phone {
+        display: none !important;
+    }
+}
+
+@media (min-width: 1200px) {
+    .row {
+        margin-left: -30px;
+        *zoom: 1;
+    }
+
+    .row:before,
+    .row:after {
+        display: table;
+        line-height: 0;
+        content: "";
+    }
+
+    .row:after {
+        clear: both;
+    }
+
+    [class*="span"] {
+        float: left;
+        min-height: 1px;
+        margin-left: 30px;
+    }
+
+    .container,
+    .navbar-static-top .container,
+    .navbar-fixed-top .container,
+    .navbar-fixed-bottom .container {
+        width: 1170px;
+    }
+
+    .span12 {
+        width: 1170px;
+    }
+
+    .span11 {
+        width: 1070px;
+    }
+
+    .span10 {
+        width: 970px;
+    }
+
+    .span9 {
+        width: 870px;
+    }
+
+    .span8 {
+        width: 770px;
+    }
+
+    .span7 {
+        width: 670px;
+    }
+
+    .span6 {
+        width: 570px;
+    }
+
+    .span5 {
+        width: 470px;
+    }
+
+    .span4 {
+        width: 370px;
+    }
+
+    .span3 {
+        width: 270px;
+    }
+
+    .span2 {
+        width: 170px;
+    }
+
+    .span1 {
+        width: 70px;
+    }
+
+    .offset12 {
+        margin-left: 1230px;
+    }
+
+    .offset11 {
+        margin-left: 1130px;
+    }
+
+    .offset10 {
+        margin-left: 1030px;
+    }
+
+    .offset9 {
+        margin-left: 930px;
+    }
+
+    .offset8 {
+        margin-left: 830px;
+    }
+
+    .offset7 {
+        margin-left: 730px;
+    }
+
+    .offset6 {
+        margin-left: 630px;
+    }
+
+    .offset5 {
+        margin-left: 530px;
+    }
+
+    .offset4 {
+        margin-left: 430px;
+    }
+
+    .offset3 {
+        margin-left: 330px;
+    }
+
+    .offset2 {
+        margin-left: 230px;
+    }
+
+    .offset1 {
+        margin-left: 130px;
+    }
+
+    .row-fluid {
+        width: 100%;
+        *zoom: 1;
+    }
+
+    .row-fluid:before,
+    .row-fluid:after {
+        display: table;
+        line-height: 0;
+        content: "";
+    }
+
+    .row-fluid:after {
+        clear: both;
+    }
+
+    .row-fluid [class*="span"] {
+        display: block;
+        float: left;
+        width: 100%;
+        min-height: 30px;
+        margin-left: 2.564102564102564%;
+        *margin-left: 2.5109110747408616%;
+        -webkit-box-sizing: border-box;
+        -moz-box-sizing: border-box;
+        box-sizing: border-box;
+    }
+
+    .row-fluid [class*="span"]:first-child {
+        margin-left: 0;
+    }
+
+    .row-fluid .span12 {
+        width: 100%;
+        *width: 99.94680851063829%;
+    }
+
+    .row-fluid .span11 {
+        width: 91.45299145299145%;
+        *width: 91.39979996362975%;
+    }
+
+    .row-fluid .span10 {
+        width: 82.90598290598291%;
+        *width: 82.8527914166212%;
+    }
+
+    .row-fluid .span9 {
+        width: 74.35897435897436%;
+        *width: 74.30578286961266%;
+    }
+
+    .row-fluid .span8 {
+        width: 65.81196581196582%;
+        *width: 65.75877432260411%;
+    }
+
+    .row-fluid .span7 {
+        width: 57.26495726495726%;
+        *width: 57.21176577559556%;
+    }
+
+    .row-fluid .span6 {
+        width: 48.717948717948715%;
+        *width: 48.664757228587014%;
+    }
+
+    .row-fluid .span5 {
+        width: 40.17094017094017%;
+        *width: 40.11774868157847%;
+    }
+
+    .row-fluid .span4 {
+        width: 31.623931623931625%;
+        *width: 31.570740134569924%;
+    }
+
+    .row-fluid .span3 {
+        width: 23.076923076923077%;
+        *width: 23.023731587561375%;
+    }
+
+    .row-fluid .span2 {
+        width: 14.52991452991453%;
+        *width: 14.476723040552828%;
+    }
+
+    .row-fluid .span1 {
+        width: 5.982905982905983%;
+        *width: 5.929714493544281%;
+    }
+
+    .row-fluid .offset12 {
+        margin-left: 105.12820512820512%;
+        *margin-left: 105.02182214948171%;
+    }
+
+    .row-fluid .offset12:first-child {
+        margin-left: 102.56410256410257%;
+        *margin-left: 102.45771958537915%;
+    }
+
+    .row-fluid .offset11 {
+        margin-left: 96.58119658119658%;
+        *margin-left: 96.47481360247316%;
+    }
+
+    .row-fluid .offset11:first-child {
+        margin-left: 94.01709401709402%;
+        *margin-left: 93.91071103837061%;
+    }
+
+    .row-fluid .offset10 {
+        margin-left: 88.03418803418803%;
+        *margin-left: 87.92780505546462%;
+    }
+
+    .row-fluid .offset10:first-child {
+        margin-left: 85.47008547008548%;
+        *margin-left: 85.36370249136206%;
+    }
+
+    .row-fluid .offset9 {
+        margin-left: 79.48717948717949%;
+        *margin-left: 79.38079650845607%;
+    }
+
+    .row-fluid .offset9:first-child {
+        margin-left: 76.92307692307693%;
+        *margin-left: 76.81669394435352%;
+    }
+
+    .row-fluid .offset8 {
+        margin-left: 70.94017094017094%;
+        *margin-left: 70.83378796144753%;
+    }
+
+    .row-fluid .offset8:first-child {
+        margin-left: 68.37606837606839%;
+        *margin-left: 68.26968539734497%;
+    }
+
+    .row-fluid .offset7 {
+        margin-left: 62.393162393162385%;
+        *margin-left: 62.28677941443899%;
+    }
+
+    .row-fluid .offset7:first-child {
+        margin-left: 59.82905982905982%;
+        *margin-left: 59.72267685033642%;
+    }
+
+    .row-fluid .offset6 {
+        margin-left: 53.84615384615384%;
+        *margin-left: 53.739770867430444%;
+    }
+
+    .row-fluid .offset6:first-child {
+        margin-left: 51.28205128205128%;
+        *margin-left: 51.175668303327875%;
+    }
+
+    .row-fluid .offset5 {
+        margin-left: 45.299145299145295%;
+        *margin-left: 45.1927623204219%;
+    }
+
+    .row-fluid .offset5:first-child {
+        margin-left: 42.73504273504273%;
+        *margin-left: 42.62865975631933%;
+    }
+
+    .row-fluid .offset4 {
+        margin-left: 36.75213675213675%;
+        *margin-left: 36.645753773413354%;
+    }
+
+    .row-fluid .offset4:first-child {
+        margin-left: 34.18803418803419%;
+        *margin-left: 34.081651209310785%;
+    }
+
+    .row-fluid .offset3 {
+        margin-left: 28.205128205128204%;
+        *margin-left: 28.0987452264048%;
+    }
+
+    .row-fluid .offset3:first-child {
+        margin-left: 25.641025641025642%;
+        *margin-left: 25.53464266230224%;
+    }
+
+    .row-fluid .offset2 {
+        margin-left: 19.65811965811966%;
+        *margin-left: 19.551736679396257%;
+    }
+
+    .row-fluid .offset2:first-child {
+        margin-left: 17.094017094017094%;
+        *margin-left: 16.98763411529369%;
+    }
+
+    .row-fluid .offset1 {
+        margin-left: 11.11111111111111%;
+        *margin-left: 11.004728132387708%;
+    }
+
+    .row-fluid .offset1:first-child {
+        margin-left: 8.547008547008547%;
+        *margin-left: 8.440625568285142%;
+    }
+
+    input,
+    textarea,
+    .uneditable-input {
+        margin-left: 0;
+    }
+
+    .controls-row [class*="span"] + [class*="span"] {
+        margin-left: 30px;
+    }
+
+    input.span12,
+    textarea.span12,
+    .uneditable-input.span12 {
+        width: 1156px;
+    }
+
+    input.span11,
+    textarea.span11,
+    .uneditable-input.span11 {
+        width: 1056px;
+    }
+
+    input.span10,
+    textarea.span10,
+    .uneditable-input.span10 {
+        width: 956px;
+    }
+
+    input.span9,
+    textarea.span9,
+    .uneditable-input.span9 {
+        width: 856px;
+    }
+
+    input.span8,
+    textarea.span8,
+    .uneditable-input.span8 {
+        width: 756px;
+    }
+
+    input.span7,
+    textarea.span7,
+    .uneditable-input.span7 {
+        width: 656px;
+    }
+
+    input.span6,
+    textarea.span6,
+    .uneditable-input.span6 {
+        width: 556px;
+    }
+
+    input.span5,
+    textarea.span5,
+    .uneditable-input.span5 {
+        width: 456px;
+    }
+
+    input.span4,
+    textarea.span4,
+    .uneditable-input.span4 {
+        width: 356px;
+    }
+
+    input.span3,
+    textarea.span3,
+    .uneditable-input.span3 {
+        width: 256px;
+    }
+
+    input.span2,
+    textarea.span2,
+    .uneditable-input.span2 {
+        width: 156px;
+    }
+
+    input.span1,
+    textarea.span1,
+    .uneditable-input.span1 {
+        width: 56px;
+    }
+
+    .thumbnails {
+        margin-left: -30px;
+    }
+
+    .thumbnails > li {
+        margin-left: 30px;
+    }
+
+    .row-fluid .thumbnails {
+        margin-left: 0;
+    }
+}
+
+@media (min-width: 768px) and (max-width: 979px) {
+    .row {
+        margin-left: -20px;
+        *zoom: 1;
+    }
+
+    .row:before,
+    .row:after {
+        display: table;
+        line-height: 0;
+        content: "";
+    }
+
+    .row:after {
+        clear: both;
+    }
+
+    [class*="span"] {
+        float: left;
+        min-height: 1px;
+        margin-left: 20px;
+    }
+
+    .container,
+    .navbar-static-top .container,
+    .navbar-fixed-top .container,
+    .navbar-fixed-bottom .container {
+        width: 724px;
+    }
+
+    .span12 {
+        width: 724px;
+    }
+
+    .span11 {
+        width: 662px;
+    }
+
+    .span10 {
+        width: 600px;
+    }
+
+    .span9 {
+        width: 538px;
+    }
+
+    .span8 {
+        width: 476px;
+    }
+
+    .span7 {
+        width: 414px;
+    }
+
+    .span6 {
+        width: 352px;
+    }
+
+    .span5 {
+        width: 290px;
+    }
+
+    .span4 {
+        width: 228px;
+    }
+
+    .span3 {
+        width: 166px;
+    }
+
+    .span2 {
+        width: 104px;
+    }
+
+    .span1 {
+        width: 42px;
+    }
+
+    .offset12 {
+        margin-left: 764px;
+    }
+
+    .offset11 {
+        margin-left: 702px;
+    }
+
+    .offset10 {
+        margin-left: 640px;
+    }
+
+    .offset9 {
+        margin-left: 578px;
+    }
+
+    .offset8 {
+        margin-left: 516px;
+    }
+
+    .offset7 {
+        margin-left: 454px;
+    }
+
+    .offset6 {
+        margin-left: 392px;
+    }
+
+    .offset5 {
+        margin-left: 330px;
+    }
+
+    .offset4 {
+        margin-left: 268px;
+    }
+
+    .offset3 {
+        margin-left: 206px;
+    }
+
+    .offset2 {
+        margin-left: 144px;
+    }
+
+    .offset1 {
+        margin-left: 82px;
+    }
+
+    .row-fluid {
+        width: 100%;
+        *zoom: 1;
+    }
+
+    .row-fluid:before,
+    .row-fluid:after {
+        display: table;
+        line-height: 0;
+        content: "";
+    }
+
+    .row-fluid:after {
+        clear: both;
+    }
+
+    .row-fluid [class*="span"] {
+        display: block;
+        float: left;
+        width: 100%;
+        min-height: 30px;
+        margin-left: 2.7624309392265194%;
+        *margin-left: 2.709239449864817%;
+        -webkit-box-sizing: border-box;
+        -moz-box-sizing: border-box;
+        box-sizing: border-box;
+    }
+
+    .row-fluid [class*="span"]:first-child {
+        margin-left: 0;
+    }
+
+    .row-fluid .span12 {
+        width: 100%;
+        *width: 99.94680851063829%;
+    }
+
+    .row-fluid .span11 {
+        width: 91.43646408839778%;
+        *width: 91.38327259903608%;
+    }
+
+    .row-fluid .span10 {
+        width: 82.87292817679558%;
+        *width: 82.81973668743387%;
+    }
+
+    .row-fluid .span9 {
+        width: 74.30939226519337%;
+        *width: 74.25620077583166%;
+    }
+
+    .row-fluid .span8 {
+        width: 65.74585635359117%;
+        *width: 65.69266486422946%;
+    }
+
+    .row-fluid .span7 {
+        width: 57.18232044198895%;
+        *width: 57.12912895262725%;
+    }
+
+    .row-fluid .span6 {
+        width: 48.61878453038674%;
+        *width: 48.56559304102504%;
+    }
+
+    .row-fluid .span5 {
+        width: 40.05524861878453%;
+        *width: 40.00205712942283%;
+    }
+
+    .row-fluid .span4 {
+        width: 31.491712707182323%;
+        *width: 31.43852121782062%;
+    }
+
+    .row-fluid .span3 {
+        width: 22.92817679558011%;
+        *width: 22.87498530621841%;
+    }
+
+    .row-fluid .span2 {
+        width: 14.3646408839779%;
+        *width: 14.311449394616199%;
+    }
+
+    .row-fluid .span1 {
+        width: 5.801104972375691%;
+        *width: 5.747913483013988%;
+    }
+
+    .row-fluid .offset12 {
+        margin-left: 105.52486187845304%;
+        *margin-left: 105.41847889972962%;
+    }
+
+    .row-fluid .offset12:first-child {
+        margin-left: 102.76243093922652%;
+        *margin-left: 102.6560479605031%;
+    }
+
+    .row-fluid .offset11 {
+        margin-left: 96.96132596685082%;
+        *margin-left: 96.8549429881274%;
+    }
+
+    .row-fluid .offset11:first-child {
+        margin-left: 94.1988950276243%;
+        *margin-left: 94.09251204890089%;
+    }
+
+    .row-fluid .offset10 {
+        margin-left: 88.39779005524862%;
+        *margin-left: 88.2914070765252%;
+    }
+
+    .row-fluid .offset10:first-child {
+        margin-left: 85.6353591160221%;
+        *margin-left: 85.52897613729868%;
+    }
+
+    .row-fluid .offset9 {
+        margin-left: 79.8342541436464%;
+        *margin-left: 79.72787116492299%;
+    }
+
+    .row-fluid .offset9:first-child {
+        margin-left: 77.07182320441989%;
+        *margin-left: 76.96544022569647%;
+    }
+
+    .row-fluid .offset8 {
+        margin-left: 71.2707182320442%;
+        *margin-left: 71.16433525332079%;
+    }
+
+    .row-fluid .offset8:first-child {
+        margin-left: 68.50828729281768%;
+        *margin-left: 68.40190431409427%;
+    }
+
+    .row-fluid .offset7 {
+        margin-left: 62.70718232044199%;
+        *margin-left: 62.600799341718584%;
+    }
+
+    .row-fluid .offset7:first-child {
+        margin-left: 59.94475138121547%;
+        *margin-left: 59.838368402492065%;
+    }
+
+    .row-fluid .offset6 {
+        margin-left: 54.14364640883978%;
+        *margin-left: 54.037263430116376%;
+    }
+
+    .row-fluid .offset6:first-child {
+        margin-left: 51.38121546961326%;
+        *margin-left: 51.27483249088986%;
+    }
+
+    .row-fluid .offset5 {
+        margin-left: 45.58011049723757%;
+        *margin-left: 45.47372751851417%;
+    }
+
+    .row-fluid .offset5:first-child {
+        margin-left: 42.81767955801105%;
+        *margin-left: 42.71129657928765%;
+    }
+
+    .row-fluid .offset4 {
+        margin-left: 37.01657458563536%;
+        *margin-left: 36.91019160691196%;
+    }
+
+    .row-fluid .offset4:first-child {
+        margin-left: 34.25414364640884%;
+        *margin-left: 34.14776066768544%;
+    }
+
+    .row-fluid .offset3 {
+        margin-left: 28.45303867403315%;
+        *margin-left: 28.346655695309746%;
+    }
+
+    .row-fluid .offset3:first-child {
+        margin-left: 25.69060773480663%;
+        *margin-left: 25.584224756083227%;
+    }
+
+    .row-fluid .offset2 {
+        margin-left: 19.88950276243094%;
+        *margin-left: 19.783119783707537%;
+    }
+
+    .row-fluid .offset2:first-child {
+        margin-left: 17.12707182320442%;
+        *margin-left: 17.02068884448102%;
+    }
+
+    .row-fluid .offset1 {
+        margin-left: 11.32596685082873%;
+        *margin-left: 11.219583872105325%;
+    }
+
+    .row-fluid .offset1:first-child {
+        margin-left: 8.56353591160221%;
+        *margin-left: 8.457152932878806%;
+    }
+
+    input,
+    textarea,
+    .uneditable-input {
+        margin-left: 0;
+    }
+
+    .controls-row [class*="span"] + [class*="span"] {
+        margin-left: 20px;
+    }
+
+    input.span12,
+    textarea.span12,
+    .uneditable-input.span12 {
+        width: 710px;
+    }
+
+    input.span11,
+    textarea.span11,
+    .uneditable-input.span11 {
+        width: 648px;
+    }
+
+    input.span10,
+    textarea.span10,
+    .uneditable-input.span10 {
+        width: 586px;
+    }
+
+    input.span9,
+    textarea.span9,
+    .uneditable-input.span9 {
+        width: 524px;
+    }
+
+    input.span8,
+    textarea.span8,
+    .uneditable-input.span8 {
+        width: 462px;
+    }
+
+    input.span7,
+    textarea.span7,
+    .uneditable-input.span7 {
+        width: 400px;
+    }
+
+    input.span6,
+    textarea.span6,
+    .uneditable-input.span6 {
+        width: 338px;
+    }
+
+    input.span5,
+    textarea.span5,
+    .uneditable-input.span5 {
+        width: 276px;
+    }
+
+    input.span4,
+    textarea.span4,
+    .uneditable-input.span4 {
+        width: 214px;
+    }
+
+    input.span3,
+    textarea.span3,
+    .uneditable-input.span3 {
+        width: 152px;
+    }
+
+    input.span2,
+    textarea.span2,
+    .uneditable-input.span2 {
+        width: 90px;
+    }
+
+    input.span1,
+    textarea.span1,
+    .uneditable-input.span1 {
+        width: 28px;
+    }
+}
+
+@media (max-width: 767px) {
+    body {
+        padding-right: 20px;
+        padding-left: 20px;
+    }
+
+    .navbar-fixed-top,
+    .navbar-fixed-bottom,
+    .navbar-static-top {
+        margin-right: -20px;
+        margin-left: -20px;
+    }
+
+    .container-fluid {
+        padding: 0;
+    }
+
+    .dl-horizontal dt {
+        float: none;
+        width: auto;
+        clear: none;
+        text-align: left;
+    }
+
+    .dl-horizontal dd {
+        margin-left: 0;
+    }
+
+    .container {
+        width: auto;
+    }
+
+    .row-fluid {
+        width: 100%;
+    }
+
+    .row,
+    .thumbnails {
+        margin-left: 0;
+    }
+
+    .thumbnails > li {
+        float: none;
+        margin-left: 0;
+    }
+
+    [class*="span"],
+    .row-fluid [class*="span"] {
+        display: block;
+        float: none;
+        width: 100%;
+        margin-left: 0;
+        -webkit-box-sizing: border-box;
+        -moz-box-sizing: border-box;
+        box-sizing: border-box;
+    }
+
+    .span12,
+    .row-fluid .span12 {
+        width: 100%;
+        -webkit-box-sizing: border-box;
+        -moz-box-sizing: border-box;
+        box-sizing: border-box;
+    }
+
+    .input-large,
+    .input-xlarge,
+    .input-xxlarge,
+    input[class*="span"],
+    select[class*="span"],
+    textarea[class*="span"],
+    .uneditable-input {
+        display: block;
+        width: 100%;
+        min-height: 30px;
+        -webkit-box-sizing: border-box;
+        -moz-box-sizing: border-box;
+        box-sizing: border-box;
+    }
+
+    .input-prepend input,
+    .input-append input,
+    .input-prepend input[class*="span"],
+    .input-append input[class*="span"] {
+        display: inline-block;
+        width: auto;
+    }
+
+    .controls-row [class*="span"] + [class*="span"] {
+        margin-left: 0;
+    }
+
+    .modal {
+        position: fixed;
+        top: 20px;
+        right: 20px;
+        left: 20px;
+        width: auto;
+        margin: 0;
+    }
+
+    .modal.fade.in {
+        top: auto;
+    }
+}
+
+@media (max-width: 480px) {
+    .nav-collapse {
+        -webkit-transform: translate3d(0, 0, 0);
+    }
+
+    .page-header h1 small {
+        display: block;
+        line-height: 20px;
+    }
+
+    input[type="checkbox"],
+    input[type="radio"] {
+        border: 1px solid #ccc;
+    }
+
+    .form-horizontal .control-label {
+        float: none;
+        width: auto;
+        padding-top: 0;
+        text-align: left;
+    }
+
+    .form-horizontal .controls {
+        margin-left: 0;
+    }
+
+    .form-horizontal .control-list {
+        padding-top: 0;
+    }
+
+    .form-horizontal .form-actions {
+        padding-right: 10px;
+        padding-left: 10px;
+    }
+
+    .modal {
+        top: 10px;
+        right: 10px;
+        left: 10px;
+    }
+
+    .modal-header .close {
+        padding: 10px;
+        margin: -10px;
+    }
+
+    .carousel-caption {
+        position: static;
+    }
+}
+
+@media (max-width: 979px) {
+    body {
+        padding-top: 0;
+    }
+
+    .navbar-fixed-top,
+    .navbar-fixed-bottom {
+        position: static;
+    }
+
+    .navbar-fixed-top {
+        margin-bottom: 20px;
+    }
+
+    .navbar-fixed-bottom {
+        margin-top: 20px;
+    }
+
+    .navbar-fixed-top .navbar-inner,
+    .navbar-fixed-bottom .navbar-inner {
+        padding: 5px;
+    }
+
+    .navbar .container {
+        width: auto;
+        padding: 0;
+    }
+
+    .navbar .brand {
+        padding-right: 10px;
+        padding-left: 10px;
+        margin: 0 0 0 -5px;
+    }
+
+    .nav-collapse {
+        clear: both;
+    }
+
+    .nav-collapse .nav {
+        float: none;
+        margin: 0 0 10px;
+    }
+
+    .nav-collapse .nav > li {
+        float: none;
+    }
+
+    .nav-collapse .nav > li > a {
+        margin-bottom: 2px;
+    }
+
+    .nav-collapse .nav > .divider-vertical {
+        display: none;
+    }
+
+    .nav-collapse .nav .nav-header {
+        color: #777777;
+        text-shadow: none;
+    }
+
+    .nav-collapse .nav > li > a,
+    .nav-collapse .dropdown-menu a {
+        padding: 9px 15px;
+        font-weight: bold;
+        color: #777777;
+        -webkit-border-radius: 3px;
+        -moz-border-radius: 3px;
+        border-radius: 3px;
+    }
+
+    .nav-collapse .btn {
+        padding: 4px 10px 4px;
+        font-weight: normal;
+        -webkit-border-radius: 4px;
+        -moz-border-radius: 4px;
+        border-radius: 4px;
+    }
+
+    .nav-collapse .dropdown-menu li + li a {
+        margin-bottom: 2px;
+    }
+
+    .nav-collapse .nav > li > a:hover,
+    .nav-collapse .dropdown-menu a:hover {
+        background-color: #f2f2f2;
+    }
+
+    .navbar-inverse .nav-collapse .nav > li > a:hover,
+    .navbar-inverse .nav-collapse .dropdown-menu a:hover {
+        background-color: #111111;
+    }
+
+    .nav-collapse.in .btn-group {
+        padding: 0;
+        margin-top: 5px;
+    }
+
+    .nav-collapse .dropdown-menu {
+        position: static;
+        top: auto;
+        left: auto;
+        display: block;
+        float: none;
+        max-width: none;
+        padding: 0;
+        margin: 0 15px;
+        background-color: transparent;
+        border: none;
+        -webkit-border-radius: 0;
+        -moz-border-radius: 0;
+        border-radius: 0;
+        -webkit-box-shadow: none;
+        -moz-box-shadow: none;
+        box-shadow: none;
+    }
+
+    .nav-collapse .dropdown-menu:before,
+    .nav-collapse .dropdown-menu:after {
+        display: none;
+    }
+
+    .nav-collapse .dropdown-menu .divider {
+        display: none;
+    }
+
+    .nav-collapse .nav > li > .dropdown-menu:before,
+    .nav-collapse .nav > li > .dropdown-menu:after {
+        display: none;
+    }
+
+    .nav-collapse .navbar-form,
+    .nav-collapse .navbar-search {
+        float: none;
+        padding: 10px 15px;
+        margin: 10px 0;
+        border-top: 1px solid #f2f2f2;
+        border-bottom: 1px solid #f2f2f2;
+        -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+        -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+    }
+
+    .navbar-inverse .nav-collapse .navbar-form,
+    .navbar-inverse .nav-collapse .navbar-search {
+        border-top-color: #111111;
+        border-bottom-color: #111111;
+    }
+
+    .navbar .nav-collapse .nav.pull-right {
+        float: none;
+        margin-left: 0;
+    }
+
+    .nav-collapse,
+    .nav-collapse.collapse {
+        height: 0;
+        overflow: hidden;
+    }
+
+    .navbar .btn-navbar {
+        display: block;
+    }
+
+    .navbar-static .navbar-inner {
+        padding-right: 10px;
+        padding-left: 10px;
+    }
+}
+
+@media (min-width: 980px) {
+    .nav-collapse.collapse {
+        height: auto !important;
+        overflow: visible !important;
+    }
+}