Author: rmannibucau
Date: Mon Aug  1 15:49:10 2011
New Revision: 1152841

URL: http://svn.apache.org/viewvc?rev=1152841&view=rev
Log:
adding a test for @Repository

Added:
    
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/RepositoryTest.java
Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java?rev=1152841&r1=1152840&r2=1152841&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
 Mon Aug  1 15:49:10 2011
@@ -23,7 +23,6 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.cdi.OWBInjector;
 import org.apache.openejb.config.AppModule;
-import org.apache.openejb.config.ClientModule;
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.config.ConnectorModule;
 import org.apache.openejb.config.EjbModule;
@@ -32,7 +31,6 @@ import org.apache.openejb.core.Operation
 import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.core.ivm.naming.InitContextFactory;
 import org.apache.openejb.jee.Application;
-import org.apache.openejb.jee.ApplicationClient;
 import org.apache.openejb.jee.Beans;
 import org.apache.openejb.jee.Connector;
 import org.apache.openejb.jee.EjbJar;
@@ -94,7 +92,7 @@ public class ApplicationComposer extends
 
         int appModules = 0;
         int modules = 0;
-        Class[] moduleTypes = {EjbJar.class, EnterpriseBean.class, 
Persistence.class, PersistenceUnit.class, Connector.class, Beans.class, 
Application.class, Class[].class};
+        Class[] moduleTypes = {EjbModule.class, EjbJar.class, 
EnterpriseBean.class, Persistence.class, PersistenceUnit.class, 
Connector.class, Beans.class, Application.class, Class[].class};
         for (FrameworkMethod method : 
testClass.getAnnotatedMethods(Module.class)) {
 
             modules++;
@@ -181,7 +179,11 @@ public class ApplicationComposer extends
 
                 final Object obj = method.invokeExplosively(testInstance);
 
-                if (obj instanceof EjbJar) {
+                if (obj instanceof EjbModule) {
+
+                    appModule.getEjbModules().add(EjbModule.class.cast(obj));
+
+                } else if (obj instanceof EjbJar) {
 
                     final EjbJar ejbJar = (EjbJar) obj;
                     setId(ejbJar, method);

Added: 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/RepositoryTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/RepositoryTest.java?rev=1152841&view=auto
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/RepositoryTest.java
 (added)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/RepositoryTest.java
 Mon Aug  1 15:49:10 2011
@@ -0,0 +1,222 @@
+/**
+ *
+ * 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.util;
+
+import org.apache.openejb.api.Repository;
+import org.apache.openejb.config.EjbModule;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.SingletonBean;
+import org.apache.openejb.jee.jpa.unit.Persistence;
+import org.apache.openejb.jee.jpa.unit.PersistenceUnit;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.junit.Configuration;
+import org.apache.openejb.junit.Module;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.ejb.EJB;
+import javax.ejb.Singleton;
+import javax.persistence.Entity;
+import javax.persistence.EntityManager;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.PersistenceContext;
+import java.lang.reflect.Proxy;
+import java.util.Collection;
+import java.util.Properties;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+
+/**
+ * @author rmannibucau
+ */
+@RunWith(ApplicationComposer.class)
+public class RepositoryTest {
+    private static boolean initDone = false;
+
+    @EJB private InitUserDAO init;
+    @EJB private UserChecker checker;
+    @PersistenceContext private EntityManager em;
+    private UserDAO dao;
+
+    @Before public void checkTestInjection() {
+        dao = (UserDAO) 
Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new 
Class<?>[] { UserDAO.class }, new QueryProxy(em));
+        if (!initDone) {
+            init.init();
+            initDone = true;
+        }
+    }
+
+    @Test public void simple() {
+        User user = dao.findById(1);
+        assertNotNull(user);
+        assertEquals(1, user.getId());
+    }
+
+    @Test public void findAll() {
+        Collection<User> users = dao.findAll();
+        assertEquals(10, users.size());
+    }
+
+    @Test public void oneCriteria() {
+        Collection<User> users = dao.findByName("foo");
+        assertEquals(4, users.size());
+        for (User user : users) {
+            assertEquals("foo", user.getName());
+        }
+    }
+
+    @Test public void twoCriteria() {
+        Collection<User> users = dao.findByNameAndInfo("bar-1", "1");
+        assertEquals(1, users.size());
+
+        User user = users.iterator().next();
+        assertEquals("bar-1", user.getName());
+        assertEquals("1", user.getInfo());
+    }
+
+    @Test public void checkInjections() {
+        UserDAO injection = checker.getDao();
+        assertNotNull(injection);
+        assertEquals(10, injection.findAll().size());
+    }
+
+    @Repository public static interface UserDAO {
+        User findById(long id);
+
+        Collection<User> findByName(String name);
+
+        Collection<User> findByNameAndInfo(String name, String info);
+
+        Collection<User> findAll();
+    }
+
+    @Entity public static class User {
+        @Id @GeneratedValue private long id;
+        private String name;
+        private String info;
+        private int age;
+
+        public long getId() {
+            return id;
+        }
+
+        public void setId(long id) {
+            this.id = id;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getAge() {
+            return age;
+        }
+
+        public void setAge(int age) {
+            this.age = age;
+        }
+
+        public String getInfo() {
+            return info;
+        }
+
+        public void setInfo(String info) {
+            this.info = info;
+        }
+
+        @Override
+        public String toString() {
+            return "User{" +
+                    "age=" + age +
+                    ", info='" + info + '\'' +
+                    ", name='" + name + '\'' +
+                    ", id=" + id +
+                    '}';
+        }
+    }
+
+    @Singleton public static class Persister {
+        @PersistenceContext private EntityManager em;
+
+        public void insert(User user) {
+            em.persist(user);
+        }
+    }
+
+    @Singleton public static class InitUserDAO {
+        @PersistenceContext private EntityManager em;
+
+        public void init() {
+            for (int i = 0; i < 10; i++) {
+                User u = new User();
+                u.setAge(i * 8);
+                if (i % 3 == 0) {
+                    u.setName("foo");
+                } else {
+                    u.setName("bar-" + i);
+                }
+                u.setInfo(Integer.toString(i % 3));
+                em.persist(u);
+            }
+        }
+    }
+
+    @Singleton public static class UserChecker {
+        @Repository private UserDAO dao;
+
+        public UserDAO getDao() {
+            return dao;
+        }
+    }
+
+    @Configuration public Properties config() {
+        final Properties p = new Properties();
+        p.put("bvalDatabase", "new://Resource?type=DataSource");
+        p.put("bvalDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
+        p.put("bvalDatabase.JdbcUrl", "jdbc:hsqldb:mem:bval");
+        return p;
+    }
+
+    @Module public EjbModule app() throws Exception {
+        EjbJar ejbJar = new EjbJar("repository");
+        ejbJar.addEnterpriseBean(new SingletonBean(InitUserDAO.class));
+        ejbJar.addEnterpriseBean(new SingletonBean(UserChecker.class));
+
+        EjbModule module = new EjbModule(ejbJar);
+        module.getRepositories().add(UserDAO.class.getName());
+        return module;
+    }
+
+    @Module public Persistence persistence() {
+        PersistenceUnit unit = new PersistenceUnit("repository-unit");
+        unit.addClass(User.class);
+        unit.setProperty("openjpa.jdbc.SynchronizeMappings", 
"buildSchema(ForeignKeys=true)");
+        unit.setExcludeUnlistedClasses(true);
+
+        Persistence persistence = new Persistence(unit);
+        persistence.setVersion("2.0");
+        return persistence;
+    }
+}


Reply via email to