You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2008/07/22 07:34:10 UTC

svn commit: r678642 - in /openejb/trunk/openejb3/container: openejb-core/src/main/java/org/apache/openejb/config/rules/ openejb-core/src/test/java/org/apache/openejb/config/rules/ openejb-jee/src/main/java/org/apache/openejb/jee/

Author: dblevins
Date: Mon Jul 21 22:34:09 2008
New Revision: 678642

URL: http://svn.apache.org/viewvc?rev=678642&view=rev
Log:
Added unit test to ensure the validation code is good.
Checks that the expected that the right message keys are in the list of failures
Checks that there is a message for the key
Checks that there are no {0}, {1}, etc. parts to the message still
Checks the above on all three message levels

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClasses.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckMethods.java
    openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java
    openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SessionBean.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClasses.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClasses.java?rev=678642&r1=678641&r2=678642&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClasses.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClasses.java Mon Jul 21 22:34:09 2008
@@ -105,7 +105,7 @@
                     }
 
                     for (String interfce : sessionBean.getBusinessRemote()) {
-                        checkInterface(b, beanClass, "business-local", interfce);
+                        checkInterface(b, beanClass, "business-remote", interfce);
                     }
                 }
             } catch (RuntimeException e) {
@@ -303,26 +303,29 @@
 
             fail(b, "xml." + tag + ".ejbLocalObject", clazz.getName());
 
-        } else if (tag.equals("businessLocal") || tag.equals("businessRemote")) {
+        } else {
+             if (tag.equals("businessLocal") || tag.equals("businessRemote")) {
 
-            return true;
-        }
+                return true;
 
-        // must be tagged as <home>, <local-home>, <remote>, or <local>
-        if (clazz.isAnnotationPresent(Local.class)) {
+            } else if (clazz.isAnnotationPresent(Local.class)) {
 
-            fail(b, "xml." + tag + ".businessLocal", clazz.getName());
+                fail(b, "xml." + tag + ".businessLocal", clazz.getName());
 
-        } else if (clazz.isAnnotationPresent(Remote.class)) {
+            } else if (clazz.isAnnotationPresent(Remote.class)) {
 
-            fail(b, "xml." + tag + ".businessRemote", clazz.getName());
+                fail(b, "xml." + tag + ".businessRemote", clazz.getName());
 
-        } else {
+            } else {
 
-            fail(b, "xml." + tag + ".unknown", clazz.getName());
+                fail(b, "xml." + tag + ".unknown", clazz.getName());
+
+            }
 
         }
 
+        // must be tagged as <home>, <local-home>, <remote>, or <local>
+
         return false;
     }
 

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckMethods.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckMethods.java?rev=678642&r1=678641&r2=678642&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckMethods.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckMethods.java Mon Jul 21 22:34:09 2008
@@ -24,6 +24,9 @@
 import org.apache.openejb.jee.SessionBean;
 
 import javax.ejb.EJBLocalObject;
+import javax.ejb.EJBObject;
+import javax.ejb.EJBHome;
+import javax.ejb.EJBLocalHome;
 import java.lang.reflect.Method;
 import java.util.List;
 import java.util.ArrayList;
@@ -61,6 +64,10 @@
             return;
         }
 
+        if (!EJBLocalHome.class.isAssignableFrom(home)) {
+            return;
+        }
+
         if (check_hasCreateMethod(b, bean, home)) {
             check_createMethodsAreImplemented(b, bean, home);
 //            check_postCreateMethodsAreImplemented(b, bean, home);
@@ -77,6 +84,10 @@
             return;
         }
 
+        if (!EJBLocalObject.class.isAssignableFrom(intrface)) {
+            return;
+        }
+
         Method[] interfaceMethods = intrface.getMethods();
 
         for (int i = 0; i < interfaceMethods.length; i++) {
@@ -120,6 +131,10 @@
             return;
         }
 
+        if (!EJBObject.class.isAssignableFrom(intrface)) {
+            return;
+        }
+
         Method[] interfaceMethods = intrface.getMethods();
 
         for (int i = 0; i < interfaceMethods.length; i++) {
@@ -162,6 +177,10 @@
             return;
         }
 
+        if (!EJBHome.class.isAssignableFrom(home)) {
+            return;
+        }
+
         if (check_hasCreateMethod(b, bean, home)) {
             check_createMethodsAreImplemented(b, bean, home);
             // ejbPostCreate methods are now automatically generated

Modified: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java?rev=678642&r1=678641&r2=678642&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java Mon Jul 21 22:34:09 2008
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.config.rules;
 
+import static org.apache.openejb.util.Join.join;
 import junit.framework.TestCase;
 import org.apache.openejb.assembler.classic.ContainerSystemInfo;
 import org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
@@ -24,6 +25,7 @@
 import org.apache.openejb.config.ValidationFailure;
 import org.apache.openejb.jee.EjbJar;
 import org.apache.openejb.jee.StatelessBean;
+import org.apache.openejb.OpenEJBException;
 
 import javax.ejb.EJBHome;
 import javax.ejb.EJBLocalHome;
@@ -31,6 +33,10 @@
 import javax.ejb.EJBObject;
 import javax.ejb.Local;
 import javax.ejb.Remote;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 
 /**
  * @version $Rev$ $Date$
@@ -38,12 +44,14 @@
 public class InvalidInterfacesTest extends TestCase {
     private ConfigurationFactory config;
 
-    public void testBadHomeAndLocal() throws Exception {
+    public void testCorrectInterfaces() throws Exception {
 
         EjbJar ejbJar = new EjbJar();
         StatelessBean bean = ejbJar.addEnterpriseBean(new StatelessBean(FooBean.class));
-        bean.setHomeAndLocal(FooLocal.class, FooLocal.class);
-        bean.setHomeAndRemote(FooLocal.class, FooLocal.class);
+        bean.setHomeAndRemote(FooEJBHome.class, FooEJBObject.class);
+        bean.setHomeAndLocal(FooEJBLocalHome.class, FooEJBLocalObject.class);
+        bean.addBusinessLocal(FooLocal.class.getName());
+        bean.addBusinessRemote(FooRemote.class.getName());
 
         try {
             config.configureApplication(ejbJar);
@@ -51,10 +59,167 @@
             for (ValidationFailure failure : e.getFailures()) {
                 System.out.println("failure = " + failure.getMessageKey());
             }
+            fail("There should be no validation failures");
         }
 
     }
 
+    public void testBusinessLocal() throws Exception {
+
+        List<String> expectedKeys = new ArrayList<String>();
+        expectedKeys.add("xml.remote.businessLocal");
+        expectedKeys.add("xml.home.businessLocal");
+        expectedKeys.add("xml.local.businessLocal");
+        expectedKeys.add("xml.localHome.businessLocal");
+
+        validate(FooLocal.class, expectedKeys);
+    }
+
+    public void testBusinessRemote() throws Exception {
+
+        List<String> expectedKeys = new ArrayList<String>();
+        expectedKeys.add("xml.remote.businessRemote");
+        expectedKeys.add("xml.home.businessRemote");
+        expectedKeys.add("xml.local.businessRemote");
+        expectedKeys.add("xml.localHome.businessRemote");
+
+        validate(FooRemote.class, expectedKeys);
+    }
+
+    public void testEJBObject() throws Exception {
+
+        List<String> expectedKeys = new ArrayList<String>();
+        expectedKeys.add("xml.home.ejbObject");
+        expectedKeys.add("xml.local.ejbObject");
+        expectedKeys.add("xml.localHome.ejbObject");
+        expectedKeys.add("xml.businessLocal.ejbObject");
+        expectedKeys.add("xml.businessRemote.ejbObject");
+
+        validate(FooEJBObject.class, expectedKeys);
+    }
+
+    public void testEJBHome() throws Exception {
+
+        List<String> expectedKeys = new ArrayList<String>();
+        expectedKeys.add("xml.remote.ejbHome");
+        expectedKeys.add("xml.local.ejbHome");
+        expectedKeys.add("xml.localHome.ejbHome");
+        expectedKeys.add("xml.businessLocal.ejbHome");
+        expectedKeys.add("xml.businessRemote.ejbHome");
+
+        validate(FooEJBHome.class, expectedKeys);
+    }
+
+    public void testEJBLocalHome() throws Exception {
+
+        List<String> expectedKeys = new ArrayList<String>();
+        expectedKeys.add("xml.remote.ejbLocalHome");
+        expectedKeys.add("xml.home.ejbLocalHome");
+        expectedKeys.add("xml.local.ejbLocalHome");
+        expectedKeys.add("xml.businessLocal.ejbLocalHome");
+        expectedKeys.add("xml.businessRemote.ejbLocalHome");
+
+        validate(FooEJBLocalHome.class, expectedKeys);
+    }
+
+    public void testEJBLocalObject() throws Exception {
+
+        List<String> expectedKeys = new ArrayList<String>();
+        expectedKeys.add("xml.remote.ejbLocalObject");
+        expectedKeys.add("xml.home.ejbLocalObject");
+        expectedKeys.add("xml.localHome.ejbLocalObject");
+        expectedKeys.add("xml.businessLocal.ejbLocalObject");
+        expectedKeys.add("xml.businessRemote.ejbLocalObject");
+
+        validate(FooEJBLocalObject.class, expectedKeys);
+    }
+
+    public void testUnkown() throws Exception {
+
+        List<String> expectedKeys = new ArrayList<String>();
+        expectedKeys.add("xml.remote.unknown");
+        expectedKeys.add("xml.home.unknown");
+        expectedKeys.add("xml.localHome.unknown");
+        expectedKeys.add("xml.local.unknown");
+
+        validate(FooUnknown.class, expectedKeys);
+    }
+
+    public void testBeanClass() throws Exception {
+
+        List<String> expectedKeys = new ArrayList<String>();
+        expectedKeys.add("xml.remote.beanClass");
+        expectedKeys.add("xml.home.beanClass");
+        expectedKeys.add("xml.localHome.beanClass");
+        expectedKeys.add("xml.local.beanClass");
+        expectedKeys.add("xml.businessRemote.beanClass");
+        expectedKeys.add("xml.businessLocal.beanClass");
+
+        validate(FooBean.class, expectedKeys);
+    }
+
+    public void testNotInterface() throws Exception {
+
+        List<String> expectedKeys = new ArrayList<String>();
+        expectedKeys.add("xml.remote.notInterface");
+        expectedKeys.add("xml.home.notInterface");
+        expectedKeys.add("xml.localHome.notInterface");
+        expectedKeys.add("xml.local.notInterface");
+        expectedKeys.add("xml.businessRemote.notInterface");
+        expectedKeys.add("xml.businessLocal.notInterface");
+
+        validate(FooClass.class, expectedKeys);
+    }
+
+    private void validate(Class interfaceClass, List<String> expectedKeys) throws OpenEJBException {
+        Collections.sort(expectedKeys);
+
+        EjbJar ejbJar = new EjbJar();
+        StatelessBean bean = ejbJar.addEnterpriseBean(new StatelessBean(FooBean.class));
+        bean.setHomeAndLocal(interfaceClass, interfaceClass);
+        bean.setHomeAndRemote(interfaceClass, interfaceClass);
+        bean.addBusinessLocal(interfaceClass);
+        bean.addBusinessRemote(interfaceClass);
+
+        try {
+            config.configureApplication(ejbJar);
+            fail("A ValidationFailedException should have been thrown");
+        } catch (ValidationFailedException e) {
+            ValidationFailure[] failures = e.getFailures();
+            List<String> actualKeys = new ArrayList<String>();
+            for (ValidationFailure failure : failures) {
+                actualKeys.add(failure.getMessageKey());
+            }
+
+            Collections.sort(actualKeys);
+
+            String actual = join("\n", actualKeys);
+            String expected = join("\n", expectedKeys);
+
+            assertEquals("Keys do not match", expected, actual);
+
+            // Check for the expected keys
+            for (String key : expectedKeys) {
+                assertTrue("Missing key: "+key, actualKeys.contains(key));
+            }
+
+            assertEquals("Number of failures don't match", expectedKeys.size(), actualKeys.size());
+
+            // Ensure the i18n message is there by checking
+            // the key is not in the getMessage() output
+            for (ValidationFailure failure : e.getFailures()) {
+                String key = failure.getMessageKey();
+
+                for (Integer level : Arrays.asList(1, 2, 3)) {
+                    String message = failure.getMessage(level);
+                    assertFalse("No message text (key=" + key + ", level=" + level + "): " + message, message.contains(key));
+                    assertFalse("Not all parameters substituted (key=" + key + ", level=" + level + "): " + message, message.matches(".*\\{[0-9]\\}.*"));
+                }
+
+            }
+        }
+    }
+
     public void setUp() throws Exception {
         config = new ConfigurationFactory(true);
         ContainerSystemInfo containerSystem = config.getOpenEjbConfiguration().containerSystem;
@@ -85,4 +250,10 @@
     public static interface FooLocal {
     }
 
+    public static interface FooUnknown {
+    }
+
+    public static class FooClass {
+
+    }
 }

Modified: openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SessionBean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SessionBean.java?rev=678642&r1=678641&r2=678642&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SessionBean.java (original)
+++ openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SessionBean.java Mon Jul 21 22:34:09 2008
@@ -361,6 +361,10 @@
         getBusinessLocal().add(businessLocal);
     }
 
+    public void addBusinessLocal(Class businessLocal) {
+        addBusinessLocal(businessLocal.getName());
+    }
+
     public Collection<String> getBusinessRemote() {
         if (businessRemote == null){
             businessRemote = new LinkedHashSet<String>();
@@ -373,6 +377,10 @@
         getBusinessRemote().add(businessRemote);
     }
 
+    public void addBusinessRemote(Class businessRemote) {
+        addBusinessRemote(businessRemote.getName());
+    }
+
     public String getServiceEndpoint() {
         return serviceEndpoint;
     }