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;
}