Author: kmalhi
Date: Wed Jul 21 02:51:58 2010
New Revision: 966073
URL: http://svn.apache.org/viewvc?rev=966073&view=rev
Log:
Updated CheckCallbacks to test for scenario where a class has two or more
overloaded methods, but the method with the wrong signature is annotated with
@Timeout
Commented out keys from Messages.properties and also updated a detailed message
for a key
Added @Timeout tests
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidTimeoutTest.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java?rev=966073&r1=966072&r2=966073&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java
Wed Jul 21 02:51:58 2010
@@ -16,6 +16,7 @@
*/
package org.apache.openejb.config.rules;
+import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
@@ -29,6 +30,7 @@ import javax.ejb.PostActivate;
import javax.ejb.PrePassivate;
import javax.ejb.Remove;
import javax.ejb.SessionSynchronization;
+import javax.ejb.Timeout;
import javax.interceptor.InvocationContext;
import org.apache.openejb.OpenEJBException;
@@ -336,12 +338,24 @@ public class CheckCallbacks extends Vali
if (timeout == null) return;
try {
Method method = getMethod(ejbClass, timeout.getMethodName(),
javax.ejb.Timer.class);
-
- Class<?> returnType = method.getReturnType();
-
- if (!returnType.equals(Void.TYPE)) {
- fail(bean, "timeout.badReturnType", timeout.getMethodName(),
returnType.getName());
+ Annotation[] declaredAnnotations = method.getDeclaredAnnotations();
+ boolean isAnnotated = false;
+ for (Annotation annotation : declaredAnnotations) {
+ if(annotation.equals(Timeout.class)){
+ isAnnotated = true;
+ break;
+ }
+ }
+
+ if (isAnnotated) {
+ Class<?> returnType = method.getReturnType();
+ if (!returnType.equals(Void.TYPE)) {
+ fail(bean, "timeout.badReturnType",
timeout.getMethodName(), returnType.getName());
+ }
+ }else{
+ fail(bean, "timeout.missing.possibleTypo",
timeout.getMethodName(), getMethods(ejbClass, timeout.getMethodName()).size());
}
+
} catch (NoSuchMethodException e) {
List<Method> possibleMethods = getMethods(ejbClass,
timeout.getMethodName());
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties?rev=966073&r1=966072&r2=966073&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
Wed Jul 21 02:51:58 2010
@@ -223,10 +223,11 @@
2.timeout.badReturnType = Timeout method must return 'void': method {0}
returns {1}
3.timeout.badReturnType = Timeout method "{0}" illegally returns {1} instead
of void. Change the method signature to "void {0}(javax.ejb.Timer)"
+#Don't think this is ever going to be used, commenting it out for now. If
there is a case where this key can be used, please uncomment it and write a
test for it
# fail(bean, "timeout.missing", timeout.getMethodName());
-1.timeout.missing = Timeout method missing
-2.timeout.missing = Timeout method missing: "{0}" in class {1}
-3.timeout.missing = Timeout method "{0}" not found in class {1}. The required
method signature is "void {0}(javax.ejb.Timer)"
+#1.timeout.missing = Timeout method missing
+#2.timeout.missing = Timeout method missing: "{0}" in class {1}
+#3.timeout.missing = Timeout method "{0}" not found in class {1}. The
required method signature is "void {0}(javax.ejb.Timer)"
# fail(bean, "timeout.invalidArguments", timeout.getMethodName(),
getParameters(possibleMethods.get(0)));
1.timeout.invalidArguments = Invalid Timeout arguments
@@ -236,7 +237,7 @@
# fail(bean, "timeout.missing.possibleTypo", timeout.getMethodName(),
possibleMethods.size());
1.timeout.missing.possibleTypo = Timeout method missing or invalid
2.timeout.missing.possibleTypo = Timeout method missing or invalid: looked for
"void {0}(javax.ejb.Timer)"
-3.timeout.missing.possibleTypo = Timeout method missing or invalid. There are
{1} methods with the name "{0}" visible, none have the required signature of
"void {0}(javax.ejb.Timer)"
+3.timeout.missing.possibleTypo = Timeout method missing or invalid. There are
{1} methods with the name "{0}" visible, either the wrong one has been
annotated with @Timeout or none have the required signature of "void
{0}(javax.ejb.Timer). A bean should have only one method annotated with
@Timeout and the method signature must match void {0}(javax.ejb.Timer)"
#
fail(componentName,"timeout.tooManyMethods",timeoutMethods.size(),Join.join(",",
timeoutMethods));
1.timeout.tooManyMethods = More than one method annotated with @Timeout
Modified:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidTimeoutTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidTimeoutTest.java?rev=966073&r1=966072&r2=966073&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidTimeoutTest.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidTimeoutTest.java
Wed Jul 21 02:51:58 2010
@@ -26,26 +26,40 @@ import org.junit.runner.RunWith;
@RunWith(ValidationRunner.class)
public class CheckInvalidTimeoutTest extends TestCase {
- @Keys( { @Key(value = "timeout.badReturnType"),
@Key("timeout.invalidArguments"), @Key("timeout.tooManyMethods") })
+ @Keys( { @Key(value = "timeout.badReturnType"),
@Key("timeout.invalidArguments"), @Key("timeout.tooManyMethods") ,
@Key("timeout.missing.possibleTypo")})
public EjbJar test() throws Exception {
System.setProperty("openejb.validation.output.level", "VERBOSE");
EjbJar ejbJar = new EjbJar();
ejbJar.addEnterpriseBean(new StatelessBean(TestBean.class));
ejbJar.addEnterpriseBean(new StatelessBean(FooBean.class));
+ ejbJar.addEnterpriseBean(new StatelessBean(BarBean.class));
return ejbJar;
}
-
+// A case where the class has the method with wrong signature annotated with
@Timeout
+ // timeout.badReturnType
+ // timeout.invalidArguments
public static class TestBean {
@Timeout
public Object bar() {
return null;
}
}
-
+// A case where the class has more than one method annotated with @Timeout
+ // timeout.tooManyMethods
public static class FooBean {
@Timeout
public void foo(javax.ejb.Timer timer) {}
@Timeout
public void bar(javax.ejb.Timer timer) {}
}
-}
\ No newline at end of file
+// A case where the class has overloaded methods, but the method with the
wrong signature has been annotated with @Timeout
+ // timeout.missing.possibleTypo
+ public static class BarBean {
+
+ public void foo(javax.ejb.Timer timer) {}
+
+ @Timeout
+ public void foo() {}
+ }
+
+}