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/17 07:32:24 UTC
svn commit: r677503 - in /openejb/trunk/openejb3/container/openejb-core/src:
main/java/org/apache/openejb/assembler/classic/
main/java/org/apache/openejb/config/
main/java/org/apache/openejb/config/rules/
main/java/org/apache/openejb/util/ main/resourc...
Author: dblevins
Date: Wed Jul 16 22:32:23 2008
New Revision: 677503
URL: http://svn.apache.org/viewvc?rev=677503&view=rev
Log:
OPENEJB-859: Improved validation for <home>, <remote>, <local-home>, <local>, <business-local> and <business-remote> elements
Rewrote this validation completely to be more aggressive in figuring out what the user might have intended to do.
Added:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java
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/util/Strings.java
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?rev=677503&r1=677502&r2=677503&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java Wed Jul 16 22:32:23 2008
@@ -29,6 +29,7 @@
import org.apache.openejb.spi.ContainerSystem;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
+import org.apache.openejb.util.Strings;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.core.ivm.naming.BusinessLocalReference;
@@ -126,21 +127,10 @@
this.type = type;
this.annotatedName = annotatedName;
this.xmlName = xmlName;
- this.xmlNameCc = camelCase(xmlName);
+ this.xmlNameCc = Strings.camelCase(xmlName);
this.openejbLegacy = openejbLegacy;
}
- private String camelCase(String string){
- StringBuilder sb = new StringBuilder();
- String[] strings = string.split("-");
- for (String s : strings) {
- int l = sb.length();
- sb.append(s);
- sb.setCharAt(l, Character.toUpperCase(sb.charAt(l)));
- }
- return sb.toString();
- }
-
public InterfaceType getType() {
return type;
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java?rev=677503&r1=677502&r2=677503&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java Wed Jul 16 22:32:23 2008
@@ -36,6 +36,10 @@
}
}
+ public String getMessageKey(){
+ return message;
+ }
+
public Object[] getDetails() {
return details;
}
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=677503&r1=677502&r2=677503&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 Wed Jul 16 22:32:23 2008
@@ -24,12 +24,15 @@
import org.apache.openejb.jee.Interceptor;
import org.apache.openejb.config.EjbModule;
import org.apache.openejb.util.SafeToolkit;
+import org.apache.openejb.util.Strings;
import org.apache.xbean.finder.ClassFinder;
import javax.ejb.EJBLocalHome;
import javax.ejb.EJBLocalObject;
import javax.ejb.EJBHome;
import javax.ejb.EJBObject;
+import javax.ejb.Local;
+import javax.ejb.Remote;
import javax.jws.WebService;
import static java.lang.reflect.Modifier.isAbstract;
import java.lang.reflect.Method;
@@ -69,38 +72,40 @@
public void validate(EjbModule ejbModule) {
for (EnterpriseBean bean : ejbModule.getEjbJar().getEnterpriseBeans()) {
try {
- check_hasEjbClass(bean);
+ Class<?> beanClass = check_hasEjbClass(bean);
if (!(bean instanceof RemoteBean)) continue;
RemoteBean b = (RemoteBean) bean;
check_isEjbClass(b);
- check_hasDependentClasses(b, b.getEjbClass(), "<ejb-class>");
+ check_hasDependentClasses(b, b.getEjbClass(), "ejb-class");
check_hasInterface(b);
+
+ if (b.getRemote() != null){
+ checkInterface(b, beanClass, "remote", b.getRemote());
+ }
+
if (b.getHome() != null) {
- check_hasHomeClass(b);
- check_hasRemoteClass(b);
- check_isHomeInterface(b);
- check_isRemoteInterface(b);
- check_hasDependentClasses(b, b.getHome(), "<home>");
- check_hasDependentClasses(b, b.getRemote(), "<remote>");
+ checkInterface(b, beanClass, "home", b.getHome());
+ }
+
+ if (b.getLocal() != null) {
+ checkInterface(b, beanClass, "local", b.getLocal());
}
+
if (b.getLocalHome() != null) {
- check_hasLocalHomeClass(b);
- check_hasLocalClass(b);
- check_isLocalHomeInterface(b);
- check_isLocalInterface(b);
- check_hasDependentClasses(b, b.getLocalHome(), "<local-home>");
- check_hasDependentClasses(b, b.getLocal(), "<local>");
+ checkInterface(b, beanClass, "local-home", b.getLocalHome());
}
if (b instanceof SessionBean) {
SessionBean sessionBean = (SessionBean) b;
+
for (String interfce : sessionBean.getBusinessLocal()) {
- check_businessInterface(sessionBean, interfce, "<business-local>");
+ checkInterface(b, beanClass, "business-local", interfce);
}
+
for (String interfce : sessionBean.getBusinessRemote()) {
- check_businessInterface(sessionBean, interfce, "<business-remote>");
+ checkInterface(b, beanClass, "business-local", interfce);
}
}
} catch (RuntimeException e) {
@@ -113,35 +118,30 @@
}
}
- private void check_businessInterface(SessionBean b, String interfaceName, String tagName) {
- String ejbName = b.getEjbName();
- Class<?> interfce = lookForClass(interfaceName, tagName, b.getEjbName());
+ private void checkInterface(RemoteBean b, Class<?> beanClass, String tag, String className) {
+ Class<?> interfce = lookForClass(className, tag, b.getEjbName());
- if (!interfce.isInterface()){
- fail(b, "notAnInterface", interfce.getName(), tagName);
- }
+ if (interfce == null) return;
+
+ check_hasDependentClasses(b, className, tag);
+
+ tag = Strings.lcfirst(Strings.camelCase(tag));
+
+ if (isValidInterface(b, interfce, beanClass, tag));
ClassFinder finder = new ClassFinder(interfce);
for (Class<? extends Annotation> annotation : beanOnlyAnnotations) {
+
if (interfce.isAnnotationPresent(annotation)){
warn(b, "interface.beanOnlyAnnotation", annotation.getSimpleName(), interfce.getName(), b.getEjbClass());
}
+
for (Method method : finder.findAnnotatedMethods(annotation)) {
warn(b, "interfaceMethod.beanOnlyAnnotation", annotation.getSimpleName(), interfce.getName(), method.getName(), b.getEjbClass());
}
}
- if (EJBHome.class.isAssignableFrom(interfce)){
- fail(ejbName, "xml.businessRemoteOrLocal.ejbHome", tagName, interfce.getName());
- } else if (EJBObject.class.isAssignableFrom(interfce)){
- fail(ejbName, "xml.businessRemoteOrLocal.ejbObject", tagName, interfce.getName());
- } else if (EJBLocalHome.class.isAssignableFrom(interfce)) {
- fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalHome", tagName, interfce.getName());
- } else if (EJBLocalObject.class.isAssignableFrom(interfce)){
- fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalObject", tagName, interfce.getName());
- }
-
}
private void check_hasInterface(RemoteBean b) {
@@ -187,7 +187,8 @@
# 2 - Element (home, ejb-class, remote)
# 3 - Bean name
*/
- fail(b, "missing.dependent.class", className, e.getMessage(), type, b.getEjbName());
+ String missingClass = e.getMessage();
+ fail(b, "missing.dependent.class", className, missingClass, type, b.getEjbName());
} catch (NoClassDefFoundError e) {
/*
# 0 - Referring Class name
@@ -195,19 +196,12 @@
# 2 - Element (home, ejb-class, remote)
# 3 - Bean name
*/
- fail(b, "missing.dependent.class", className, e.getMessage(), type, b.getEjbName());
+ String missingClass = e.getMessage();
+ fail(b, "missing.dependent.class", className, missingClass, type, b.getEjbName());
}
}
- private void check_hasLocalClass(RemoteBean b) {
- lookForClass(b.getLocal(), "<local>", b.getEjbName());
- }
-
- private void check_hasLocalHomeClass(RemoteBean b) {
- lookForClass(b.getLocalHome(), "<local-home>", b.getEjbName());
- }
-
- public void check_hasEjbClass(EnterpriseBean b) {
+ public Class<?> check_hasEjbClass(EnterpriseBean b) {
String ejbName = b.getEjbName();
@@ -217,32 +211,22 @@
fail(ejbName, "interfaceDeclaredAsBean", beanClass.getName());
}
- if (isCmp(b)) return;
+ if (isCmp(b)) return beanClass;
if (isAbstract(beanClass.getModifiers())){
fail(ejbName, "abstractDeclaredAsBean", beanClass.getName());
}
- }
-
- public void check_hasInterceptorClass(Interceptor i) {
-
- lookForClass(i.getInterceptorClass(), "<interceptor-class>", "Interceptor");
+ return beanClass;
}
- public void check_hasHomeClass(RemoteBean b) {
+ private void check_hasInterceptorClass(Interceptor i) {
- lookForClass(b.getHome(), "<home>", b.getEjbName());
+ lookForClass(i.getInterceptorClass(), "interceptor-class", "Interceptor");
}
- public void check_hasRemoteClass(RemoteBean b) {
-
- lookForClass(b.getRemote(), "<remote>", b.getEjbName());
-
- }
-
- public void check_isEjbClass(RemoteBean b) {
+ private void check_isEjbClass(RemoteBean b) {
if (b instanceof SessionBean) {
@@ -258,26 +242,6 @@
}
- private void check_isLocalInterface(RemoteBean b) {
- compareTypes(b, b.getLocal(), EJBLocalObject.class);
- }
-
- private void check_isLocalHomeInterface(RemoteBean b) {
- compareTypes(b, b.getLocalHome(), EJBLocalHome.class);
- }
-
- public void check_isHomeInterface(RemoteBean b) {
-
- compareTypes(b, b.getHome(), javax.ejb.EJBHome.class);
-
- }
-
- public void check_isRemoteInterface(RemoteBean b) {
-
- compareTypes(b, b.getRemote(), javax.ejb.EJBObject.class);
-
- }
-
private Class<?> lookForClass(String clazz, String type, String ejbName) {
try {
return loadClass(clazz);
@@ -305,6 +269,63 @@
return null;
}
+ private boolean isValidInterface(RemoteBean b, Class clazz, Class beanClass, String tag) {
+
+ if (clazz.equals(beanClass)) {
+
+ fail(b, "xml." + tag + ".beanClass", clazz.getName());
+
+ } else if (!clazz.isInterface()) {
+
+ fail(b, "xml." + tag + ".notInterface", clazz.getName());
+
+ } else if (EJBHome.class.isAssignableFrom(clazz)) {
+
+ if (tag.equals("home")) return true;
+
+ fail(b, "xml." + tag + ".ejbHome", clazz.getName());
+
+ } else if (EJBLocalHome.class.isAssignableFrom(clazz)) {
+
+ if (tag.equals("local-home")) return true;
+
+ fail(b, "xml." + tag + ".ejbLocalHome", clazz.getName());
+
+ } else if (EJBObject.class.isAssignableFrom(clazz)) {
+
+ if (tag.equals("remote")) return true;
+
+ fail(b, "xml." + tag + ".ejbObject", clazz.getName());
+
+ } else if (EJBLocalObject.class.isAssignableFrom(clazz)) {
+
+ if (tag.equals("local")) return true;
+
+ fail(b, "xml." + tag + ".ejbLocalObject", clazz.getName());
+
+ } else if (tag.equals("businessLocal") && tag.equals("businessRemote")) {
+
+ return true;
+ }
+
+ // must be tagged as <home>, <local-home>, <remote>, or <local>
+ if (clazz.isAnnotationPresent(Local.class)) {
+
+ fail(b, "xml." + tag + ".businessLocal", clazz.getName());
+
+ } else if (clazz.isAnnotationPresent(Remote.class)) {
+
+ fail(b, "xml." + tag + ".businessRemote", clazz.getName());
+
+ } else {
+
+ fail(b, "xml." + tag + ".unknown", clazz.getName());
+
+ }
+
+ return false;
+ }
+
private void compareTypes(RemoteBean b, String clazz1, Class<?> class2) {
Class<?> class1 = null;
try {
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java?rev=677503&r1=677502&r2=677503&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java Wed Jul 16 22:32:23 2008
@@ -70,4 +70,15 @@
return sb.toString();
}
+ public static String camelCase(String string){
+ StringBuilder sb = new StringBuilder();
+ String[] strings = string.split("-");
+ for (String s : strings) {
+ int l = sb.length();
+ sb.append(s);
+ sb.setCharAt(l, Character.toUpperCase(sb.charAt(l)));
+ }
+ return sb.toString();
+ }
+
}
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=677503&r1=677502&r2=677503&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 16 22:32:23 2008
@@ -47,7 +47,7 @@
# 2 - Bean name
1.missing.class Missing class
2.missing.class Missing class {0}
-3.missing.class The class {0} not found. Check that the class specified in the {1} element for bean {2} is spelled correctly and the class is present in the jar
+3.missing.class The class {0} not found. Check that the class specified in the <{1}> element for bean {2} is spelled correctly and the class is present in the jar
# 0 - Class name
# 1 - EJB Class name
@@ -125,9 +125,10 @@
# 1 - Dependent Class name
# 2 - Element (home, ejb-class, remote)
# 3 - Bean name
+# fail(b, "missing.dependent.class", className, missingClass, type, b.getEjbName());
1.missing.dependent.class Missing dependent class or library
-2.missing.dependent.class Missing dependent class or library: {1} needed by {2}
-3.missing.dependent.class The class {1} not found and is referenced by the {2} class {0}. The Check that the class or related library is available in the classpath
+2.missing.dependent.class Missing dependent class or library: {1} needed by {0}
+3.missing.dependent.class The class {1} not found and is referenced by the <{2}> class {0}. The Check that the class or related library is available in the classpath
# CheckAssemblyBindings.java
@@ -304,26 +305,6 @@
2.ann.remoteOrLocal.ejbLocalObject = @{0} used in bean class lists a javax.ejb.EJBLocalObject interface. Use @LocalHome with home interface of "{1}".
3.ann.remoteOrLocal.ejbLocalObject = When applied to a bean class, the @{0} annotation must only list business interfaces and cannot list legacy EJBLocalObject interfaces. The EJBLocalHome of interface for "{1}" can be annotated on the bean class with @LocalHome
-# fail(ejbName, "xml.businessRemoteOrLocal.ejbHome", tagName, interfce.getName());
-1.xml.businessRemoteOrLocal.ejbHome = javax.ejb.EJBHome interface declared as {0}.
-2.xml.businessRemoteOrLocal.ejbHome = javax.ejb.EJBHome interface declared as {0}. Use <home>{1}</home>
-3.xml.businessRemoteOrLocal.ejbHome = Interfaces extending javax.ejb.EJBHome pre-date the concept of EJB 3.0 simplified business interfaces and must not use the {0} tag when declared in the ejb-jar.xml. Declare this interface as <home>{1}</home>.
-
-# fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalHome", tagName, interfce.getName());
-1.xml.businessRemoteOrLocal.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as {0}.
-2.xml.businessRemoteOrLocal.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as {0}. Use <local-home>{1}</local-home>
-3.xml.businessRemoteOrLocal.ejbLocalHome = Interfaces extending javax.ejb.EJBLocalHome pre-date the concept of EJB 3.0 simplified business interfaces and must not use the {0} tag when declared in the ejb-jar.xml. Declare this interface as <local-home>{1}</local-home>.
-
-# fail(ejbName, "xml.businessRemoteOrLocal.ejbObject", tagName, interfce.getName());
-1.xml.businessRemoteOrLocal.ejbObject = javax.ejb.EJBObject interface declared as {0}.
-2.xml.businessRemoteOrLocal.ejbObject = javax.ejb.EJBObject interface declared as {0}. Use <remote>{1}</remote>
-3.xml.businessRemoteOrLocal.ejbObject = Interfaces extending javax.ejb.EJBObject pre-date the concept of EJB 3.0 simplified business interfaces and must not use the {0} tag when declared in the ejb-jar.xml. Declare this interface as <remote>{1}</remote>.
-
-# fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalObject", tagName, interfce.getName());
-1.xml.businessRemoteOrLocal.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as {0}.
-2.xml.businessRemoteOrLocal.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as {0}. Use <local>{1}</local>
-3.xml.businessRemoteOrLocal.ejbLocalObject = Interfaces extending javax.ejb.EJBLocalObject pre-date the concept of EJB 3.0 simplified business interfaces and must not use the {0} tag when declared in the ejb-jar.xml. Declare this interface as <local>{1}</local>.
-
# warn(bean, "ignoredStatefulAnnotation", annotationType, beanType, methodName);
1.ignoredStatefulAnnotation = @{0} is ignored for beans of type {1}
2.ignoredStatefulAnnotation = @{0} is ignored for beans of type {1}. Method: {2}
@@ -524,11 +505,6 @@
Which can then be implemented by the {0} class.\
-# fail(b, "notAnInterface", interfce.getName(), tagName);
-1.notAnInterface = Business remotes and locals must be interfaces.
-2.notAnInterface = Class tagged as {1} is not an interface: {0}
-3.notAnInterface = All business remote and business local views must be java interfaces. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related {1} xml tag from your ejb-jar.xml.
-
# fail(ejbName, "ann.notAnInterface", annotationName, interfce.getName());
1.ann.notAnInterface = @{0} lists a non-interface.
2.ann.notAnInterface = @{0} lists a non-interface: {1}
@@ -574,3 +550,195 @@
2.ann.invalidConcurrencyAttribute = Ignoring {0} invalid @Lock annotations. Bean not using Container-Managed Concurrencys.
3.ann.invalidConcurrencyAttribute = The @Lock annotation applies only to beans using Container-Managed Concurrencys. Beans marked as @ConcurrencyManagement(BEAN) are responsible for thier own concurrency and may not use the @Lock annotation. There are {0} such invalid annotations in the bean class that will be ignored and should be removed.
+
+1.xml.home.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <home>. Use <local-home>{0}</local-home>
+2.xml.home.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <home>. Use <local-home>{0}</local-home>
+3.xml.home.ejbLocalHome = The <home> element is for interfaces extending javax.ejb.EJBHome. The interface supplied is a javax.ejb.EJBLocalHome and should be declared with the <local-home> element as in: <local-home>{0}</local-home>
+
+1.xml.home.ejbObject = javax.ejb.EJBObject interface declared as <home>. Use <remote>{0}</remote>
+2.xml.home.ejbObject = javax.ejb.EJBObject interface declared as <home>. Use <remote>{0}</remote>
+3.xml.home.ejbObject = The <home> element is for interfaces extending javax.ejb.EJBHome. The interface supplied is a javax.ejb.EJBObject and should be declared with the <remote> element as in: <remote>{0}</remote>
+
+1.xml.home.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <home>. Use <local>{0}</local>
+2.xml.home.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <home>. Use <local>{0}</local>
+3.xml.home.ejbLocalObject = The <home> element is for interfaces extending javax.ejb.EJBHome. The interface supplied is a javax.ejb.EJBLocalObject and should be declared with the <local> element as in: <local>{0}</local>
+
+1.xml.home.businessLocal = EJB 3.0 business interface declared as <home>. Use <business-local>{0}</business-local>
+2.xml.home.businessLocal = EJB 3.0 business interface declared as <home>. Use <business-local>{0}</business-local>
+3.xml.home.businessLocal = The <home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBHome. EJB 3.0 simplified business interfaces can be decalred via <business-local>{0}</business-local> or via the @Remote annotation on the bean class or interface class.
+
+1.xml.home.businessRemote = EJB 3.0 business interface declared as <home>. Use <business-remote>{0}</business-remote>
+2.xml.home.businessRemote = EJB 3.0 business interface declared as <home>. Use <business-remote>{0}</business-remote>
+3.xml.home.businessRemote = The <home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBHome. EJB 3.0 simplified business interfaces can be decalred via <business-remote>{0}</business-remote> or via the @Remote annotation on the bean class or interface class.
+
+1.xml.home.beanClass = Bean class mistakenly declared as <home>
+2.xml.home.beanClass = Bean class mistakenly declared as <home>
+3.xml.home.beanClass = The <home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBHome. The bean class cannot be used as a home interface.
+
+1.xml.home.notInterface = The value of <home> is not an interface
+2.xml.home.notInterface = The value of <home> is not an interface: {0}
+3.xml.home.notInterface = The <home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBHome. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related <home> xml tag from your ejb-jar.xml
+
+1.xml.home.unknown = The value of <home> must be an interface extending javax.ejb.EJBHome
+2.xml.home.unknown = The value of <home> must be an interface extending javax.ejb.EJBHome
+3.xml.home.unknown = The <home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBHome. If this interface is intended to be an EJB 3.0 business remote view, declare this interface as <business-remote>{0}</business-remote> or via the @Remote annotation on the bean class or interface class.
+
+
+
+1.xml.remote.ejbHome = javax.ejb.EJBHome interface declared as <remote>. Use <home>{0}</home>
+2.xml.remote.ejbHome = javax.ejb.EJBHome interface declared as <remote>. Use <home>{0}</home>
+3.xml.remote.ejbHome = The <remote> element is for interfaces extending javax.ejb.EJBObject. The interface supplied is a javax.ejb.EJBHome and should be declared with the <home> element as in: <home>{0}</home>
+
+1.xml.remote.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <remote>. Use <local-home>{0}</local-home>
+2.xml.remote.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <remote>. Use <local-home>{0}</local-home>
+3.xml.remote.ejbLocalHome = The <remote> element is for interfaces extending javax.ejb.EJBHome. The interface supplied is a javax.ejb.EJBLocalHome and should be declared with the <local-home> element as in: <local-home>{0}</local-home>
+
+1.xml.remote.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <remote>. Use <local>{0}</local>
+2.xml.remote.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <remote>. Use <local>{0}</local>
+3.xml.remote.ejbLocalObject = The <remote> element is for interfaces extending javax.ejb.EJBObject. The interface supplied is a javax.ejb.EJBLocalObject and should be declared with the <local> element as in: <local>{0}</local>
+
+# must be attempting an override
+1.xml.remote.businessLocal = EJB 3.0 business interface declared as <remote>. Use <business-remote>{0}</business-remote>
+2.xml.remote.businessLocal = EJB 3.0 business interface declared as <remote>. Use <business-remote>{0}</business-remote>
+3.xml.remote.businessLocal = The <remote> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBObject. EJB 3.0 simplified business interfaces can be decalred via <business-local>{0}</business-local> or via the @Remote annotation on the bean class or interface class.
+
+1.xml.remote.businessRemote = EJB 3.0 business interface declared as <remote>. Use <business-remote>{0}</business-remote>
+2.xml.remote.businessRemote = EJB 3.0 business interface declared as <remote>. Use <business-remote>{0}</business-remote>
+3.xml.remote.businessRemote = The <remote> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBObject. EJB 3.0 simplified business interfaces can be decalred via <business-remote>{0}</business-remote> or via the @Remote annotation on the bean class or interface class.
+
+1.xml.remote.beanClass = Bean class mistakenly declared as <remote>
+2.xml.remote.beanClass = Bean class mistakenly declared as <remote>
+3.xml.remote.beanClass = The <remote> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBObject. The bean class cannot be used as a home interface.
+
+1.xml.remote.notInterface = The value of <remote> is not an interface
+2.xml.remote.notInterface = The value of <remote> is not an interface: {0}
+3.xml.remote.notInterface = The <remote> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBObject. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related <remote> xml tag from your ejb-jar.xml
+
+1.xml.remote.unknown = The value of <remote> must be an interface extending javax.ejb.EJBObject
+2.xml.remote.unknown = The value of <remote> must be an interface extending javax.ejb.EJBObject
+3.xml.remote.unknown = The <remote> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBObject. If this interface is intended to be an EJB 3.0 business remote view, declare this interface as <business-remote>{0}</business-remote> or via the @Remote annotation on the bean class or interface class.
+
+
+
+
+1.xml.localHome.ejbHome = javax.ejb.EJBHome interface declared as <local-home>. Use <home>{0}</home>
+2.xml.localHome.ejbHome = javax.ejb.EJBHome interface declared as <local-home>. Use <home>{0}</home>
+3.xml.localHome.ejbHome = The <local-home> element is for interfaces extending javax.ejb.EJBLocalHome. The interface supplied is a javax.ejb.EJBHome and should be declared with the <home> element as in: <home>{0}</home>
+
+1.xml.localHome.ejbObject = javax.ejb.EJBObject interface declared as <local-home>. Use <remote>{0}</remote>
+2.xml.localHome.ejbObject = javax.ejb.EJBObject interface declared as <local-home>. Use <remote>{0}</remote>
+3.xml.localHome.ejbObject = The <local-home> element is for interfaces extending javax.ejb.EJBLocalHome. The interface supplied is a javax.ejb.EJBObject and should be declared with the <remote> element as in: <remote>{0}</remote>
+
+1.xml.localHome.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <local-home>. Use <local>{0}</local>
+2.xml.localHome.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <local-home>. Use <local>{0}</local>
+3.xml.localHome.ejbLocalObject = The <local-home> element is for interfaces extending javax.ejb.EJBLocalHome. The interface supplied is a javax.ejb.EJBLocalObject and should be declared with the <local> element as in: <local>{0}</local>
+
+1.xml.localHome.businessLocal = EJB 3.0 business interface declared as <local-home>. Use <business-local>{0}</business-local>
+2.xml.localHome.businessLocal = EJB 3.0 business interface declared as <local-home>. Use <business-local>{0}</business-local>
+3.xml.localHome.businessLocal = The <local-home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. EJB 3.0 simplified business interfaces can be decalred via <business-local>{0}</business-local> or via the @Remote annotation on the bean class or interface class.
+
+1.xml.localHome.businessRemote = EJB 3.0 business interface declared as <local-home>. Use <business-remote>{0}</business-remote>
+2.xml.localHome.businessRemote = EJB 3.0 business interface declared as <local-home>. Use <business-remote>{0}</business-remote>
+3.xml.localHome.businessRemote = The <local-home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. EJB 3.0 simplified business interfaces can be decalred via <business-remote>{0}</business-remote> or via the @Remote annotation on the bean class or interface class.
+
+1.xml.localHome.beanClass = Bean class mistakenly declared as <local-home>
+2.xml.localHome.beanClass = Bean class mistakenly declared as <local-home>
+3.xml.localHome.beanClass = The <local-home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. The bean class cannot be used as a home interface.
+
+1.xml.localHome.notInterface = The value of <local-home> is not an interface
+2.xml.localHome.notInterface = The value of <local-home> is not an interface: {0}
+3.xml.localHome.notInterface = The <local-home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related <local-home> xml tag from your ejb-jar.xml
+
+1.xml.localHome.unknown = The value of <local-home> must be an interface extending javax.ejb.EJBLocalHome
+2.xml.localHome.unknown = The value of <local-home> must be an interface extending javax.ejb.EJBLocalHome
+3.xml.localHome.unknown = The <local-home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. If this interface is intended to be an EJB 3.0 business local view, declare this interface as <business-local>{0}</business-local> or via the @Local annotation on the bean class or interface class.
+
+
+
+
+1.xml.local.ejbHome = javax.ejb.EJBHome interface declared as <local>. Use <home>{0}</home>
+2.xml.local.ejbHome = javax.ejb.EJBHome interface declared as <local>. Use <home>{0}</home>
+3.xml.local.ejbHome = The <local> element is for interfaces extending javax.ejb.EJBLocalObject. The interface supplied is a javax.ejb.EJBHome and should be declared with the <home> element as in: <home>{0}</home>
+
+1.xml.local.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <local>. Use <local-home>{0}</local-home>
+2.xml.local.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <local>. Use <local-home>{0}</local-home>
+3.xml.local.ejbLocalHome = The <local> element is for interfaces extending javax.ejb.EJBLocalObject. The interface supplied is a javax.ejb.EJBLocalHome and should be declared with the <local-home> element as in: <local-home>{0}</local-home>
+
+1.xml.local.ejbObject = javax.ejb.EJBObject interface declared as <local>. Use <remote>{0}</remote>
+2.xml.local.ejbObject = javax.ejb.EJBObject interface declared as <local>. Use <remote>{0}</remote>
+3.xml.local.ejbObject = The <local> element is for interfaces extending javax.ejb.EJBLocalObject. The interface supplied is a javax.ejb.EJBObject and should be declared with the <remote> element as in: <remote>{0}</remote>
+
+1.xml.local.businessLocal = EJB 3.0 business interface declared as <local>. Use <business-local>{0}</business-local>
+2.xml.local.businessLocal = EJB 3.0 business interface declared as <local>. Use <business-local>{0}</business-local>
+3.xml.local.businessLocal = The <local> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalObject. EJB 3.0 simplified business interfaces can be decalred via <business-local>{0}</business-local> or via the @Remote annotation on the bean class or interface class.
+
+# must be attempting an override
+1.xml.local.businessRemote = EJB 3.0 business interface declared as <local>. Use <business-local>{0}</business-local>
+2.xml.local.businessRemote = EJB 3.0 business interface declared as <local>. Use <business-local>{0}</business-local>
+3.xml.local.businessRemote = The <local> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalObject. EJB 3.0 simplified business interfaces can be decalred via <business-remote>{0}</business-remote> or via the @Remote annotation on the bean class or interface class.
+
+1.xml.local.beanClass = Bean class mistakenly declared as <local>
+2.xml.local.beanClass = Bean class mistakenly declared as <local>
+3.xml.local.beanClass = The <local> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalObject. The bean class cannot be used as a home interface.
+
+1.xml.local.notInterface = The value of <local> is not an interface
+2.xml.local.notInterface = The value of <local> is not an interface: {0}
+3.xml.local.notInterface = The <local> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalObject. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related <local> xml tag from your ejb-jar.xml
+
+1.xml.local.unknown = The value of <local> must be an interface extending javax.ejb.EJBLocalObject
+2.xml.local.unknown = The value of <local> must be an interface extending javax.ejb.EJBLocalObject. Perhaps you meant to use <business-local>{0}</business-local>
+3.xml.local.unknown = The <local> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalObject. If this interface is intended to be an EJB 3.0 business local view, declare this interface as <business-local>{0}</business-local> or via the @Local annotation on the bean class or interface class.
+
+
+
+
+1.xml.businessRemote.ejbHome = javax.ejb.EJBHome interface declared as <business-remote>. Use <home>{0}</home>
+2.xml.businessRemote.ejbHome = javax.ejb.EJBHome interface declared as <business-remote>. Use <home>{0}</home>
+3.xml.businessRemote.ejbHome = Interfaces extending javax.ejb.EJBHome must use the <home> tag, not the <business-remote> tag, when declared in the ejb-jar.xml. Declare this interface as <home>{0}</home> or alternatively add @RemoteHome({0}.class) to the top of your bean class.
+
+1.xml.businessRemote.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <business-remote>. Use <local-home>{0}</local-home>
+2.xml.businessRemote.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <business-remote>. Use <local-home>{0}</local-home>
+3.xml.businessRemote.ejbLocalHome = Interfaces extending javax.ejb.EJBLocalHome must use the <local-home> tag, not the <business-remote> tag, when declared in the ejb-jar.xml. Declare this interface as <local-home>{0}</local-home> or alternatively add @LocalHome({0}.class) to the top of your bean class.
+
+1.xml.businessRemote.ejbObject = javax.ejb.EJBObject interface declared as <business-remote>. Use <remote>{0}</remote>
+2.xml.businessRemote.ejbObject = javax.ejb.EJBObject interface declared as <business-remote>. Use <remote>{0}</remote>
+3.xml.businessRemote.ejbObject = Interfaces extending javax.ejb.EJBObject must use the <remote> tag, not the <business-remote> tag, when declared in the ejb-jar.xml. Declare this interface as <remote>{0}</remote>.
+
+1.xml.businessRemote.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <business-remote>. Use <local>{0}</local>
+2.xml.businessRemote.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <business-remote>. Use <local>{0}</local>
+3.xml.businessRemote.ejbLocalObject = Interfaces extending javax.ejb.EJBLocalObject must use the <local> tag, not the <business-remote> tag, when declared in the ejb-jar.xml. Declare this interface as <local>{0}</local>.
+
+1.xml.businessRemote.beanClass = Bean class mistakenly declared as <business-remote>
+2.xml.businessRemote.beanClass = Bean class mistakenly declared as <business-remote>
+3.xml.businessRemote.beanClass = The bean class cannot itself cannot be used as the value of the <business-remote> element of the ejb-jar.xml. Either list a valid java interface or delete this element and annotate the intended interface with the @Remote annotation.
+
+1.xml.businessRemote.notInterface = The value of <business-remote> is not an interface
+2.xml.businessRemote.notInterface = The value of <business-remote> is not an interface: {0}
+3.xml.businessRemote.notInterface = The <business-remote> element of the ejb-jar.xml must be an interface. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related <business-remote> xml tag from your ejb-jar.xml
+
+
+
+
+1.xml.businessLocal.ejbHome = javax.ejb.EJBHome interface declared as <business-local>. Use <home>{0}</home>
+2.xml.businessLocal.ejbHome = javax.ejb.EJBHome interface declared as <business-local>. Use <home>{0}</home>
+3.xml.businessLocal.ejbHome = Interfaces extending javax.ejb.EJBHome must use the <home> tag, not the <business-local> tag, when declared in the ejb-jar.xml. Declare this interface as <home>{0}</home> or alternatively add @RemoteHome({0}.class) to the top of your bean class.
+
+1.xml.businessLocal.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <business-local>. Use <local-home>{0}</local-home>
+2.xml.businessLocal.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <business-local>. Use <local-home>{0}</local-home>
+3.xml.businessLocal.ejbLocalHome = Interfaces extending javax.ejb.EJBLocalHome must use the <local-home> tag, not the <business-local> tag, when declared in the ejb-jar.xml. Declare this interface as <local-home>{0}</local-home> or alternatively add @LocalHome({0}.class) to the top of your bean class.
+
+1.xml.businessLocal.ejbObject = javax.ejb.EJBObject interface declared as <business-local>. Use <remote>{0}</remote>
+2.xml.businessLocal.ejbObject = javax.ejb.EJBObject interface declared as <business-local>. Use <remote>{0}</remote>
+3.xml.businessLocal.ejbObject = Interfaces extending javax.ejb.EJBObject must use the <remote> tag, not the <business-local> tag, when declared in the ejb-jar.xml. Declare this interface as <remote>{0}</remote>.
+
+1.xml.businessLocal.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <business-local>. Use <local>{0}</local>
+2.xml.businessLocal.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <business-local>. Use <local>{0}</local>
+3.xml.businessLocal.ejbLocalObject = Interfaces extending javax.ejb.EJBLocalObject must use the <local> tag, not the <business-local> tag, when declared in the ejb-jar.xml. Declare this interface as <local>{0}</local>.
+
+1.xml.businessLocal.beanClass = Bean class mistakenly declared as <business-local>
+2.xml.businessLocal.beanClass = Bean class mistakenly declared as <business-local>
+3.xml.businessLocal.beanClass = The bean class cannot itself cannot be used as the value of the <business-local> element of the ejb-jar.xml. Either 1) list a valid java interface or 2) delete this element and annotate the intended interface with the @Local annotation.
+
+1.xml.businessLocal.notInterface = The value of <business-local> is not an interface
+2.xml.businessLocal.notInterface = The value of <business-local> is not an interface: {0}
+3.xml.businessLocal.notInterface = The <business-local> element of the ejb-jar.xml must be an interface. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related <business-local> xml tag from your ejb-jar.xml
Added: 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=677503&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java Wed Jul 16 22:32:23 2008
@@ -0,0 +1,88 @@
+/**
+ * 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.config.rules;
+
+import junit.framework.TestCase;
+import org.apache.openejb.assembler.classic.ContainerSystemInfo;
+import org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.config.ValidationFailedException;
+import org.apache.openejb.config.ValidationFailure;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.StatelessBean;
+
+import javax.ejb.EJBHome;
+import javax.ejb.EJBLocalHome;
+import javax.ejb.EJBLocalObject;
+import javax.ejb.EJBObject;
+import javax.ejb.Local;
+import javax.ejb.Remote;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class InvalidInterfacesTest extends TestCase {
+ private ConfigurationFactory config;
+
+ public void testBadHomeAndLocal() 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);
+
+ try {
+ config.configureApplication(ejbJar);
+ } catch (ValidationFailedException e) {
+ for (ValidationFailure failure : e.getFailures()) {
+ System.out.println("failure = " + failure.getMessageKey());
+ }
+ }
+
+ }
+
+ public void setUp() throws Exception {
+ config = new ConfigurationFactory(true);
+ ContainerSystemInfo containerSystem = config.getOpenEjbConfiguration().containerSystem;
+ containerSystem.containers.add(config.configureService(StatelessSessionContainerInfo.class));
+ }
+
+ public static class FooBean {
+
+ }
+
+ public static interface FooEJBHome extends EJBHome {
+ }
+
+ public static interface FooEJBObject extends EJBObject {
+ }
+
+ public static interface FooEJBLocalHome extends EJBLocalHome {
+ }
+
+ public static interface FooEJBLocalObject extends EJBLocalObject {
+ }
+
+ @Remote
+ public static interface FooRemote {
+ }
+
+ @Local
+ public static interface FooLocal {
+ }
+
+}
Re: svn commit: r677503 - in /openejb/trunk/openejb3/container/openejb-core/src: main/java/org/apache/openejb/assembler/classic/ main/java/org/apache/openejb/config/ main/java/org/apache/openejb/config/rules/ main/java/org/apache/openejb/util/ main/resourc...
Posted by David Blevins <da...@visi.com>.
Fixed! Sorry about that.
Improving the test case while where at it.
-David
On Jul 17, 2008, at 10:58 AM, David Blevins wrote:
> Whoops! Fixing.
>
> -David
>
> On Jul 17, 2008, at 6:02 AM, Rick McGuire wrote:
>
>> David,
>>
>> I'm now getting tons of test case errors trying to build...is there
>> additional test case cleanup required, or is the validation acting
>> too aggresively?
>>
>> Rick
>>
>> dblevins@apache.org wrote:
>>> Author: dblevins
>>> Date: Wed Jul 16 22:32:23 2008
>>> New Revision: 677503
>>>
>>> URL: http://svn.apache.org/viewvc?rev=677503&view=rev
>>> Log:
>>> OPENEJB-859: Improved validation for <home>, <remote>, <local-
>>> home>, <local>, <business-local> and <business-remote> elements
>>> Rewrote this validation completely to be more aggressive in
>>> figuring out what the user might have intended to do.
>>>
>>> Added:
>>> openejb/trunk/openejb3/container/openejb-core/src/test/java/org/
>>> apache/openejb/config/rules/InvalidInterfacesTest.java
>>> Modified:
>>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/
>>> apache/openejb/assembler/classic/JndiBuilder.java
>>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/
>>> apache/openejb/config/ValidationException.java
>>> 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/util/Strings.java
>>> openejb/trunk/openejb3/container/openejb-core/src/main/resources/
>>> org/apache/openejb/config/rules/Messages.properties
>>>
>>> Modified: openejb/trunk/openejb3/container/openejb-core/src/main/
>>> java/org/apache/openejb/assembler/classic/JndiBuilder.java
>>> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?rev=677503&r1=677502&r2=677503&view=diff
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> --- openejb/trunk/openejb3/container/openejb-core/src/main/java/
>>> org/apache/openejb/assembler/classic/JndiBuilder.java (original)
>>> +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/
>>> org/apache/openejb/assembler/classic/JndiBuilder.java Wed Jul 16
>>> 22:32:23 2008
>>> @@ -29,6 +29,7 @@
>>> import org.apache.openejb.spi.ContainerSystem;
>>> import org.apache.openejb.util.LogCategory;
>>> import org.apache.openejb.util.Logger;
>>> +import org.apache.openejb.util.Strings;
>>> import org.apache.openejb.loader.SystemInstance;
>>> import org.apache.openejb.core.CoreDeploymentInfo;
>>> import org.apache.openejb.core.ivm.naming.BusinessLocalReference;
>>> @@ -126,21 +127,10 @@
>>> this.type = type;
>>> this.annotatedName = annotatedName;
>>> this.xmlName = xmlName;
>>> - this.xmlNameCc = camelCase(xmlName);
>>> + this.xmlNameCc = Strings.camelCase(xmlName);
>>> this.openejbLegacy = openejbLegacy;
>>> }
>>> - private String camelCase(String string){
>>> - StringBuilder sb = new StringBuilder();
>>> - String[] strings = string.split("-");
>>> - for (String s : strings) {
>>> - int l = sb.length();
>>> - sb.append(s);
>>> - sb.setCharAt(l,
>>> Character.toUpperCase(sb.charAt(l)));
>>> - }
>>> - return sb.toString();
>>> - }
>>> -
>>> public InterfaceType getType() {
>>> return type;
>>>
>>> Modified: openejb/trunk/openejb3/container/openejb-core/src/main/
>>> java/org/apache/openejb/config/ValidationException.java
>>> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java?rev=677503&r1=677502&r2=677503&view=diff
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> --- openejb/trunk/openejb3/container/openejb-core/src/main/java/
>>> org/apache/openejb/config/ValidationException.java (original)
>>> +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/
>>> org/apache/openejb/config/ValidationException.java Wed Jul 16
>>> 22:32:23 2008
>>> @@ -36,6 +36,10 @@
>>> }
>>> }
>>> + public String getMessageKey(){
>>> + return message;
>>> + }
>>> + public Object[] getDetails() {
>>> return details;
>>> }
>>>
>>> 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=677503&r1=677502&r2=677503&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 Wed Jul 16
>>> 22:32:23 2008
>>> @@ -24,12 +24,15 @@
>>> import org.apache.openejb.jee.Interceptor;
>>> import org.apache.openejb.config.EjbModule;
>>> import org.apache.openejb.util.SafeToolkit;
>>> +import org.apache.openejb.util.Strings;
>>> import org.apache.xbean.finder.ClassFinder;
>>> import javax.ejb.EJBLocalHome;
>>> import javax.ejb.EJBLocalObject;
>>> import javax.ejb.EJBHome;
>>> import javax.ejb.EJBObject;
>>> +import javax.ejb.Local;
>>> +import javax.ejb.Remote;
>>> import javax.jws.WebService;
>>> import static java.lang.reflect.Modifier.isAbstract;
>>> import java.lang.reflect.Method;
>>> @@ -69,38 +72,40 @@
>>> public void validate(EjbModule ejbModule) {
>>> for (EnterpriseBean bean :
>>> ejbModule.getEjbJar().getEnterpriseBeans()) {
>>> try {
>>> - check_hasEjbClass(bean);
>>> + Class<?> beanClass = check_hasEjbClass(bean);
>>> if (!(bean instanceof RemoteBean)) continue;
>>> RemoteBean b = (RemoteBean) bean;
>>> check_isEjbClass(b);
>>> - check_hasDependentClasses(b, b.getEjbClass(),
>>> "<ejb-class>");
>>> + check_hasDependentClasses(b, b.getEjbClass(),
>>> "ejb-class");
>>> check_hasInterface(b);
>>> +
>>> + if (b.getRemote() != null){
>>> + checkInterface(b, beanClass, "remote",
>>> b.getRemote());
>>> + }
>>> +
>>> if (b.getHome() != null) {
>>> - check_hasHomeClass(b);
>>> - check_hasRemoteClass(b);
>>> - check_isHomeInterface(b);
>>> - check_isRemoteInterface(b);
>>> - check_hasDependentClasses(b, b.getHome(),
>>> "<home>");
>>> - check_hasDependentClasses(b, b.getRemote(),
>>> "<remote>");
>>> + checkInterface(b, beanClass, "home",
>>> b.getHome());
>>> + }
>>> +
>>> + if (b.getLocal() != null) {
>>> + checkInterface(b, beanClass, "local",
>>> b.getLocal());
>>> }
>>> +
>>> if (b.getLocalHome() != null) {
>>> - check_hasLocalHomeClass(b);
>>> - check_hasLocalClass(b);
>>> - check_isLocalHomeInterface(b);
>>> - check_isLocalInterface(b);
>>> - check_hasDependentClasses(b,
>>> b.getLocalHome(), "<local-home>");
>>> - check_hasDependentClasses(b, b.getLocal(),
>>> "<local>");
>>> + checkInterface(b, beanClass, "local-home",
>>> b.getLocalHome());
>>> }
>>> if (b instanceof SessionBean) {
>>> SessionBean sessionBean = (SessionBean) b;
>>> +
>>> for (String interfce :
>>> sessionBean.getBusinessLocal()) {
>>> - check_businessInterface(sessionBean,
>>> interfce, "<business-local>");
>>> + checkInterface(b, beanClass, "business-
>>> local", interfce);
>>> }
>>> +
>>> for (String interfce :
>>> sessionBean.getBusinessRemote()) {
>>> - check_businessInterface(sessionBean,
>>> interfce, "<business-remote>");
>>> + checkInterface(b, beanClass, "business-
>>> local", interfce);
>>> }
>>> }
>>> } catch (RuntimeException e) {
>>> @@ -113,35 +118,30 @@
>>> }
>>> }
>>> - private void check_businessInterface(SessionBean b, String
>>> interfaceName, String tagName) {
>>> - String ejbName = b.getEjbName();
>>> - Class<?> interfce = lookForClass(interfaceName, tagName,
>>> b.getEjbName());
>>> + private void checkInterface(RemoteBean b, Class<?> beanClass,
>>> String tag, String className) {
>>> + Class<?> interfce = lookForClass(className, tag,
>>> b.getEjbName());
>>> - if (!interfce.isInterface()){
>>> - fail(b, "notAnInterface", interfce.getName(), tagName);
>>> - }
>>> + if (interfce == null) return;
>>> +
>>> + check_hasDependentClasses(b, className, tag);
>>> +
>>> + tag = Strings.lcfirst(Strings.camelCase(tag));
>>> +
>>> + if (isValidInterface(b, interfce, beanClass, tag));
>>> ClassFinder finder = new ClassFinder(interfce);
>>> for (Class<? extends Annotation> annotation :
>>> beanOnlyAnnotations) {
>>> +
>>> if (interfce.isAnnotationPresent(annotation)){
>>> warn(b, "interface.beanOnlyAnnotation",
>>> annotation.getSimpleName(), interfce.getName(), b.getEjbClass());
>>> }
>>> +
>>> for (Method method :
>>> finder.findAnnotatedMethods(annotation)) {
>>> warn(b, "interfaceMethod.beanOnlyAnnotation",
>>> annotation.getSimpleName(), interfce.getName(), method.getName(),
>>> b.getEjbClass());
>>> }
>>> }
>>> - if (EJBHome.class.isAssignableFrom(interfce)){
>>> - fail(ejbName, "xml.businessRemoteOrLocal.ejbHome",
>>> tagName, interfce.getName());
>>> - } else if (EJBObject.class.isAssignableFrom(interfce)){
>>> - fail(ejbName, "xml.businessRemoteOrLocal.ejbObject",
>>> tagName, interfce.getName());
>>> - } else if (EJBLocalHome.class.isAssignableFrom(interfce)) {
>>> - fail(ejbName,
>>> "xml.businessRemoteOrLocal.ejbLocalHome", tagName,
>>> interfce.getName());
>>> - } else if
>>> (EJBLocalObject.class.isAssignableFrom(interfce)){
>>> - fail(ejbName,
>>> "xml.businessRemoteOrLocal.ejbLocalObject", tagName,
>>> interfce.getName());
>>> - }
>>> -
>>> }
>>> private void check_hasInterface(RemoteBean b) {
>>> @@ -187,7 +187,8 @@
>>> # 2 - Element (home, ejb-class, remote)
>>> # 3 - Bean name
>>> */
>>> - fail(b, "missing.dependent.class", className,
>>> e.getMessage(), type, b.getEjbName());
>>> + String missingClass = e.getMessage();
>>> + fail(b, "missing.dependent.class", className,
>>> missingClass, type, b.getEjbName());
>>> } catch (NoClassDefFoundError e) {
>>> /*
>>> # 0 - Referring Class name
>>> @@ -195,19 +196,12 @@
>>> # 2 - Element (home, ejb-class, remote)
>>> # 3 - Bean name
>>> */
>>> - fail(b, "missing.dependent.class", className,
>>> e.getMessage(), type, b.getEjbName());
>>> + String missingClass = e.getMessage();
>>> + fail(b, "missing.dependent.class", className,
>>> missingClass, type, b.getEjbName());
>>> }
>>> }
>>> - private void check_hasLocalClass(RemoteBean b) {
>>> - lookForClass(b.getLocal(), "<local>", b.getEjbName());
>>> - }
>>> -
>>> - private void check_hasLocalHomeClass(RemoteBean b) {
>>> - lookForClass(b.getLocalHome(), "<local-home>",
>>> b.getEjbName());
>>> - }
>>> -
>>> - public void check_hasEjbClass(EnterpriseBean b) {
>>> + public Class<?> check_hasEjbClass(EnterpriseBean b) {
>>> String ejbName = b.getEjbName();
>>> @@ -217,32 +211,22 @@
>>> fail(ejbName, "interfaceDeclaredAsBean",
>>> beanClass.getName());
>>> }
>>> - if (isCmp(b)) return;
>>> + if (isCmp(b)) return beanClass;
>>> if (isAbstract(beanClass.getModifiers())){
>>> fail(ejbName, "abstractDeclaredAsBean",
>>> beanClass.getName());
>>> }
>>> - }
>>> -
>>> - public void check_hasInterceptorClass(Interceptor i) {
>>> -
>>> - lookForClass(i.getInterceptorClass(), "<interceptor-
>>> class>", "Interceptor");
>>> + return beanClass;
>>> }
>>> - public void check_hasHomeClass(RemoteBean b) {
>>> + private void check_hasInterceptorClass(Interceptor i) {
>>> - lookForClass(b.getHome(), "<home>", b.getEjbName());
>>> + lookForClass(i.getInterceptorClass(), "interceptor-
>>> class", "Interceptor");
>>> }
>>> - public void check_hasRemoteClass(RemoteBean b) {
>>> -
>>> - lookForClass(b.getRemote(), "<remote>", b.getEjbName());
>>> -
>>> - }
>>> -
>>> - public void check_isEjbClass(RemoteBean b) {
>>> + private void check_isEjbClass(RemoteBean b) {
>>> if (b instanceof SessionBean) {
>>> @@ -258,26 +242,6 @@
>>> }
>>> - private void check_isLocalInterface(RemoteBean b) {
>>> - compareTypes(b, b.getLocal(), EJBLocalObject.class);
>>> - }
>>> -
>>> - private void check_isLocalHomeInterface(RemoteBean b) {
>>> - compareTypes(b, b.getLocalHome(), EJBLocalHome.class);
>>> - }
>>> -
>>> - public void check_isHomeInterface(RemoteBean b) {
>>> -
>>> - compareTypes(b, b.getHome(), javax.ejb.EJBHome.class);
>>> -
>>> - }
>>> -
>>> - public void check_isRemoteInterface(RemoteBean b) {
>>> -
>>> - compareTypes(b, b.getRemote(), javax.ejb.EJBObject.class);
>>> -
>>> - }
>>> -
>>> private Class<?> lookForClass(String clazz, String type, String
>>> ejbName) {
>>> try {
>>> return loadClass(clazz);
>>> @@ -305,6 +269,63 @@
>>> return null;
>>> }
>>> + private boolean isValidInterface(RemoteBean b, Class clazz,
>>> Class beanClass, String tag) {
>>> +
>>> + if (clazz.equals(beanClass)) {
>>> +
>>> + fail(b, "xml." + tag + ".beanClass", clazz.getName());
>>> +
>>> + } else if (!clazz.isInterface()) {
>>> +
>>> + fail(b, "xml." + tag + ".notInterface",
>>> clazz.getName());
>>> +
>>> + } else if (EJBHome.class.isAssignableFrom(clazz)) {
>>> +
>>> + if (tag.equals("home")) return true;
>>> +
>>> + fail(b, "xml." + tag + ".ejbHome", clazz.getName());
>>> +
>>> + } else if (EJBLocalHome.class.isAssignableFrom(clazz)) {
>>> +
>>> + if (tag.equals("local-home")) return true;
>>> +
>>> + fail(b, "xml." + tag + ".ejbLocalHome",
>>> clazz.getName());
>>> +
>>> + } else if (EJBObject.class.isAssignableFrom(clazz)) {
>>> +
>>> + if (tag.equals("remote")) return true;
>>> +
>>> + fail(b, "xml." + tag + ".ejbObject", clazz.getName());
>>> +
>>> + } else if (EJBLocalObject.class.isAssignableFrom(clazz)) {
>>> +
>>> + if (tag.equals("local")) return true;
>>> +
>>> + fail(b, "xml." + tag + ".ejbLocalObject",
>>> clazz.getName());
>>> +
>>> + } else if (tag.equals("businessLocal") &&
>>> tag.equals("businessRemote")) {
>>> +
>>> + return true;
>>> + }
>>> +
>>> + // must be tagged as <home>, <local-home>, <remote>, or
>>> <local>
>>> + if (clazz.isAnnotationPresent(Local.class)) {
>>> +
>>> + fail(b, "xml." + tag + ".businessLocal",
>>> clazz.getName());
>>> +
>>> + } else if (clazz.isAnnotationPresent(Remote.class)) {
>>> +
>>> + fail(b, "xml." + tag + ".businessRemote",
>>> clazz.getName());
>>> +
>>> + } else {
>>> +
>>> + fail(b, "xml." + tag + ".unknown", clazz.getName());
>>> +
>>> + }
>>> +
>>> + return false;
>>> + }
>>> +
>>> private void compareTypes(RemoteBean b, String clazz1, Class<?>
>>> class2) {
>>> Class<?> class1 = null;
>>> try {
>>>
>>> Modified: openejb/trunk/openejb3/container/openejb-core/src/main/
>>> java/org/apache/openejb/util/Strings.java
>>> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java?rev=677503&r1=677502&r2=677503&view=diff
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> --- openejb/trunk/openejb3/container/openejb-core/src/main/java/
>>> org/apache/openejb/util/Strings.java (original)
>>> +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/
>>> org/apache/openejb/util/Strings.java Wed Jul 16 22:32:23 2008
>>> @@ -70,4 +70,15 @@
>>> return sb.toString();
>>> }
>>> + public static String camelCase(String string){
>>> + StringBuilder sb = new StringBuilder();
>>> + String[] strings = string.split("-");
>>> + for (String s : strings) {
>>> + int l = sb.length();
>>> + sb.append(s);
>>> + sb.setCharAt(l, Character.toUpperCase(sb.charAt(l)));
>>> + }
>>> + return sb.toString();
>>> + }
>>> +
>>> }
>>>
>>> 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=677503&r1=677502&r2=677503&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 16 22:32:23 2008
>>> @@ -47,7 +47,7 @@
>>> # 2 - Bean name
>>> 1.missing.class Missing class
>>> 2.missing.class Missing class {0}
>>> -3.missing.class The class {0} not found. Check that the
>>> class specified in the {1} element for bean {2} is spelled
>>> correctly and the class is present in the jar
>>> +3.missing.class The class {0} not found. Check that the
>>> class specified in the <{1}> element for bean {2} is spelled
>>> correctly and the class is present in the jar
>>> # 0 - Class name
>>> # 1 - EJB Class name
>>> @@ -125,9 +125,10 @@
>>> # 1 - Dependent Class name
>>> # 2 - Element (home, ejb-class, remote)
>>> # 3 - Bean name
>>> +# fail(b, "missing.dependent.class", className, missingClass,
>>> type, b.getEjbName());
>>> 1.missing.dependent.class Missing dependent class or
>>> library
>>> -2.missing.dependent.class Missing dependent class or
>>> library: {1} needed by {2}
>>> -3.missing.dependent.class The class {1} not found and
>>> is referenced by the {2} class {0}. The Check that the class or
>>> related library is available in the classpath
>>> +2.missing.dependent.class Missing dependent class or
>>> library: {1} needed by {0}
>>> +3.missing.dependent.class The class {1} not found and
>>> is referenced by the <{2}> class {0}. The Check that the class or
>>> related library is available in the classpath
>>> # CheckAssemblyBindings.java
>>> @@ -304,26 +305,6 @@
>>> 2.ann.remoteOrLocal.ejbLocalObject = @{0} used in bean class lists
>>> a javax.ejb.EJBLocalObject interface. Use @LocalHome with home
>>> interface of "{1}".
>>> 3.ann.remoteOrLocal.ejbLocalObject = When applied to a bean class,
>>> the @{0} annotation must only list business interfaces and cannot
>>> list legacy EJBLocalObject interfaces. The EJBLocalHome of
>>> interface for "{1}" can be annotated on the bean class with
>>> @LocalHome
>>> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbHome", tagName,
>>> interfce.getName());
>>> -1.xml.businessRemoteOrLocal.ejbHome = javax.ejb.EJBHome interface
>>> declared as {0}.
>>> -2.xml.businessRemoteOrLocal.ejbHome = javax.ejb.EJBHome interface
>>> declared as {0}. Use <home>{1}</home>
>>> -3.xml.businessRemoteOrLocal.ejbHome = Interfaces extending
>>> javax.ejb.EJBHome pre-date the concept of EJB 3.0 simplified
>>> business interfaces and must not use the {0} tag when declared in
>>> the ejb-jar.xml. Declare this interface as <home>{1}</home>.
>>> -
>>> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalHome",
>>> tagName, interfce.getName());
>>> -1.xml.businessRemoteOrLocal.ejbLocalHome = javax.ejb.EJBLocalHome
>>> interface declared as {0}.
>>> -2.xml.businessRemoteOrLocal.ejbLocalHome = javax.ejb.EJBLocalHome
>>> interface declared as {0}. Use <local-home>{1}</local-home>
>>> -3.xml.businessRemoteOrLocal.ejbLocalHome = Interfaces extending
>>> javax.ejb.EJBLocalHome pre-date the concept of EJB 3.0 simplified
>>> business interfaces and must not use the {0} tag when declared in
>>> the ejb-jar.xml. Declare this interface as <local-home>{1}</local-
>>> home>.
>>> -
>>> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbObject", tagName,
>>> interfce.getName());
>>> -1.xml.businessRemoteOrLocal.ejbObject = javax.ejb.EJBObject
>>> interface declared as {0}.
>>> -2.xml.businessRemoteOrLocal.ejbObject = javax.ejb.EJBObject
>>> interface declared as {0}. Use <remote>{1}</remote>
>>> -3.xml.businessRemoteOrLocal.ejbObject = Interfaces extending
>>> javax.ejb.EJBObject pre-date the concept of EJB 3.0 simplified
>>> business interfaces and must not use the {0} tag when declared in
>>> the ejb-jar.xml. Declare this interface as <remote>{1}</remote>.
>>> -
>>> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalObject",
>>> tagName, interfce.getName());
>>> -1.xml.businessRemoteOrLocal.ejbLocalObject =
>>> javax.ejb.EJBLocalObject interface declared as {0}.
>>> -2.xml.businessRemoteOrLocal.ejbLocalObject =
>>> javax.ejb.EJBLocalObject interface declared as {0}. Use
>>> <local>{1}</local>
>>> -3.xml.businessRemoteOrLocal.ejbLocalObject = Interfaces extending
>>> javax.ejb.EJBLocalObject pre-date the concept of EJB 3.0
>>> simplified business interfaces and must not use the {0} tag when
>>> declared in the ejb-jar.xml. Declare this interface as
>>> <local>{1}</local>.
>>> -
>>> # warn(bean, "ignoredStatefulAnnotation", annotationType,
>>> beanType, methodName);
>>> 1.ignoredStatefulAnnotation = @{0} is ignored for beans of type {1}
>>> 2.ignoredStatefulAnnotation = @{0} is ignored for beans of type
>>> {1}. Method: {2}
>>> @@ -524,11 +505,6 @@
>>> Which can then be implemented by the {0} class.\
>>> -# fail(b, "notAnInterface", interfce.getName(), tagName);
>>> -1.notAnInterface = Business remotes and locals must be interfaces.
>>> -2.notAnInterface = Class tagged as {1} is not an interface: {0}
>>> -3.notAnInterface = All business remote and business local views
>>> must be java interfaces. Classes, abstract classes or enums are
>>> not allowed. Either convert {0} to an interface or remove the
>>> related {1} xml tag from your ejb-jar.xml.
>>> -
>>> # fail(ejbName, "ann.notAnInterface", annotationName,
>>> interfce.getName());
>>> 1.ann.notAnInterface = @{0} lists a non-interface.
>>> 2.ann.notAnInterface = @{0} lists a non-interface: {1}
>>> @@ -574,3 +550,195 @@
>>> 2.ann.invalidConcurrencyAttribute = Ignoring {0} invalid @Lock
>>> annotations. Bean not using Container-Managed Concurrencys.
>>> 3.ann.invalidConcurrencyAttribute = The @Lock annotation applies
>>> only to beans using Container-Managed Concurrencys. Beans marked
>>> as @ConcurrencyManagement(BEAN) are responsible for thier own
>>> concurrency and may not use the @Lock annotation. There are {0}
>>> such invalid annotations in the bean class that will be ignored
>>> and should be removed.
>>> +
>>> +1.xml.home.ejbLocalHome = javax.ejb.EJBLocalHome interface
>>> declared as <home>. Use <local-home>{0}</local-home>
>>> +2.xml.home.ejbLocalHome = javax.ejb.EJBLocalHome interface
>>> declared as <home>. Use <local-home>{0}</local-home>
>>> +3.xml.home.ejbLocalHome = The <home> element is for interfaces
>>> extending javax.ejb.EJBHome. The interface supplied is a
>>> javax.ejb.EJBLocalHome and should be declared with the <local-
>>> home> element as in: <local-home>{0}</local-home>
>>> +
>>> +1.xml.home.ejbObject = javax.ejb.EJBObject interface declared as
>>> <home>. Use <remote>{0}</remote>
>>> +2.xml.home.ejbObject = javax.ejb.EJBObject interface declared as
>>> <home>. Use <remote>{0}</remote>
>>> +3.xml.home.ejbObject = The <home> element is for interfaces
>>> extending javax.ejb.EJBHome. The interface supplied is a
>>> javax.ejb.EJBObject and should be declared with the <remote>
>>> element as in: <remote>{0}</remote>
>>> +
>>> +1.xml.home.ejbLocalObject = javax.ejb.EJBLocalObject interface
>>> declared as <home>. Use <local>{0}</local>
>>> +2.xml.home.ejbLocalObject = javax.ejb.EJBLocalObject interface
>>> declared as <home>. Use <local>{0}</local>
>>> +3.xml.home.ejbLocalObject = The <home> element is for interfaces
>>> extending javax.ejb.EJBHome. The interface supplied is a
>>> javax.ejb.EJBLocalObject and should be declared with the <local>
>>> element as in: <local>{0}</local>
>>> +
>>> +1.xml.home.businessLocal = EJB 3.0 business interface declared as
>>> <home>. Use <business-local>{0}</business-local>
>>> +2.xml.home.businessLocal = EJB 3.0 business interface declared as
>>> <home>. Use <business-local>{0}</business-local>
>>> +3.xml.home.businessLocal = The <home> element of the ejb-jar.xml
>>> is for interfaces extending javax.ejb.EJBHome. EJB 3.0 simplified
>>> business interfaces can be decalred via <business-local>{0}</
>>> business-local> or via the @Remote annotation on the bean class or
>>> interface class.
>>> +
>>> +1.xml.home.businessRemote = EJB 3.0 business interface declared
>>> as <home>. Use <business-remote>{0}</business-remote>
>>> +2.xml.home.businessRemote = EJB 3.0 business interface declared
>>> as <home>. Use <business-remote>{0}</business-remote>
>>> +3.xml.home.businessRemote = The <home> element of the ejb-jar.xml
>>> is for interfaces extending javax.ejb.EJBHome. EJB 3.0 simplified
>>> business interfaces can be decalred via <business-remote>{0}</
>>> business-remote> or via the @Remote annotation on the bean class
>>> or interface class.
>>> +
>>> +1.xml.home.beanClass = Bean class mistakenly declared as <home>
>>> +2.xml.home.beanClass = Bean class mistakenly declared as <home>
>>> +3.xml.home.beanClass = The <home> element of the ejb-jar.xml is
>>> for interfaces extending javax.ejb.EJBHome. The bean class cannot
>>> be used as a home interface.
>>> +
>>> +1.xml.home.notInterface = The value of <home> is not an interface
>>> +2.xml.home.notInterface = The value of <home> is not an
>>> interface: {0}
>>> +3.xml.home.notInterface = The <home> element of the ejb-jar.xml
>>> is for interfaces extending javax.ejb.EJBHome. Classes, abstract
>>> classes or enums are not allowed. Either convert {0} to an
>>> interface or remove the related <home> xml tag from your ejb-jar.xml
>>> +
>>> +1.xml.home.unknown = The value of <home> must be an interface
>>> extending javax.ejb.EJBHome
>>> +2.xml.home.unknown = The value of <home> must be an interface
>>> extending javax.ejb.EJBHome
>>> +3.xml.home.unknown = The <home> element of the ejb-jar.xml is for
>>> interfaces extending javax.ejb.EJBHome. If this interface is
>>> intended to be an EJB 3.0 business remote view, declare this
>>> interface as <business-remote>{0}</business-remote> or via the
>>> @Remote annotation on the bean class or interface class.
>>> +
>>> +
>>> +
>>> +1.xml.remote.ejbHome = javax.ejb.EJBHome interface declared as
>>> <remote>. Use <home>{0}</home>
>>> +2.xml.remote.ejbHome = javax.ejb.EJBHome interface declared as
>>> <remote>. Use <home>{0}</home>
>>> +3.xml.remote.ejbHome = The <remote> element is for interfaces
>>> extending javax.ejb.EJBObject. The interface supplied is a
>>> javax.ejb.EJBHome and should be declared with the <home> element
>>> as in: <home>{0}</home>
>>> +
>>> +1.xml.remote.ejbLocalHome = javax.ejb.EJBLocalHome interface
>>> declared as <remote>. Use <local-home>{0}</local-home>
>>> +2.xml.remote.ejbLocalHome = javax.ejb.EJBLocalHome interface
>>> declared as <remote>. Use <local-home>{0}</local-home>
>>> +3.xml.remote.ejbLocalHome = The <remote> element is for
>>> interfaces extending javax.ejb.EJBHome. The interface supplied is
>>> a javax.ejb.EJBLocalHome and should be declared with the <local-
>>> home> element as in: <local-home>{0}</local-home>
>>> +
>>> +1.xml.remote.ejbLocalObject = javax.ejb.EJBLocalObject interface
>>> declared as <remote>. Use <local>{0}</local>
>>> +2.xml.remote.ejbLocalObject = javax.ejb.EJBLocalObject interface
>>> declared as <remote>. Use <local>{0}</local>
>>> +3.xml.remote.ejbLocalObject = The <remote> element is for
>>> interfaces extending javax.ejb.EJBObject. The interface supplied
>>> is a javax.ejb.EJBLocalObject and should be declared with the
>>> <local> element as in: <local>{0}</local>
>>> +
>>> +# must be attempting an override
>>> +1.xml.remote.businessLocal = EJB 3.0 business interface declared
>>> as <remote>. Use <business-remote>{0}</business-remote>
>>> +2.xml.remote.businessLocal = EJB 3.0 business interface declared
>>> as <remote>. Use <business-remote>{0}</business-remote>
>>> +3.xml.remote.businessLocal = The <remote> element of the ejb-
>>> jar.xml is for interfaces extending javax.ejb.EJBObject. EJB 3.0
>>> simplified business interfaces can be decalred via <business-
>>> local>{0}</business-local> or via the @Remote annotation on the
>>> bean class or interface class.
>>> +
>>> +1.xml.remote.businessRemote = EJB 3.0 business interface declared
>>> as <remote>. Use <business-remote>{0}</business-remote>
>>> +2.xml.remote.businessRemote = EJB 3.0 business interface declared
>>> as <remote>. Use <business-remote>{0}</business-remote>
>>> +3.xml.remote.businessRemote = The <remote> element of the ejb-
>>> jar.xml is for interfaces extending javax.ejb.EJBObject. EJB 3.0
>>> simplified business interfaces can be decalred via <business-
>>> remote>{0}</business-remote> or via the @Remote annotation on the
>>> bean class or interface class.
>>> +
>>> +1.xml.remote.beanClass = Bean class mistakenly declared as <remote>
>>> +2.xml.remote.beanClass = Bean class mistakenly declared as <remote>
>>> +3.xml.remote.beanClass = The <remote> element of the ejb-jar.xml
>>> is for interfaces extending javax.ejb.EJBObject. The bean class
>>> cannot be used as a home interface.
>>> +
>>> +1.xml.remote.notInterface = The value of <remote> is not an
>>> interface
>>> +2.xml.remote.notInterface = The value of <remote> is not an
>>> interface: {0}
>>> +3.xml.remote.notInterface = The <remote> element of the ejb-
>>> jar.xml is for interfaces extending javax.ejb.EJBObject. Classes,
>>> abstract classes or enums are not allowed. Either convert {0} to
>>> an interface or remove the related <remote> xml tag from your ejb-
>>> jar.xml
>>> +
>>> +1.xml.remote.unknown = The value of <remote> must be an interface
>>> extending javax.ejb.EJBObject
>>> +2.xml.remote.unknown = The value of <remote> must be an interface
>>> extending javax.ejb.EJBObject
>>> +3.xml.remote.unknown = The <remote> element of the ejb-jar.xml is
>>> for interfaces extending javax.ejb.EJBObject. If this interface
>>> is intended to be an EJB 3.0 business remote view, declare this
>>> interface as <business-remote>{0}</business-remote> or via the
>>> @Remote annotation on the bean class or interface class.
>>> +
>>> +
>>> +
>>> +
>>> +1.xml.localHome.ejbHome = javax.ejb.EJBHome interface declared as
>>> <local-home>. Use <home>{0}</home>
>>> +2.xml.localHome.ejbHome = javax.ejb.EJBHome interface declared as
>>> <local-home>. Use <home>{0}</home>
>>> +3.xml.localHome.ejbHome = The <local-home> element is for
>>> interfaces extending javax.ejb.EJBLocalHome. The interface
>>> supplied is a javax.ejb.EJBHome and should be declared with the
>>> <home> element as in: <home>{0}</home>
>>> +
>>> +1.xml.localHome.ejbObject = javax.ejb.EJBObject interface
>>> declared as <local-home>. Use <remote>{0}</remote>
>>> +2.xml.localHome.ejbObject = javax.ejb.EJBObject interface
>>> declared as <local-home>. Use <remote>{0}</remote>
>>> +3.xml.localHome.ejbObject = The <local-home> element is for
>>> interfaces extending javax.ejb.EJBLocalHome. The interface
>>> supplied is a javax.ejb.EJBObject and should be declared with the
>>> <remote> element as in: <remote>{0}</remote>
>>> +
>>> +1.xml.localHome.ejbLocalObject = javax.ejb.EJBLocalObject
>>> interface declared as <local-home>. Use <local>{0}</local>
>>> +2.xml.localHome.ejbLocalObject = javax.ejb.EJBLocalObject
>>> interface declared as <local-home>. Use <local>{0}</local>
>>> +3.xml.localHome.ejbLocalObject = The <local-home> element is for
>>> interfaces extending javax.ejb.EJBLocalHome. The interface
>>> supplied is a javax.ejb.EJBLocalObject and should be declared with
>>> the <local> element as in: <local>{0}</local>
>>> +
>>> +1.xml.localHome.businessLocal = EJB 3.0 business interface
>>> declared as <local-home>. Use <business-local>{0}</business-local>
>>> +2.xml.localHome.businessLocal = EJB 3.0 business interface
>>> declared as <local-home>. Use <business-local>{0}</business-local>
>>> +3.xml.localHome.businessLocal = The <local-home> element of the
>>> ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome.
>>> EJB 3.0 simplified business interfaces can be decalred via
>>> <business-local>{0}</business-local> or via the @Remote annotation
>>> on the bean class or interface class.
>>> +
>>> +1.xml.localHome.businessRemote = EJB 3.0 business interface
>>> declared as <local-home>. Use <business-remote>{0}</business-remote>
>>> +2.xml.localHome.businessRemote = EJB 3.0 business interface
>>> declared as <local-home>. Use <business-remote>{0}</business-remote>
>>> +3.xml.localHome.businessRemote = The <local-home> element of the
>>> ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome.
>>> EJB 3.0 simplified business interfaces can be decalred via
>>> <business-remote>{0}</business-remote> or via the @Remote
>>> annotation on the bean class or interface class.
>>> +
>>> +1.xml.localHome.beanClass = Bean class mistakenly declared as
>>> <local-home>
>>> +2.xml.localHome.beanClass = Bean class mistakenly declared as
>>> <local-home>
>>> +3.xml.localHome.beanClass = The <local-home> element of the ejb-
>>> jar.xml is for interfaces extending javax.ejb.EJBLocalHome. The
>>> bean class cannot be used as a home interface.
>>> +
>>> +1.xml.localHome.notInterface = The value of <local-home> is not
>>> an interface
>>> +2.xml.localHome.notInterface = The value of <local-home> is not
>>> an interface: {0}
>>> +3.xml.localHome.notInterface = The <local-home> element of the
>>> ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome.
>>> Classes, abstract classes or enums are not allowed. Either
>>> convert {0} to an interface or remove the related <local-home> xml
>>> tag from your ejb-jar.xml
>>> +
>>> +1.xml.localHome.unknown = The value of <local-home> must be an
>>> interface extending javax.ejb.EJBLocalHome
>>> +2.xml.localHome.unknown = The value of <local-home> must be an
>>> interface extending javax.ejb.EJBLocalHome
>>> +3.xml.localHome.unknown = The <local-home> element of the ejb-
>>> jar.xml is for interfaces extending javax.ejb.EJBLocalHome. If
>>> this interface is intended to be an EJB 3.0 business local view,
>>> declare this interface as <business-local>{0}</business-local> or
>>> via the @Local annotation on the bean class or interface class.
>>> +
>>> +
>>> +
>>> +
>>> +1.xml.local.ejbHome = javax.ejb.EJBHome interface declared as
>>> <local>. Use <home>{0}</home>
>>> +2.xml.local.ejbHome = javax.ejb.EJBHome interface declared as
>>> <local>. Use <home>{0}</home>
>>> +3.xml.local.ejbHome = The <local> element is for interfaces
>>> extending javax.ejb.EJBLocalObject. The interface supplied is a
>>> javax.ejb.EJBHome and should be declared with the <home> element
>>> as in: <home>{0}</home>
>>> +
>>> +1.xml.local.ejbLocalHome = javax.ejb.EJBLocalHome interface
>>> declared as <local>. Use <local-home>{0}</local-home>
>>> +2.xml.local.ejbLocalHome = javax.ejb.EJBLocalHome interface
>>> declared as <local>. Use <local-home>{0}</local-home>
>>> +3.xml.local.ejbLocalHome = The <local> element is for interfaces
>>> extending javax.ejb.EJBLocalObject. The interface supplied is a
>>> javax.ejb.EJBLocalHome and should be declared with the <local-
>>> home> element as in: <local-home>{0}</local-home>
>>> +
>>> +1.xml.local.ejbObject = javax.ejb.EJBObject interface declared as
>>> <local>. Use <remote>{0}</remote>
>>> +2.xml.local.ejbObject = javax.ejb.EJBObject interface declared as
>>> <local>. Use <remote>{0}</remote>
>>> +3.xml.local.ejbObject = The <local> element is for interfaces
>>> extending javax.ejb.EJBLocalObject. The interface supplied is a
>>> javax.ejb.EJBObject and should be declared with the <remote>
>>> element as in: <remote>{0}</remote>
>>> +
>>> +1.xml.local.businessLocal = EJB 3.0 business interface declared
>>> as <local>. Use <business-local>{0}</business-local>
>>> +2.xml.local.businessLocal = EJB 3.0 business interface declared
>>> as <local>. Use <business-local>{0}</business-local>
>>> +3.xml.local.businessLocal = The <local> element of the ejb-
>>> jar.xml is for interfaces extending javax.ejb.EJBLocalObject. EJB
>>> 3.0 simplified business interfaces can be decalred via <business-
>>> local>{0}</business-local> or via the @Remote annotation on the
>>> bean class or interface class.
>>> +
>>> +# must be attempting an override
>>> +1.xml.local.businessRemote = EJB 3.0 business interface declared
>>> as <local>. Use <business-local>{0}</business-local>
>>> +2.xml.local.businessRemote = EJB 3.0 business interface declared
>>> as <local>. Use <business-local>{0}</business-local>
>>> +3.xml.local.businessRemote = The <local> element of the ejb-
>>> jar.xml is for interfaces extending javax.ejb.EJBLocalObject. EJB
>>> 3.0 simplified business interfaces can be decalred via <business-
>>> remote>{0}</business-remote> or via the @Remote annotation on the
>>> bean class or interface class.
>>> +
>>> +1.xml.local.beanClass = Bean class mistakenly declared as <local>
>>> +2.xml.local.beanClass = Bean class mistakenly declared as <local>
>>> +3.xml.local.beanClass = The <local> element of the ejb-jar.xml is
>>> for interfaces extending javax.ejb.EJBLocalObject. The bean class
>>> cannot be used as a home interface.
>>> +
>>> +1.xml.local.notInterface = The value of <local> is not an interface
>>> +2.xml.local.notInterface = The value of <local> is not an
>>> interface: {0}
>>> +3.xml.local.notInterface = The <local> element of the ejb-jar.xml
>>> is for interfaces extending javax.ejb.EJBLocalObject. Classes,
>>> abstract classes or enums are not allowed. Either convert {0} to
>>> an interface or remove the related <local> xml tag from your ejb-
>>> jar.xml
>>> +
>>> +1.xml.local.unknown = The value of <local> must be an interface
>>> extending javax.ejb.EJBLocalObject
>>> +2.xml.local.unknown = The value of <local> must be an interface
>>> extending javax.ejb.EJBLocalObject. Perhaps you meant to use
>>> <business-local>{0}</business-local>
>>> +3.xml.local.unknown = The <local> element of the ejb-jar.xml is
>>> for interfaces extending javax.ejb.EJBLocalObject. If this
>>> interface is intended to be an EJB 3.0 business local view,
>>> declare this interface as <business-local>{0}</business-local> or
>>> via the @Local annotation on the bean class or interface class.
>>> +
>>> +
>>> +
>>> +
>>> +1.xml.businessRemote.ejbHome = javax.ejb.EJBHome interface
>>> declared as <business-remote>. Use <home>{0}</home>
>>> +2.xml.businessRemote.ejbHome = javax.ejb.EJBHome interface
>>> declared as <business-remote>. Use <home>{0}</home>
>>> +3.xml.businessRemote.ejbHome = Interfaces extending
>>> javax.ejb.EJBHome must use the <home> tag, not the <business-
>>> remote> tag, when declared in the ejb-jar.xml. Declare this
>>> interface as <home>{0}</home> or alternatively add
>>> @RemoteHome({0}.class) to the top of your bean class.
>>> +
>>> +1.xml.businessRemote.ejbLocalHome = javax.ejb.EJBLocalHome
>>> interface declared as <business-remote>. Use <local-home>{0}</
>>> local-home>
>>> +2.xml.businessRemote.ejbLocalHome = javax.ejb.EJBLocalHome
>>> interface declared as <business-remote>. Use <local-home>{0}</
>>> local-home>
>>> +3.xml.businessRemote.ejbLocalHome = Interfaces extending
>>> javax.ejb.EJBLocalHome must use the <local-home> tag, not the
>>> <business-remote> tag, when declared in the ejb-jar.xml. Declare
>>> this interface as <local-home>{0}</local-home> or alternatively
>>> add @LocalHome({0}.class) to the top of your bean class.
>>> +
>>> +1.xml.businessRemote.ejbObject = javax.ejb.EJBObject interface
>>> declared as <business-remote>. Use <remote>{0}</remote>
>>> +2.xml.businessRemote.ejbObject = javax.ejb.EJBObject interface
>>> declared as <business-remote>. Use <remote>{0}</remote>
>>> +3.xml.businessRemote.ejbObject = Interfaces extending
>>> javax.ejb.EJBObject must use the <remote> tag, not the <business-
>>> remote> tag, when declared in the ejb-jar.xml. Declare this
>>> interface as <remote>{0}</remote>.
>>> +
>>> +1.xml.businessRemote.ejbLocalObject = javax.ejb.EJBLocalObject
>>> interface declared as <business-remote>. Use <local>{0}</local>
>>> +2.xml.businessRemote.ejbLocalObject = javax.ejb.EJBLocalObject
>>> interface declared as <business-remote>. Use <local>{0}</local>
>>> +3.xml.businessRemote.ejbLocalObject = Interfaces extending
>>> javax.ejb.EJBLocalObject must use the <local> tag, not the
>>> <business-remote> tag, when declared in the ejb-jar.xml. Declare
>>> this interface as <local>{0}</local>.
>>> +
>>> +1.xml.businessRemote.beanClass = Bean class mistakenly declared
>>> as <business-remote>
>>> +2.xml.businessRemote.beanClass = Bean class mistakenly declared
>>> as <business-remote>
>>> +3.xml.businessRemote.beanClass = The bean class cannot itself
>>> cannot be used as the value of the <business-remote> element of
>>> the ejb-jar.xml. Either list a valid java interface or delete
>>> this element and annotate the intended interface with the @Remote
>>> annotation.
>>> +
>>> +1.xml.businessRemote.notInterface = The value of <business-
>>> remote> is not an interface
>>> +2.xml.businessRemote.notInterface = The value of <business-
>>> remote> is not an interface: {0}
>>> +3.xml.businessRemote.notInterface = The <business-remote> element
>>> of the ejb-jar.xml must be an interface. Classes, abstract
>>> classes or enums are not allowed. Either convert {0} to an
>>> interface or remove the related <business-remote> xml tag from
>>> your ejb-jar.xml
>>> +
>>> +
>>> +
>>> +
>>> +1.xml.businessLocal.ejbHome = javax.ejb.EJBHome interface
>>> declared as <business-local>. Use <home>{0}</home>
>>> +2.xml.businessLocal.ejbHome = javax.ejb.EJBHome interface
>>> declared as <business-local>. Use <home>{0}</home>
>>> +3.xml.businessLocal.ejbHome = Interfaces extending
>>> javax.ejb.EJBHome must use the <home> tag, not the <business-
>>> local> tag, when declared in the ejb-jar.xml. Declare this
>>> interface as <home>{0}</home> or alternatively add
>>> @RemoteHome({0}.class) to the top of your bean class.
>>> +
>>> +1.xml.businessLocal.ejbLocalHome = javax.ejb.EJBLocalHome
>>> interface declared as <business-local>. Use <local-home>{0}</local-
>>> home>
>>> +2.xml.businessLocal.ejbLocalHome = javax.ejb.EJBLocalHome
>>> interface declared as <business-local>. Use <local-home>{0}</local-
>>> home>
>>> +3.xml.businessLocal.ejbLocalHome = Interfaces extending
>>> javax.ejb.EJBLocalHome must use the <local-home> tag, not the
>>> <business-local> tag, when declared in the ejb-jar.xml. Declare
>>> this interface as <local-home>{0}</local-home> or alternatively
>>> add @LocalHome({0}.class) to the top of your bean class.
>>> +
>>> +1.xml.businessLocal.ejbObject = javax.ejb.EJBObject interface
>>> declared as <business-local>. Use <remote>{0}</remote>
>>> +2.xml.businessLocal.ejbObject = javax.ejb.EJBObject interface
>>> declared as <business-local>. Use <remote>{0}</remote>
>>> +3.xml.businessLocal.ejbObject = Interfaces extending
>>> javax.ejb.EJBObject must use the <remote> tag, not the <business-
>>> local> tag, when declared in the ejb-jar.xml. Declare this
>>> interface as <remote>{0}</remote>.
>>> +
>>> +1.xml.businessLocal.ejbLocalObject = javax.ejb.EJBLocalObject
>>> interface declared as <business-local>. Use <local>{0}</local>
>>> +2.xml.businessLocal.ejbLocalObject = javax.ejb.EJBLocalObject
>>> interface declared as <business-local>. Use <local>{0}</local>
>>> +3.xml.businessLocal.ejbLocalObject = Interfaces extending
>>> javax.ejb.EJBLocalObject must use the <local> tag, not the
>>> <business-local> tag, when declared in the ejb-jar.xml. Declare
>>> this interface as <local>{0}</local>.
>>> +
>>> +1.xml.businessLocal.beanClass = Bean class mistakenly declared as
>>> <business-local>
>>> +2.xml.businessLocal.beanClass = Bean class mistakenly declared as
>>> <business-local>
>>> +3.xml.businessLocal.beanClass = The bean class cannot itself
>>> cannot be used as the value of the <business-local> element of the
>>> ejb-jar.xml. Either 1) list a valid java interface or 2) delete
>>> this element and annotate the intended interface with the @Local
>>> annotation.
>>> +
>>> +1.xml.businessLocal.notInterface = The value of <business-local>
>>> is not an interface
>>> +2.xml.businessLocal.notInterface = The value of <business-local>
>>> is not an interface: {0}
>>> +3.xml.businessLocal.notInterface = The <business-local> element
>>> of the ejb-jar.xml must be an interface. Classes, abstract
>>> classes or enums are not allowed. Either convert {0} to an
>>> interface or remove the related <business-local> xml tag from your
>>> ejb-jar.xml
>>>
>>> Added: 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=677503&view=auto
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> --- openejb/trunk/openejb3/container/openejb-core/src/test/java/
>>> org/apache/openejb/config/rules/InvalidInterfacesTest.java (added)
>>> +++ openejb/trunk/openejb3/container/openejb-core/src/test/java/
>>> org/apache/openejb/config/rules/InvalidInterfacesTest.java Wed Jul
>>> 16 22:32:23 2008
>>> @@ -0,0 +1,88 @@
>>> +/**
>>> + * 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.config.rules;
>>> +
>>> +import junit.framework.TestCase;
>>> +import org.apache.openejb.assembler.classic.ContainerSystemInfo;
>>> +import
>>> org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
>>> +import org.apache.openejb.config.ConfigurationFactory;
>>> +import org.apache.openejb.config.ValidationFailedException;
>>> +import org.apache.openejb.config.ValidationFailure;
>>> +import org.apache.openejb.jee.EjbJar;
>>> +import org.apache.openejb.jee.StatelessBean;
>>> +
>>> +import javax.ejb.EJBHome;
>>> +import javax.ejb.EJBLocalHome;
>>> +import javax.ejb.EJBLocalObject;
>>> +import javax.ejb.EJBObject;
>>> +import javax.ejb.Local;
>>> +import javax.ejb.Remote;
>>> +
>>> +/**
>>> + * @version $Rev$ $Date$
>>> + */
>>> +public class InvalidInterfacesTest extends TestCase {
>>> + private ConfigurationFactory config;
>>> +
>>> + public void testBadHomeAndLocal() 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);
>>> +
>>> + try {
>>> + config.configureApplication(ejbJar);
>>> + } catch (ValidationFailedException e) {
>>> + for (ValidationFailure failure : e.getFailures()) {
>>> + System.out.println("failure = " +
>>> failure.getMessageKey());
>>> + }
>>> + }
>>> +
>>> + }
>>> +
>>> + public void setUp() throws Exception {
>>> + config = new ConfigurationFactory(true);
>>> + ContainerSystemInfo containerSystem =
>>> config.getOpenEjbConfiguration().containerSystem;
>>> +
>>> containerSystem
>>> .containers
>>> .add(config.configureService(StatelessSessionContainerInfo.class));
>>> + }
>>> +
>>> + public static class FooBean {
>>> +
>>> + }
>>> +
>>> + public static interface FooEJBHome extends EJBHome {
>>> + }
>>> +
>>> + public static interface FooEJBObject extends EJBObject {
>>> + }
>>> +
>>> + public static interface FooEJBLocalHome extends EJBLocalHome {
>>> + }
>>> +
>>> + public static interface FooEJBLocalObject extends
>>> EJBLocalObject {
>>> + }
>>> +
>>> + @Remote
>>> + public static interface FooRemote {
>>> + }
>>> +
>>> + @Local
>>> + public static interface FooLocal {
>>> + }
>>> +
>>> +}
>>>
>>>
>>>
>>>
>>
>>
>
>
Re: svn commit: r677503 - in /openejb/trunk/openejb3/container/openejb-core/src: main/java/org/apache/openejb/assembler/classic/ main/java/org/apache/openejb/config/ main/java/org/apache/openejb/config/rules/ main/java/org/apache/openejb/util/ main/resourc...
Posted by David Blevins <da...@visi.com>.
Whoops! Fixing.
-David
On Jul 17, 2008, at 6:02 AM, Rick McGuire wrote:
> David,
>
> I'm now getting tons of test case errors trying to build...is there
> additional test case cleanup required, or is the validation acting
> too aggresively?
>
> Rick
>
> dblevins@apache.org wrote:
>> Author: dblevins
>> Date: Wed Jul 16 22:32:23 2008
>> New Revision: 677503
>>
>> URL: http://svn.apache.org/viewvc?rev=677503&view=rev
>> Log:
>> OPENEJB-859: Improved validation for <home>, <remote>, <local-
>> home>, <local>, <business-local> and <business-remote> elements
>> Rewrote this validation completely to be more aggressive in
>> figuring out what the user might have intended to do.
>>
>> Added:
>> openejb/trunk/openejb3/container/openejb-core/src/test/java/org/
>> apache/openejb/config/rules/InvalidInterfacesTest.java
>> Modified:
>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/
>> apache/openejb/assembler/classic/JndiBuilder.java
>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/
>> apache/openejb/config/ValidationException.java
>> 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/util/Strings.java
>> openejb/trunk/openejb3/container/openejb-core/src/main/resources/
>> org/apache/openejb/config/rules/Messages.properties
>>
>> Modified: openejb/trunk/openejb3/container/openejb-core/src/main/
>> java/org/apache/openejb/assembler/classic/JndiBuilder.java
>> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?rev=677503&r1=677502&r2=677503&view=diff
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/
>> apache/openejb/assembler/classic/JndiBuilder.java (original)
>> +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/
>> apache/openejb/assembler/classic/JndiBuilder.java Wed Jul 16
>> 22:32:23 2008
>> @@ -29,6 +29,7 @@
>> import org.apache.openejb.spi.ContainerSystem;
>> import org.apache.openejb.util.LogCategory;
>> import org.apache.openejb.util.Logger;
>> +import org.apache.openejb.util.Strings;
>> import org.apache.openejb.loader.SystemInstance;
>> import org.apache.openejb.core.CoreDeploymentInfo;
>> import org.apache.openejb.core.ivm.naming.BusinessLocalReference;
>> @@ -126,21 +127,10 @@
>> this.type = type;
>> this.annotatedName = annotatedName;
>> this.xmlName = xmlName;
>> - this.xmlNameCc = camelCase(xmlName);
>> + this.xmlNameCc = Strings.camelCase(xmlName);
>> this.openejbLegacy = openejbLegacy;
>> }
>> - private String camelCase(String string){
>> - StringBuilder sb = new StringBuilder();
>> - String[] strings = string.split("-");
>> - for (String s : strings) {
>> - int l = sb.length();
>> - sb.append(s);
>> - sb.setCharAt(l,
>> Character.toUpperCase(sb.charAt(l)));
>> - }
>> - return sb.toString();
>> - }
>> -
>> public InterfaceType getType() {
>> return type;
>>
>> Modified: openejb/trunk/openejb3/container/openejb-core/src/main/
>> java/org/apache/openejb/config/ValidationException.java
>> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java?rev=677503&r1=677502&r2=677503&view=diff
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/
>> apache/openejb/config/ValidationException.java (original)
>> +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/
>> apache/openejb/config/ValidationException.java Wed Jul 16 22:32:23
>> 2008
>> @@ -36,6 +36,10 @@
>> }
>> }
>> + public String getMessageKey(){
>> + return message;
>> + }
>> + public Object[] getDetails() {
>> return details;
>> }
>>
>> 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=677503&r1=677502&r2=677503&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 Wed Jul 16 22:32:23
>> 2008
>> @@ -24,12 +24,15 @@
>> import org.apache.openejb.jee.Interceptor;
>> import org.apache.openejb.config.EjbModule;
>> import org.apache.openejb.util.SafeToolkit;
>> +import org.apache.openejb.util.Strings;
>> import org.apache.xbean.finder.ClassFinder;
>> import javax.ejb.EJBLocalHome;
>> import javax.ejb.EJBLocalObject;
>> import javax.ejb.EJBHome;
>> import javax.ejb.EJBObject;
>> +import javax.ejb.Local;
>> +import javax.ejb.Remote;
>> import javax.jws.WebService;
>> import static java.lang.reflect.Modifier.isAbstract;
>> import java.lang.reflect.Method;
>> @@ -69,38 +72,40 @@
>> public void validate(EjbModule ejbModule) {
>> for (EnterpriseBean bean :
>> ejbModule.getEjbJar().getEnterpriseBeans()) {
>> try {
>> - check_hasEjbClass(bean);
>> + Class<?> beanClass = check_hasEjbClass(bean);
>> if (!(bean instanceof RemoteBean)) continue;
>> RemoteBean b = (RemoteBean) bean;
>> check_isEjbClass(b);
>> - check_hasDependentClasses(b, b.getEjbClass(),
>> "<ejb-class>");
>> + check_hasDependentClasses(b, b.getEjbClass(), "ejb-
>> class");
>> check_hasInterface(b);
>> +
>> + if (b.getRemote() != null){
>> + checkInterface(b, beanClass, "remote",
>> b.getRemote());
>> + }
>> +
>> if (b.getHome() != null) {
>> - check_hasHomeClass(b);
>> - check_hasRemoteClass(b);
>> - check_isHomeInterface(b);
>> - check_isRemoteInterface(b);
>> - check_hasDependentClasses(b, b.getHome(),
>> "<home>");
>> - check_hasDependentClasses(b, b.getRemote(),
>> "<remote>");
>> + checkInterface(b, beanClass, "home",
>> b.getHome());
>> + }
>> +
>> + if (b.getLocal() != null) {
>> + checkInterface(b, beanClass, "local",
>> b.getLocal());
>> }
>> +
>> if (b.getLocalHome() != null) {
>> - check_hasLocalHomeClass(b);
>> - check_hasLocalClass(b);
>> - check_isLocalHomeInterface(b);
>> - check_isLocalInterface(b);
>> - check_hasDependentClasses(b, b.getLocalHome(),
>> "<local-home>");
>> - check_hasDependentClasses(b, b.getLocal(),
>> "<local>");
>> + checkInterface(b, beanClass, "local-home",
>> b.getLocalHome());
>> }
>> if (b instanceof SessionBean) {
>> SessionBean sessionBean = (SessionBean) b;
>> +
>> for (String interfce :
>> sessionBean.getBusinessLocal()) {
>> - check_businessInterface(sessionBean,
>> interfce, "<business-local>");
>> + checkInterface(b, beanClass, "business-
>> local", interfce);
>> }
>> +
>> for (String interfce :
>> sessionBean.getBusinessRemote()) {
>> - check_businessInterface(sessionBean,
>> interfce, "<business-remote>");
>> + checkInterface(b, beanClass, "business-
>> local", interfce);
>> }
>> }
>> } catch (RuntimeException e) {
>> @@ -113,35 +118,30 @@
>> }
>> }
>> - private void check_businessInterface(SessionBean b, String
>> interfaceName, String tagName) {
>> - String ejbName = b.getEjbName();
>> - Class<?> interfce = lookForClass(interfaceName, tagName,
>> b.getEjbName());
>> + private void checkInterface(RemoteBean b, Class<?> beanClass,
>> String tag, String className) {
>> + Class<?> interfce = lookForClass(className, tag,
>> b.getEjbName());
>> - if (!interfce.isInterface()){
>> - fail(b, "notAnInterface", interfce.getName(), tagName);
>> - }
>> + if (interfce == null) return;
>> +
>> + check_hasDependentClasses(b, className, tag);
>> +
>> + tag = Strings.lcfirst(Strings.camelCase(tag));
>> +
>> + if (isValidInterface(b, interfce, beanClass, tag));
>> ClassFinder finder = new ClassFinder(interfce);
>> for (Class<? extends Annotation> annotation :
>> beanOnlyAnnotations) {
>> +
>> if (interfce.isAnnotationPresent(annotation)){
>> warn(b, "interface.beanOnlyAnnotation",
>> annotation.getSimpleName(), interfce.getName(), b.getEjbClass());
>> }
>> +
>> for (Method method :
>> finder.findAnnotatedMethods(annotation)) {
>> warn(b, "interfaceMethod.beanOnlyAnnotation",
>> annotation.getSimpleName(), interfce.getName(), method.getName(),
>> b.getEjbClass());
>> }
>> }
>> - if (EJBHome.class.isAssignableFrom(interfce)){
>> - fail(ejbName, "xml.businessRemoteOrLocal.ejbHome",
>> tagName, interfce.getName());
>> - } else if (EJBObject.class.isAssignableFrom(interfce)){
>> - fail(ejbName, "xml.businessRemoteOrLocal.ejbObject",
>> tagName, interfce.getName());
>> - } else if (EJBLocalHome.class.isAssignableFrom(interfce)) {
>> - fail(ejbName,
>> "xml.businessRemoteOrLocal.ejbLocalHome", tagName,
>> interfce.getName());
>> - } else if (EJBLocalObject.class.isAssignableFrom(interfce)){
>> - fail(ejbName,
>> "xml.businessRemoteOrLocal.ejbLocalObject", tagName,
>> interfce.getName());
>> - }
>> -
>> }
>> private void check_hasInterface(RemoteBean b) {
>> @@ -187,7 +187,8 @@
>> # 2 - Element (home, ejb-class, remote)
>> # 3 - Bean name
>> */
>> - fail(b, "missing.dependent.class", className,
>> e.getMessage(), type, b.getEjbName());
>> + String missingClass = e.getMessage();
>> + fail(b, "missing.dependent.class", className,
>> missingClass, type, b.getEjbName());
>> } catch (NoClassDefFoundError e) {
>> /*
>> # 0 - Referring Class name
>> @@ -195,19 +196,12 @@
>> # 2 - Element (home, ejb-class, remote)
>> # 3 - Bean name
>> */
>> - fail(b, "missing.dependent.class", className,
>> e.getMessage(), type, b.getEjbName());
>> + String missingClass = e.getMessage();
>> + fail(b, "missing.dependent.class", className,
>> missingClass, type, b.getEjbName());
>> }
>> }
>> - private void check_hasLocalClass(RemoteBean b) {
>> - lookForClass(b.getLocal(), "<local>", b.getEjbName());
>> - }
>> -
>> - private void check_hasLocalHomeClass(RemoteBean b) {
>> - lookForClass(b.getLocalHome(), "<local-home>",
>> b.getEjbName());
>> - }
>> -
>> - public void check_hasEjbClass(EnterpriseBean b) {
>> + public Class<?> check_hasEjbClass(EnterpriseBean b) {
>> String ejbName = b.getEjbName();
>> @@ -217,32 +211,22 @@
>> fail(ejbName, "interfaceDeclaredAsBean",
>> beanClass.getName());
>> }
>> - if (isCmp(b)) return;
>> + if (isCmp(b)) return beanClass;
>> if (isAbstract(beanClass.getModifiers())){
>> fail(ejbName, "abstractDeclaredAsBean",
>> beanClass.getName());
>> }
>> - }
>> -
>> - public void check_hasInterceptorClass(Interceptor i) {
>> -
>> - lookForClass(i.getInterceptorClass(), "<interceptor-
>> class>", "Interceptor");
>> + return beanClass;
>> }
>> - public void check_hasHomeClass(RemoteBean b) {
>> + private void check_hasInterceptorClass(Interceptor i) {
>> - lookForClass(b.getHome(), "<home>", b.getEjbName());
>> + lookForClass(i.getInterceptorClass(), "interceptor-class",
>> "Interceptor");
>> }
>> - public void check_hasRemoteClass(RemoteBean b) {
>> -
>> - lookForClass(b.getRemote(), "<remote>", b.getEjbName());
>> -
>> - }
>> -
>> - public void check_isEjbClass(RemoteBean b) {
>> + private void check_isEjbClass(RemoteBean b) {
>> if (b instanceof SessionBean) {
>> @@ -258,26 +242,6 @@
>> }
>> - private void check_isLocalInterface(RemoteBean b) {
>> - compareTypes(b, b.getLocal(), EJBLocalObject.class);
>> - }
>> -
>> - private void check_isLocalHomeInterface(RemoteBean b) {
>> - compareTypes(b, b.getLocalHome(), EJBLocalHome.class);
>> - }
>> -
>> - public void check_isHomeInterface(RemoteBean b) {
>> -
>> - compareTypes(b, b.getHome(), javax.ejb.EJBHome.class);
>> -
>> - }
>> -
>> - public void check_isRemoteInterface(RemoteBean b) {
>> -
>> - compareTypes(b, b.getRemote(), javax.ejb.EJBObject.class);
>> -
>> - }
>> -
>> private Class<?> lookForClass(String clazz, String type, String
>> ejbName) {
>> try {
>> return loadClass(clazz);
>> @@ -305,6 +269,63 @@
>> return null;
>> }
>> + private boolean isValidInterface(RemoteBean b, Class clazz,
>> Class beanClass, String tag) {
>> +
>> + if (clazz.equals(beanClass)) {
>> +
>> + fail(b, "xml." + tag + ".beanClass", clazz.getName());
>> +
>> + } else if (!clazz.isInterface()) {
>> +
>> + fail(b, "xml." + tag + ".notInterface",
>> clazz.getName());
>> +
>> + } else if (EJBHome.class.isAssignableFrom(clazz)) {
>> +
>> + if (tag.equals("home")) return true;
>> +
>> + fail(b, "xml." + tag + ".ejbHome", clazz.getName());
>> +
>> + } else if (EJBLocalHome.class.isAssignableFrom(clazz)) {
>> +
>> + if (tag.equals("local-home")) return true;
>> +
>> + fail(b, "xml." + tag + ".ejbLocalHome",
>> clazz.getName());
>> +
>> + } else if (EJBObject.class.isAssignableFrom(clazz)) {
>> +
>> + if (tag.equals("remote")) return true;
>> +
>> + fail(b, "xml." + tag + ".ejbObject", clazz.getName());
>> +
>> + } else if (EJBLocalObject.class.isAssignableFrom(clazz)) {
>> +
>> + if (tag.equals("local")) return true;
>> +
>> + fail(b, "xml." + tag + ".ejbLocalObject",
>> clazz.getName());
>> +
>> + } else if (tag.equals("businessLocal") &&
>> tag.equals("businessRemote")) {
>> +
>> + return true;
>> + }
>> +
>> + // must be tagged as <home>, <local-home>, <remote>, or
>> <local>
>> + if (clazz.isAnnotationPresent(Local.class)) {
>> +
>> + fail(b, "xml." + tag + ".businessLocal",
>> clazz.getName());
>> +
>> + } else if (clazz.isAnnotationPresent(Remote.class)) {
>> +
>> + fail(b, "xml." + tag + ".businessRemote",
>> clazz.getName());
>> +
>> + } else {
>> +
>> + fail(b, "xml." + tag + ".unknown", clazz.getName());
>> +
>> + }
>> +
>> + return false;
>> + }
>> +
>> private void compareTypes(RemoteBean b, String clazz1, Class<?>
>> class2) {
>> Class<?> class1 = null;
>> try {
>>
>> Modified: openejb/trunk/openejb3/container/openejb-core/src/main/
>> java/org/apache/openejb/util/Strings.java
>> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java?rev=677503&r1=677502&r2=677503&view=diff
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/
>> apache/openejb/util/Strings.java (original)
>> +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/
>> apache/openejb/util/Strings.java Wed Jul 16 22:32:23 2008
>> @@ -70,4 +70,15 @@
>> return sb.toString();
>> }
>> + public static String camelCase(String string){
>> + StringBuilder sb = new StringBuilder();
>> + String[] strings = string.split("-");
>> + for (String s : strings) {
>> + int l = sb.length();
>> + sb.append(s);
>> + sb.setCharAt(l, Character.toUpperCase(sb.charAt(l)));
>> + }
>> + return sb.toString();
>> + }
>> +
>> }
>>
>> 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=677503&r1=677502&r2=677503&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 16 22:32:23 2008
>> @@ -47,7 +47,7 @@
>> # 2 - Bean name
>> 1.missing.class Missing class
>> 2.missing.class Missing class {0}
>> -3.missing.class The class {0} not found. Check that the
>> class specified in the {1} element for bean {2} is spelled
>> correctly and the class is present in the jar
>> +3.missing.class The class {0} not found. Check that the
>> class specified in the <{1}> element for bean {2} is spelled
>> correctly and the class is present in the jar
>> # 0 - Class name
>> # 1 - EJB Class name
>> @@ -125,9 +125,10 @@
>> # 1 - Dependent Class name
>> # 2 - Element (home, ejb-class, remote)
>> # 3 - Bean name
>> +# fail(b, "missing.dependent.class", className, missingClass,
>> type, b.getEjbName());
>> 1.missing.dependent.class Missing dependent class or
>> library
>> -2.missing.dependent.class Missing dependent class or
>> library: {1} needed by {2}
>> -3.missing.dependent.class The class {1} not found and is
>> referenced by the {2} class {0}. The Check that the class or
>> related library is available in the classpath
>> +2.missing.dependent.class Missing dependent class or
>> library: {1} needed by {0}
>> +3.missing.dependent.class The class {1} not found and is
>> referenced by the <{2}> class {0}. The Check that the class or
>> related library is available in the classpath
>> # CheckAssemblyBindings.java
>> @@ -304,26 +305,6 @@
>> 2.ann.remoteOrLocal.ejbLocalObject = @{0} used in bean class lists
>> a javax.ejb.EJBLocalObject interface. Use @LocalHome with home
>> interface of "{1}".
>> 3.ann.remoteOrLocal.ejbLocalObject = When applied to a bean class,
>> the @{0} annotation must only list business interfaces and cannot
>> list legacy EJBLocalObject interfaces. The EJBLocalHome of
>> interface for "{1}" can be annotated on the bean class with
>> @LocalHome
>> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbHome", tagName,
>> interfce.getName());
>> -1.xml.businessRemoteOrLocal.ejbHome = javax.ejb.EJBHome interface
>> declared as {0}.
>> -2.xml.businessRemoteOrLocal.ejbHome = javax.ejb.EJBHome interface
>> declared as {0}. Use <home>{1}</home>
>> -3.xml.businessRemoteOrLocal.ejbHome = Interfaces extending
>> javax.ejb.EJBHome pre-date the concept of EJB 3.0 simplified
>> business interfaces and must not use the {0} tag when declared in
>> the ejb-jar.xml. Declare this interface as <home>{1}</home>.
>> -
>> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalHome", tagName,
>> interfce.getName());
>> -1.xml.businessRemoteOrLocal.ejbLocalHome = javax.ejb.EJBLocalHome
>> interface declared as {0}.
>> -2.xml.businessRemoteOrLocal.ejbLocalHome = javax.ejb.EJBLocalHome
>> interface declared as {0}. Use <local-home>{1}</local-home>
>> -3.xml.businessRemoteOrLocal.ejbLocalHome = Interfaces extending
>> javax.ejb.EJBLocalHome pre-date the concept of EJB 3.0 simplified
>> business interfaces and must not use the {0} tag when declared in
>> the ejb-jar.xml. Declare this interface as <local-home>{1}</local-
>> home>.
>> -
>> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbObject", tagName,
>> interfce.getName());
>> -1.xml.businessRemoteOrLocal.ejbObject = javax.ejb.EJBObject
>> interface declared as {0}.
>> -2.xml.businessRemoteOrLocal.ejbObject = javax.ejb.EJBObject
>> interface declared as {0}. Use <remote>{1}</remote>
>> -3.xml.businessRemoteOrLocal.ejbObject = Interfaces extending
>> javax.ejb.EJBObject pre-date the concept of EJB 3.0 simplified
>> business interfaces and must not use the {0} tag when declared in
>> the ejb-jar.xml. Declare this interface as <remote>{1}</remote>.
>> -
>> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalObject",
>> tagName, interfce.getName());
>> -1.xml.businessRemoteOrLocal.ejbLocalObject =
>> javax.ejb.EJBLocalObject interface declared as {0}.
>> -2.xml.businessRemoteOrLocal.ejbLocalObject =
>> javax.ejb.EJBLocalObject interface declared as {0}. Use <local>{1}</
>> local>
>> -3.xml.businessRemoteOrLocal.ejbLocalObject = Interfaces extending
>> javax.ejb.EJBLocalObject pre-date the concept of EJB 3.0 simplified
>> business interfaces and must not use the {0} tag when declared in
>> the ejb-jar.xml. Declare this interface as <local>{1}</local>.
>> -
>> # warn(bean, "ignoredStatefulAnnotation", annotationType, beanType,
>> methodName);
>> 1.ignoredStatefulAnnotation = @{0} is ignored for beans of type {1}
>> 2.ignoredStatefulAnnotation = @{0} is ignored for beans of type
>> {1}. Method: {2}
>> @@ -524,11 +505,6 @@
>> Which can then be implemented by the {0} class.\
>> -# fail(b, "notAnInterface", interfce.getName(), tagName);
>> -1.notAnInterface = Business remotes and locals must be interfaces.
>> -2.notAnInterface = Class tagged as {1} is not an interface: {0}
>> -3.notAnInterface = All business remote and business local views
>> must be java interfaces. Classes, abstract classes or enums are
>> not allowed. Either convert {0} to an interface or remove the
>> related {1} xml tag from your ejb-jar.xml.
>> -
>> # fail(ejbName, "ann.notAnInterface", annotationName,
>> interfce.getName());
>> 1.ann.notAnInterface = @{0} lists a non-interface.
>> 2.ann.notAnInterface = @{0} lists a non-interface: {1}
>> @@ -574,3 +550,195 @@
>> 2.ann.invalidConcurrencyAttribute = Ignoring {0} invalid @Lock
>> annotations. Bean not using Container-Managed Concurrencys.
>> 3.ann.invalidConcurrencyAttribute = The @Lock annotation applies
>> only to beans using Container-Managed Concurrencys. Beans marked
>> as @ConcurrencyManagement(BEAN) are responsible for thier own
>> concurrency and may not use the @Lock annotation. There are {0}
>> such invalid annotations in the bean class that will be ignored and
>> should be removed.
>> +
>> +1.xml.home.ejbLocalHome = javax.ejb.EJBLocalHome interface
>> declared as <home>. Use <local-home>{0}</local-home>
>> +2.xml.home.ejbLocalHome = javax.ejb.EJBLocalHome interface
>> declared as <home>. Use <local-home>{0}</local-home>
>> +3.xml.home.ejbLocalHome = The <home> element is for interfaces
>> extending javax.ejb.EJBHome. The interface supplied is a
>> javax.ejb.EJBLocalHome and should be declared with the <local-home>
>> element as in: <local-home>{0}</local-home>
>> +
>> +1.xml.home.ejbObject = javax.ejb.EJBObject interface declared as
>> <home>. Use <remote>{0}</remote>
>> +2.xml.home.ejbObject = javax.ejb.EJBObject interface declared as
>> <home>. Use <remote>{0}</remote>
>> +3.xml.home.ejbObject = The <home> element is for interfaces
>> extending javax.ejb.EJBHome. The interface supplied is a
>> javax.ejb.EJBObject and should be declared with the <remote>
>> element as in: <remote>{0}</remote>
>> +
>> +1.xml.home.ejbLocalObject = javax.ejb.EJBLocalObject interface
>> declared as <home>. Use <local>{0}</local>
>> +2.xml.home.ejbLocalObject = javax.ejb.EJBLocalObject interface
>> declared as <home>. Use <local>{0}</local>
>> +3.xml.home.ejbLocalObject = The <home> element is for interfaces
>> extending javax.ejb.EJBHome. The interface supplied is a
>> javax.ejb.EJBLocalObject and should be declared with the <local>
>> element as in: <local>{0}</local>
>> +
>> +1.xml.home.businessLocal = EJB 3.0 business interface declared as
>> <home>. Use <business-local>{0}</business-local>
>> +2.xml.home.businessLocal = EJB 3.0 business interface declared as
>> <home>. Use <business-local>{0}</business-local>
>> +3.xml.home.businessLocal = The <home> element of the ejb-jar.xml
>> is for interfaces extending javax.ejb.EJBHome. EJB 3.0 simplified
>> business interfaces can be decalred via <business-local>{0}</
>> business-local> or via the @Remote annotation on the bean class or
>> interface class.
>> +
>> +1.xml.home.businessRemote = EJB 3.0 business interface declared as
>> <home>. Use <business-remote>{0}</business-remote>
>> +2.xml.home.businessRemote = EJB 3.0 business interface declared as
>> <home>. Use <business-remote>{0}</business-remote>
>> +3.xml.home.businessRemote = The <home> element of the ejb-jar.xml
>> is for interfaces extending javax.ejb.EJBHome. EJB 3.0 simplified
>> business interfaces can be decalred via <business-remote>{0}</
>> business-remote> or via the @Remote annotation on the bean class or
>> interface class.
>> +
>> +1.xml.home.beanClass = Bean class mistakenly declared as <home>
>> +2.xml.home.beanClass = Bean class mistakenly declared as <home>
>> +3.xml.home.beanClass = The <home> element of the ejb-jar.xml is
>> for interfaces extending javax.ejb.EJBHome. The bean class cannot
>> be used as a home interface.
>> +
>> +1.xml.home.notInterface = The value of <home> is not an interface
>> +2.xml.home.notInterface = The value of <home> is not an interface:
>> {0}
>> +3.xml.home.notInterface = The <home> element of the ejb-jar.xml is
>> for interfaces extending javax.ejb.EJBHome. Classes, abstract
>> classes or enums are not allowed. Either convert {0} to an
>> interface or remove the related <home> xml tag from your ejb-jar.xml
>> +
>> +1.xml.home.unknown = The value of <home> must be an interface
>> extending javax.ejb.EJBHome
>> +2.xml.home.unknown = The value of <home> must be an interface
>> extending javax.ejb.EJBHome
>> +3.xml.home.unknown = The <home> element of the ejb-jar.xml is for
>> interfaces extending javax.ejb.EJBHome. If this interface is
>> intended to be an EJB 3.0 business remote view, declare this
>> interface as <business-remote>{0}</business-remote> or via the
>> @Remote annotation on the bean class or interface class.
>> +
>> +
>> +
>> +1.xml.remote.ejbHome = javax.ejb.EJBHome interface declared as
>> <remote>. Use <home>{0}</home>
>> +2.xml.remote.ejbHome = javax.ejb.EJBHome interface declared as
>> <remote>. Use <home>{0}</home>
>> +3.xml.remote.ejbHome = The <remote> element is for interfaces
>> extending javax.ejb.EJBObject. The interface supplied is a
>> javax.ejb.EJBHome and should be declared with the <home> element as
>> in: <home>{0}</home>
>> +
>> +1.xml.remote.ejbLocalHome = javax.ejb.EJBLocalHome interface
>> declared as <remote>. Use <local-home>{0}</local-home>
>> +2.xml.remote.ejbLocalHome = javax.ejb.EJBLocalHome interface
>> declared as <remote>. Use <local-home>{0}</local-home>
>> +3.xml.remote.ejbLocalHome = The <remote> element is for interfaces
>> extending javax.ejb.EJBHome. The interface supplied is a
>> javax.ejb.EJBLocalHome and should be declared with the <local-home>
>> element as in: <local-home>{0}</local-home>
>> +
>> +1.xml.remote.ejbLocalObject = javax.ejb.EJBLocalObject interface
>> declared as <remote>. Use <local>{0}</local>
>> +2.xml.remote.ejbLocalObject = javax.ejb.EJBLocalObject interface
>> declared as <remote>. Use <local>{0}</local>
>> +3.xml.remote.ejbLocalObject = The <remote> element is for
>> interfaces extending javax.ejb.EJBObject. The interface supplied
>> is a javax.ejb.EJBLocalObject and should be declared with the
>> <local> element as in: <local>{0}</local>
>> +
>> +# must be attempting an override
>> +1.xml.remote.businessLocal = EJB 3.0 business interface declared
>> as <remote>. Use <business-remote>{0}</business-remote>
>> +2.xml.remote.businessLocal = EJB 3.0 business interface declared
>> as <remote>. Use <business-remote>{0}</business-remote>
>> +3.xml.remote.businessLocal = The <remote> element of the ejb-
>> jar.xml is for interfaces extending javax.ejb.EJBObject. EJB 3.0
>> simplified business interfaces can be decalred via <business-
>> local>{0}</business-local> or via the @Remote annotation on the
>> bean class or interface class.
>> +
>> +1.xml.remote.businessRemote = EJB 3.0 business interface declared
>> as <remote>. Use <business-remote>{0}</business-remote>
>> +2.xml.remote.businessRemote = EJB 3.0 business interface declared
>> as <remote>. Use <business-remote>{0}</business-remote>
>> +3.xml.remote.businessRemote = The <remote> element of the ejb-
>> jar.xml is for interfaces extending javax.ejb.EJBObject. EJB 3.0
>> simplified business interfaces can be decalred via <business-
>> remote>{0}</business-remote> or via the @Remote annotation on the
>> bean class or interface class.
>> +
>> +1.xml.remote.beanClass = Bean class mistakenly declared as <remote>
>> +2.xml.remote.beanClass = Bean class mistakenly declared as <remote>
>> +3.xml.remote.beanClass = The <remote> element of the ejb-jar.xml
>> is for interfaces extending javax.ejb.EJBObject. The bean class
>> cannot be used as a home interface.
>> +
>> +1.xml.remote.notInterface = The value of <remote> is not an
>> interface
>> +2.xml.remote.notInterface = The value of <remote> is not an
>> interface: {0}
>> +3.xml.remote.notInterface = The <remote> element of the ejb-
>> jar.xml is for interfaces extending javax.ejb.EJBObject. Classes,
>> abstract classes or enums are not allowed. Either convert {0} to
>> an interface or remove the related <remote> xml tag from your ejb-
>> jar.xml
>> +
>> +1.xml.remote.unknown = The value of <remote> must be an interface
>> extending javax.ejb.EJBObject
>> +2.xml.remote.unknown = The value of <remote> must be an interface
>> extending javax.ejb.EJBObject
>> +3.xml.remote.unknown = The <remote> element of the ejb-jar.xml is
>> for interfaces extending javax.ejb.EJBObject. If this interface is
>> intended to be an EJB 3.0 business remote view, declare this
>> interface as <business-remote>{0}</business-remote> or via the
>> @Remote annotation on the bean class or interface class.
>> +
>> +
>> +
>> +
>> +1.xml.localHome.ejbHome = javax.ejb.EJBHome interface declared as
>> <local-home>. Use <home>{0}</home>
>> +2.xml.localHome.ejbHome = javax.ejb.EJBHome interface declared as
>> <local-home>. Use <home>{0}</home>
>> +3.xml.localHome.ejbHome = The <local-home> element is for
>> interfaces extending javax.ejb.EJBLocalHome. The interface
>> supplied is a javax.ejb.EJBHome and should be declared with the
>> <home> element as in: <home>{0}</home>
>> +
>> +1.xml.localHome.ejbObject = javax.ejb.EJBObject interface declared
>> as <local-home>. Use <remote>{0}</remote>
>> +2.xml.localHome.ejbObject = javax.ejb.EJBObject interface declared
>> as <local-home>. Use <remote>{0}</remote>
>> +3.xml.localHome.ejbObject = The <local-home> element is for
>> interfaces extending javax.ejb.EJBLocalHome. The interface
>> supplied is a javax.ejb.EJBObject and should be declared with the
>> <remote> element as in: <remote>{0}</remote>
>> +
>> +1.xml.localHome.ejbLocalObject = javax.ejb.EJBLocalObject
>> interface declared as <local-home>. Use <local>{0}</local>
>> +2.xml.localHome.ejbLocalObject = javax.ejb.EJBLocalObject
>> interface declared as <local-home>. Use <local>{0}</local>
>> +3.xml.localHome.ejbLocalObject = The <local-home> element is for
>> interfaces extending javax.ejb.EJBLocalHome. The interface
>> supplied is a javax.ejb.EJBLocalObject and should be declared with
>> the <local> element as in: <local>{0}</local>
>> +
>> +1.xml.localHome.businessLocal = EJB 3.0 business interface
>> declared as <local-home>. Use <business-local>{0}</business-local>
>> +2.xml.localHome.businessLocal = EJB 3.0 business interface
>> declared as <local-home>. Use <business-local>{0}</business-local>
>> +3.xml.localHome.businessLocal = The <local-home> element of the
>> ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome.
>> EJB 3.0 simplified business interfaces can be decalred via
>> <business-local>{0}</business-local> or via the @Remote annotation
>> on the bean class or interface class.
>> +
>> +1.xml.localHome.businessRemote = EJB 3.0 business interface
>> declared as <local-home>. Use <business-remote>{0}</business-remote>
>> +2.xml.localHome.businessRemote = EJB 3.0 business interface
>> declared as <local-home>. Use <business-remote>{0}</business-remote>
>> +3.xml.localHome.businessRemote = The <local-home> element of the
>> ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome.
>> EJB 3.0 simplified business interfaces can be decalred via
>> <business-remote>{0}</business-remote> or via the @Remote
>> annotation on the bean class or interface class.
>> +
>> +1.xml.localHome.beanClass = Bean class mistakenly declared as
>> <local-home>
>> +2.xml.localHome.beanClass = Bean class mistakenly declared as
>> <local-home>
>> +3.xml.localHome.beanClass = The <local-home> element of the ejb-
>> jar.xml is for interfaces extending javax.ejb.EJBLocalHome. The
>> bean class cannot be used as a home interface.
>> +
>> +1.xml.localHome.notInterface = The value of <local-home> is not an
>> interface
>> +2.xml.localHome.notInterface = The value of <local-home> is not an
>> interface: {0}
>> +3.xml.localHome.notInterface = The <local-home> element of the ejb-
>> jar.xml is for interfaces extending javax.ejb.EJBLocalHome.
>> Classes, abstract classes or enums are not allowed. Either convert
>> {0} to an interface or remove the related <local-home> xml tag from
>> your ejb-jar.xml
>> +
>> +1.xml.localHome.unknown = The value of <local-home> must be an
>> interface extending javax.ejb.EJBLocalHome
>> +2.xml.localHome.unknown = The value of <local-home> must be an
>> interface extending javax.ejb.EJBLocalHome
>> +3.xml.localHome.unknown = The <local-home> element of the ejb-
>> jar.xml is for interfaces extending javax.ejb.EJBLocalHome. If
>> this interface is intended to be an EJB 3.0 business local view,
>> declare this interface as <business-local>{0}</business-local> or
>> via the @Local annotation on the bean class or interface class.
>> +
>> +
>> +
>> +
>> +1.xml.local.ejbHome = javax.ejb.EJBHome interface declared as
>> <local>. Use <home>{0}</home>
>> +2.xml.local.ejbHome = javax.ejb.EJBHome interface declared as
>> <local>. Use <home>{0}</home>
>> +3.xml.local.ejbHome = The <local> element is for interfaces
>> extending javax.ejb.EJBLocalObject. The interface supplied is a
>> javax.ejb.EJBHome and should be declared with the <home> element as
>> in: <home>{0}</home>
>> +
>> +1.xml.local.ejbLocalHome = javax.ejb.EJBLocalHome interface
>> declared as <local>. Use <local-home>{0}</local-home>
>> +2.xml.local.ejbLocalHome = javax.ejb.EJBLocalHome interface
>> declared as <local>. Use <local-home>{0}</local-home>
>> +3.xml.local.ejbLocalHome = The <local> element is for interfaces
>> extending javax.ejb.EJBLocalObject. The interface supplied is a
>> javax.ejb.EJBLocalHome and should be declared with the <local-home>
>> element as in: <local-home>{0}</local-home>
>> +
>> +1.xml.local.ejbObject = javax.ejb.EJBObject interface declared as
>> <local>. Use <remote>{0}</remote>
>> +2.xml.local.ejbObject = javax.ejb.EJBObject interface declared as
>> <local>. Use <remote>{0}</remote>
>> +3.xml.local.ejbObject = The <local> element is for interfaces
>> extending javax.ejb.EJBLocalObject. The interface supplied is a
>> javax.ejb.EJBObject and should be declared with the <remote>
>> element as in: <remote>{0}</remote>
>> +
>> +1.xml.local.businessLocal = EJB 3.0 business interface declared as
>> <local>. Use <business-local>{0}</business-local>
>> +2.xml.local.businessLocal = EJB 3.0 business interface declared as
>> <local>. Use <business-local>{0}</business-local>
>> +3.xml.local.businessLocal = The <local> element of the ejb-jar.xml
>> is for interfaces extending javax.ejb.EJBLocalObject. EJB 3.0
>> simplified business interfaces can be decalred via <business-
>> local>{0}</business-local> or via the @Remote annotation on the
>> bean class or interface class.
>> +
>> +# must be attempting an override
>> +1.xml.local.businessRemote = EJB 3.0 business interface declared
>> as <local>. Use <business-local>{0}</business-local>
>> +2.xml.local.businessRemote = EJB 3.0 business interface declared
>> as <local>. Use <business-local>{0}</business-local>
>> +3.xml.local.businessRemote = The <local> element of the ejb-
>> jar.xml is for interfaces extending javax.ejb.EJBLocalObject. EJB
>> 3.0 simplified business interfaces can be decalred via <business-
>> remote>{0}</business-remote> or via the @Remote annotation on the
>> bean class or interface class.
>> +
>> +1.xml.local.beanClass = Bean class mistakenly declared as <local>
>> +2.xml.local.beanClass = Bean class mistakenly declared as <local>
>> +3.xml.local.beanClass = The <local> element of the ejb-jar.xml is
>> for interfaces extending javax.ejb.EJBLocalObject. The bean class
>> cannot be used as a home interface.
>> +
>> +1.xml.local.notInterface = The value of <local> is not an interface
>> +2.xml.local.notInterface = The value of <local> is not an
>> interface: {0}
>> +3.xml.local.notInterface = The <local> element of the ejb-jar.xml
>> is for interfaces extending javax.ejb.EJBLocalObject. Classes,
>> abstract classes or enums are not allowed. Either convert {0} to
>> an interface or remove the related <local> xml tag from your ejb-
>> jar.xml
>> +
>> +1.xml.local.unknown = The value of <local> must be an interface
>> extending javax.ejb.EJBLocalObject
>> +2.xml.local.unknown = The value of <local> must be an interface
>> extending javax.ejb.EJBLocalObject. Perhaps you meant to use
>> <business-local>{0}</business-local>
>> +3.xml.local.unknown = The <local> element of the ejb-jar.xml is
>> for interfaces extending javax.ejb.EJBLocalObject. If this
>> interface is intended to be an EJB 3.0 business local view, declare
>> this interface as <business-local>{0}</business-local> or via the
>> @Local annotation on the bean class or interface class.
>> +
>> +
>> +
>> +
>> +1.xml.businessRemote.ejbHome = javax.ejb.EJBHome interface
>> declared as <business-remote>. Use <home>{0}</home>
>> +2.xml.businessRemote.ejbHome = javax.ejb.EJBHome interface
>> declared as <business-remote>. Use <home>{0}</home>
>> +3.xml.businessRemote.ejbHome = Interfaces extending
>> javax.ejb.EJBHome must use the <home> tag, not the <business-
>> remote> tag, when declared in the ejb-jar.xml. Declare this
>> interface as <home>{0}</home> or alternatively add
>> @RemoteHome({0}.class) to the top of your bean class.
>> +
>> +1.xml.businessRemote.ejbLocalHome = javax.ejb.EJBLocalHome
>> interface declared as <business-remote>. Use <local-home>{0}</local-
>> home>
>> +2.xml.businessRemote.ejbLocalHome = javax.ejb.EJBLocalHome
>> interface declared as <business-remote>. Use <local-home>{0}</local-
>> home>
>> +3.xml.businessRemote.ejbLocalHome = Interfaces extending
>> javax.ejb.EJBLocalHome must use the <local-home> tag, not the
>> <business-remote> tag, when declared in the ejb-jar.xml. Declare
>> this interface as <local-home>{0}</local-home> or alternatively add
>> @LocalHome({0}.class) to the top of your bean class.
>> +
>> +1.xml.businessRemote.ejbObject = javax.ejb.EJBObject interface
>> declared as <business-remote>. Use <remote>{0}</remote>
>> +2.xml.businessRemote.ejbObject = javax.ejb.EJBObject interface
>> declared as <business-remote>. Use <remote>{0}</remote>
>> +3.xml.businessRemote.ejbObject = Interfaces extending
>> javax.ejb.EJBObject must use the <remote> tag, not the <business-
>> remote> tag, when declared in the ejb-jar.xml. Declare this
>> interface as <remote>{0}</remote>.
>> +
>> +1.xml.businessRemote.ejbLocalObject = javax.ejb.EJBLocalObject
>> interface declared as <business-remote>. Use <local>{0}</local>
>> +2.xml.businessRemote.ejbLocalObject = javax.ejb.EJBLocalObject
>> interface declared as <business-remote>. Use <local>{0}</local>
>> +3.xml.businessRemote.ejbLocalObject = Interfaces extending
>> javax.ejb.EJBLocalObject must use the <local> tag, not the
>> <business-remote> tag, when declared in the ejb-jar.xml. Declare
>> this interface as <local>{0}</local>.
>> +
>> +1.xml.businessRemote.beanClass = Bean class mistakenly declared as
>> <business-remote>
>> +2.xml.businessRemote.beanClass = Bean class mistakenly declared as
>> <business-remote>
>> +3.xml.businessRemote.beanClass = The bean class cannot itself
>> cannot be used as the value of the <business-remote> element of the
>> ejb-jar.xml. Either list a valid java interface or delete this
>> element and annotate the intended interface with the @Remote
>> annotation.
>> +
>> +1.xml.businessRemote.notInterface = The value of <business-remote>
>> is not an interface
>> +2.xml.businessRemote.notInterface = The value of <business-remote>
>> is not an interface: {0}
>> +3.xml.businessRemote.notInterface = The <business-remote> element
>> of the ejb-jar.xml must be an interface. Classes, abstract classes
>> or enums are not allowed. Either convert {0} to an interface or
>> remove the related <business-remote> xml tag from your ejb-jar.xml
>> +
>> +
>> +
>> +
>> +1.xml.businessLocal.ejbHome = javax.ejb.EJBHome interface declared
>> as <business-local>. Use <home>{0}</home>
>> +2.xml.businessLocal.ejbHome = javax.ejb.EJBHome interface declared
>> as <business-local>. Use <home>{0}</home>
>> +3.xml.businessLocal.ejbHome = Interfaces extending
>> javax.ejb.EJBHome must use the <home> tag, not the <business-local>
>> tag, when declared in the ejb-jar.xml. Declare this interface as
>> <home>{0}</home> or alternatively add @RemoteHome({0}.class) to the
>> top of your bean class.
>> +
>> +1.xml.businessLocal.ejbLocalHome = javax.ejb.EJBLocalHome
>> interface declared as <business-local>. Use <local-home>{0}</local-
>> home>
>> +2.xml.businessLocal.ejbLocalHome = javax.ejb.EJBLocalHome
>> interface declared as <business-local>. Use <local-home>{0}</local-
>> home>
>> +3.xml.businessLocal.ejbLocalHome = Interfaces extending
>> javax.ejb.EJBLocalHome must use the <local-home> tag, not the
>> <business-local> tag, when declared in the ejb-jar.xml. Declare
>> this interface as <local-home>{0}</local-home> or alternatively add
>> @LocalHome({0}.class) to the top of your bean class.
>> +
>> +1.xml.businessLocal.ejbObject = javax.ejb.EJBObject interface
>> declared as <business-local>. Use <remote>{0}</remote>
>> +2.xml.businessLocal.ejbObject = javax.ejb.EJBObject interface
>> declared as <business-local>. Use <remote>{0}</remote>
>> +3.xml.businessLocal.ejbObject = Interfaces extending
>> javax.ejb.EJBObject must use the <remote> tag, not the <business-
>> local> tag, when declared in the ejb-jar.xml. Declare this
>> interface as <remote>{0}</remote>.
>> +
>> +1.xml.businessLocal.ejbLocalObject = javax.ejb.EJBLocalObject
>> interface declared as <business-local>. Use <local>{0}</local>
>> +2.xml.businessLocal.ejbLocalObject = javax.ejb.EJBLocalObject
>> interface declared as <business-local>. Use <local>{0}</local>
>> +3.xml.businessLocal.ejbLocalObject = Interfaces extending
>> javax.ejb.EJBLocalObject must use the <local> tag, not the
>> <business-local> tag, when declared in the ejb-jar.xml. Declare
>> this interface as <local>{0}</local>.
>> +
>> +1.xml.businessLocal.beanClass = Bean class mistakenly declared as
>> <business-local>
>> +2.xml.businessLocal.beanClass = Bean class mistakenly declared as
>> <business-local>
>> +3.xml.businessLocal.beanClass = The bean class cannot itself
>> cannot be used as the value of the <business-local> element of the
>> ejb-jar.xml. Either 1) list a valid java interface or 2) delete
>> this element and annotate the intended interface with the @Local
>> annotation.
>> +
>> +1.xml.businessLocal.notInterface = The value of <business-local>
>> is not an interface
>> +2.xml.businessLocal.notInterface = The value of <business-local>
>> is not an interface: {0}
>> +3.xml.businessLocal.notInterface = The <business-local> element of
>> the ejb-jar.xml must be an interface. Classes, abstract classes or
>> enums are not allowed. Either convert {0} to an interface or
>> remove the related <business-local> xml tag from your ejb-jar.xml
>>
>> Added: 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=677503&view=auto
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/
>> apache/openejb/config/rules/InvalidInterfacesTest.java (added)
>> +++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/
>> apache/openejb/config/rules/InvalidInterfacesTest.java Wed Jul 16
>> 22:32:23 2008
>> @@ -0,0 +1,88 @@
>> +/**
>> + * 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.config.rules;
>> +
>> +import junit.framework.TestCase;
>> +import org.apache.openejb.assembler.classic.ContainerSystemInfo;
>> +import
>> org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
>> +import org.apache.openejb.config.ConfigurationFactory;
>> +import org.apache.openejb.config.ValidationFailedException;
>> +import org.apache.openejb.config.ValidationFailure;
>> +import org.apache.openejb.jee.EjbJar;
>> +import org.apache.openejb.jee.StatelessBean;
>> +
>> +import javax.ejb.EJBHome;
>> +import javax.ejb.EJBLocalHome;
>> +import javax.ejb.EJBLocalObject;
>> +import javax.ejb.EJBObject;
>> +import javax.ejb.Local;
>> +import javax.ejb.Remote;
>> +
>> +/**
>> + * @version $Rev$ $Date$
>> + */
>> +public class InvalidInterfacesTest extends TestCase {
>> + private ConfigurationFactory config;
>> +
>> + public void testBadHomeAndLocal() 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);
>> +
>> + try {
>> + config.configureApplication(ejbJar);
>> + } catch (ValidationFailedException e) {
>> + for (ValidationFailure failure : e.getFailures()) {
>> + System.out.println("failure = " +
>> failure.getMessageKey());
>> + }
>> + }
>> +
>> + }
>> +
>> + public void setUp() throws Exception {
>> + config = new ConfigurationFactory(true);
>> + ContainerSystemInfo containerSystem =
>> config.getOpenEjbConfiguration().containerSystem;
>> +
>> containerSystem
>> .containers
>> .add(config.configureService(StatelessSessionContainerInfo.class));
>> + }
>> +
>> + public static class FooBean {
>> +
>> + }
>> +
>> + public static interface FooEJBHome extends EJBHome {
>> + }
>> +
>> + public static interface FooEJBObject extends EJBObject {
>> + }
>> +
>> + public static interface FooEJBLocalHome extends EJBLocalHome {
>> + }
>> +
>> + public static interface FooEJBLocalObject extends
>> EJBLocalObject {
>> + }
>> +
>> + @Remote
>> + public static interface FooRemote {
>> + }
>> +
>> + @Local
>> + public static interface FooLocal {
>> + }
>> +
>> +}
>>
>>
>>
>>
>
>
Re: svn commit: r677503 - in /openejb/trunk/openejb3/container/openejb-core/src:
main/java/org/apache/openejb/assembler/classic/ main/java/org/apache/openejb/config/
main/java/org/apache/openejb/config/rules/ main/java/org/apache/openejb/util/
main/resourc...
Posted by Rick McGuire <ri...@gmail.com>.
This also appears to be causing problems with the Geronimo build:
10:26:43,304 INFO [config] Configuring Service(id=Default Stateless
Container,
type=Container, provider-id=Default Stateless Container)
10:26:43,304 INFO [config] Configuring Service(id=Default Stateful
Container, t
ype=Container, provider-id=Default Stateful Container)
10:26:43,304 INFO [config] Configuring Service(id=Default BMP
Container, type=C
ontainer, provider-id=Default BMP Container)
10:26:43,304 INFO [config] Configuring Service(id=Default CMP
Container, type=C
ontainer, provider-id=Default CMP Container)
10:26:43,319 INFO [config] Configuring enterprise application:
org.apache.geron
imo.plugins/agent/2.2-SNAPSHOT/car
10:26:43,960 INFO [OpenEJB] Auto-deploying ejb ejb/mgmt/MRC:
EjbDeployment(depl
oyment-id=agent/ejb/mgmt/MRC)
10:26:44,038 ERROR [validation] FAIL ... ejb/mgmt/MRC:
2.xml.businessLocal.busi
nessLocal [org.apache.geronimo.monitoring.MasterRemoteControlLocal]
10:26:44,038 ERROR [validation] FAIL ... ejb/mgmt/MRC:
2.xml.businessLocal.busi
nessRemote [org.apache.geronimo.monitoring.MasterRemoteControlRemote]
10:26:44,038 ERROR [validation] Invalid
EjbModule(path=C:\g-2.2\plugins\monitori
ng\agent-ejb\target\agent-ejb-2.2-SNAPSHOT.jar)
10:26:44,038 INFO [validation] Set the
'openejb.validation.output.level' system
property to VERBOSE for increased validation details.
[INFO]
------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO]
------------------------------------------------------------------------
[INFO] could not package plugin
Embedded error: Jar failed validation: carFAIL ... ejb/mgmt/MRC:
2.xml.bu
sinessLocal.businessLocal
[org.apache.geronimo.monitoring.MasterRemoteControlLoc
al]FAIL ... ejb/mgmt/MRC: 2.xml.businessLocal.businessRemote
[org.apache.g
eronimo.monitoring.MasterRemoteControlRemote]
[INFO]
------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO]
------------------------------------------------------------------------
[INFO] Total time: 26 minutes 49 seconds
[INFO] Finished at: Thu Jul 17 10:26:44 EDT 2008
[INFO] Final Memory: 319M/508M
[INFO]
------------------------------------------------------------------------
C:\g-2.2>
Rick McGuire wrote:
> David,
>
> I'm now getting tons of test case errors trying to build...is there
> additional test case cleanup required, or is the validation acting too
> aggresively?
>
> Rick
>
> dblevins@apache.org wrote:
>> Author: dblevins
>> Date: Wed Jul 16 22:32:23 2008
>> New Revision: 677503
>>
>> URL: http://svn.apache.org/viewvc?rev=677503&view=rev
>> Log:
>> OPENEJB-859: Improved validation for <home>, <remote>, <local-home>,
>> <local>, <business-local> and <business-remote> elements
>> Rewrote this validation completely to be more aggressive in figuring
>> out what the user might have intended to do.
>>
>> Added:
>>
>> openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java
>>
>> Modified:
>>
>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
>>
>>
>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java
>>
>>
>> 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/util/Strings.java
>>
>>
>> openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
>>
>>
>> Modified:
>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
>>
>> URL:
>> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?rev=677503&r1=677502&r2=677503&view=diff
>>
>> ==============================================================================
>>
>> ---
>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
>> (original)
>> +++
>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
>> Wed Jul 16 22:32:23 2008
>> @@ -29,6 +29,7 @@
>> import org.apache.openejb.spi.ContainerSystem;
>> import org.apache.openejb.util.LogCategory;
>> import org.apache.openejb.util.Logger;
>> +import org.apache.openejb.util.Strings;
>> import org.apache.openejb.loader.SystemInstance;
>> import org.apache.openejb.core.CoreDeploymentInfo;
>> import org.apache.openejb.core.ivm.naming.BusinessLocalReference;
>> @@ -126,21 +127,10 @@
>> this.type = type;
>> this.annotatedName = annotatedName;
>> this.xmlName = xmlName;
>> - this.xmlNameCc = camelCase(xmlName);
>> + this.xmlNameCc = Strings.camelCase(xmlName);
>> this.openejbLegacy = openejbLegacy;
>> }
>>
>> - private String camelCase(String string){
>> - StringBuilder sb = new StringBuilder();
>> - String[] strings = string.split("-");
>> - for (String s : strings) {
>> - int l = sb.length();
>> - sb.append(s);
>> - sb.setCharAt(l,
>> Character.toUpperCase(sb.charAt(l)));
>> - }
>> - return sb.toString();
>> - }
>> -
>>
>> public InterfaceType getType() {
>> return type;
>>
>> Modified:
>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java
>>
>> URL:
>> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java?rev=677503&r1=677502&r2=677503&view=diff
>>
>> ==============================================================================
>>
>> ---
>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java
>> (original)
>> +++
>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java
>> Wed Jul 16 22:32:23 2008
>> @@ -36,6 +36,10 @@
>> }
>> }
>>
>> + public String getMessageKey(){
>> + return message;
>> + }
>> + public Object[] getDetails() {
>> return details;
>> }
>>
>> 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=677503&r1=677502&r2=677503&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
>> Wed Jul 16 22:32:23 2008
>> @@ -24,12 +24,15 @@
>> import org.apache.openejb.jee.Interceptor;
>> import org.apache.openejb.config.EjbModule;
>> import org.apache.openejb.util.SafeToolkit;
>> +import org.apache.openejb.util.Strings;
>> import org.apache.xbean.finder.ClassFinder;
>>
>> import javax.ejb.EJBLocalHome;
>> import javax.ejb.EJBLocalObject;
>> import javax.ejb.EJBHome;
>> import javax.ejb.EJBObject;
>> +import javax.ejb.Local;
>> +import javax.ejb.Remote;
>> import javax.jws.WebService;
>> import static java.lang.reflect.Modifier.isAbstract;
>> import java.lang.reflect.Method;
>> @@ -69,38 +72,40 @@
>> public void validate(EjbModule ejbModule) {
>> for (EnterpriseBean bean :
>> ejbModule.getEjbJar().getEnterpriseBeans()) {
>> try {
>> - check_hasEjbClass(bean);
>> + Class<?> beanClass = check_hasEjbClass(bean);
>>
>> if (!(bean instanceof RemoteBean)) continue;
>> RemoteBean b = (RemoteBean) bean;
>>
>> check_isEjbClass(b);
>> - check_hasDependentClasses(b, b.getEjbClass(),
>> "<ejb-class>");
>> + check_hasDependentClasses(b, b.getEjbClass(),
>> "ejb-class");
>> check_hasInterface(b);
>> +
>> + if (b.getRemote() != null){
>> + checkInterface(b, beanClass, "remote",
>> b.getRemote());
>> + }
>> +
>> if (b.getHome() != null) {
>> - check_hasHomeClass(b);
>> - check_hasRemoteClass(b);
>> - check_isHomeInterface(b);
>> - check_isRemoteInterface(b);
>> - check_hasDependentClasses(b, b.getHome(),
>> "<home>");
>> - check_hasDependentClasses(b, b.getRemote(),
>> "<remote>");
>> + checkInterface(b, beanClass, "home", b.getHome());
>> + }
>> +
>> + if (b.getLocal() != null) {
>> + checkInterface(b, beanClass, "local",
>> b.getLocal());
>> }
>> +
>> if (b.getLocalHome() != null) {
>> - check_hasLocalHomeClass(b);
>> - check_hasLocalClass(b);
>> - check_isLocalHomeInterface(b);
>> - check_isLocalInterface(b);
>> - check_hasDependentClasses(b, b.getLocalHome(),
>> "<local-home>");
>> - check_hasDependentClasses(b, b.getLocal(),
>> "<local>");
>> + checkInterface(b, beanClass, "local-home",
>> b.getLocalHome());
>> }
>>
>> if (b instanceof SessionBean) {
>> SessionBean sessionBean = (SessionBean) b;
>> +
>> for (String interfce :
>> sessionBean.getBusinessLocal()) {
>> - check_businessInterface(sessionBean,
>> interfce, "<business-local>");
>> + checkInterface(b, beanClass,
>> "business-local", interfce);
>> }
>> +
>> for (String interfce :
>> sessionBean.getBusinessRemote()) {
>> - check_businessInterface(sessionBean,
>> interfce, "<business-remote>");
>> + checkInterface(b, beanClass,
>> "business-local", interfce);
>> }
>> }
>> } catch (RuntimeException e) {
>> @@ -113,35 +118,30 @@
>> }
>> }
>>
>> - private void check_businessInterface(SessionBean b, String
>> interfaceName, String tagName) {
>> - String ejbName = b.getEjbName();
>> - Class<?> interfce = lookForClass(interfaceName, tagName,
>> b.getEjbName());
>> + private void checkInterface(RemoteBean b, Class<?> beanClass,
>> String tag, String className) {
>> + Class<?> interfce = lookForClass(className, tag,
>> b.getEjbName());
>>
>> - if (!interfce.isInterface()){
>> - fail(b, "notAnInterface", interfce.getName(), tagName);
>> - }
>> + if (interfce == null) return;
>> +
>> + check_hasDependentClasses(b, className, tag);
>> +
>> + tag = Strings.lcfirst(Strings.camelCase(tag));
>> +
>> + if (isValidInterface(b, interfce, beanClass, tag));
>>
>> ClassFinder finder = new ClassFinder(interfce);
>>
>> for (Class<? extends Annotation> annotation :
>> beanOnlyAnnotations) {
>> +
>> if (interfce.isAnnotationPresent(annotation)){
>> warn(b, "interface.beanOnlyAnnotation",
>> annotation.getSimpleName(), interfce.getName(), b.getEjbClass());
>> }
>> +
>> for (Method method :
>> finder.findAnnotatedMethods(annotation)) {
>> warn(b, "interfaceMethod.beanOnlyAnnotation",
>> annotation.getSimpleName(), interfce.getName(), method.getName(),
>> b.getEjbClass());
>> }
>> }
>>
>> - if (EJBHome.class.isAssignableFrom(interfce)){
>> - fail(ejbName, "xml.businessRemoteOrLocal.ejbHome",
>> tagName, interfce.getName());
>> - } else if (EJBObject.class.isAssignableFrom(interfce)){
>> - fail(ejbName, "xml.businessRemoteOrLocal.ejbObject",
>> tagName, interfce.getName());
>> - } else if (EJBLocalHome.class.isAssignableFrom(interfce)) {
>> - fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalHome",
>> tagName, interfce.getName());
>> - } else if (EJBLocalObject.class.isAssignableFrom(interfce)){
>> - fail(ejbName,
>> "xml.businessRemoteOrLocal.ejbLocalObject", tagName,
>> interfce.getName());
>> - }
>> -
>> }
>>
>> private void check_hasInterface(RemoteBean b) {
>> @@ -187,7 +187,8 @@
>> # 2 - Element (home, ejb-class, remote)
>> # 3 - Bean name
>> */
>> - fail(b, "missing.dependent.class", className,
>> e.getMessage(), type, b.getEjbName());
>> + String missingClass = e.getMessage();
>> + fail(b, "missing.dependent.class", className,
>> missingClass, type, b.getEjbName());
>> } catch (NoClassDefFoundError e) {
>> /*
>> # 0 - Referring Class name
>> @@ -195,19 +196,12 @@
>> # 2 - Element (home, ejb-class, remote)
>> # 3 - Bean name
>> */
>> - fail(b, "missing.dependent.class", className,
>> e.getMessage(), type, b.getEjbName());
>> + String missingClass = e.getMessage();
>> + fail(b, "missing.dependent.class", className,
>> missingClass, type, b.getEjbName());
>> }
>> }
>>
>> - private void check_hasLocalClass(RemoteBean b) {
>> - lookForClass(b.getLocal(), "<local>", b.getEjbName());
>> - }
>> -
>> - private void check_hasLocalHomeClass(RemoteBean b) {
>> - lookForClass(b.getLocalHome(), "<local-home>", b.getEjbName());
>> - }
>> -
>> - public void check_hasEjbClass(EnterpriseBean b) {
>> + public Class<?> check_hasEjbClass(EnterpriseBean b) {
>>
>> String ejbName = b.getEjbName();
>>
>> @@ -217,32 +211,22 @@
>> fail(ejbName, "interfaceDeclaredAsBean",
>> beanClass.getName());
>> }
>>
>> - if (isCmp(b)) return;
>> + if (isCmp(b)) return beanClass;
>>
>> if (isAbstract(beanClass.getModifiers())){
>> fail(ejbName, "abstractDeclaredAsBean",
>> beanClass.getName());
>> }
>> - }
>> -
>> - public void check_hasInterceptorClass(Interceptor i) {
>> -
>> - lookForClass(i.getInterceptorClass(), "<interceptor-class>",
>> "Interceptor");
>>
>> + return beanClass;
>> }
>>
>> - public void check_hasHomeClass(RemoteBean b) {
>> + private void check_hasInterceptorClass(Interceptor i) {
>>
>> - lookForClass(b.getHome(), "<home>", b.getEjbName());
>> + lookForClass(i.getInterceptorClass(), "interceptor-class",
>> "Interceptor");
>>
>> }
>>
>> - public void check_hasRemoteClass(RemoteBean b) {
>> -
>> - lookForClass(b.getRemote(), "<remote>", b.getEjbName());
>> -
>> - }
>> -
>> - public void check_isEjbClass(RemoteBean b) {
>> + private void check_isEjbClass(RemoteBean b) {
>>
>> if (b instanceof SessionBean) {
>>
>> @@ -258,26 +242,6 @@
>>
>> }
>>
>> - private void check_isLocalInterface(RemoteBean b) {
>> - compareTypes(b, b.getLocal(), EJBLocalObject.class);
>> - }
>> -
>> - private void check_isLocalHomeInterface(RemoteBean b) {
>> - compareTypes(b, b.getLocalHome(), EJBLocalHome.class);
>> - }
>> -
>> - public void check_isHomeInterface(RemoteBean b) {
>> -
>> - compareTypes(b, b.getHome(), javax.ejb.EJBHome.class);
>> -
>> - }
>> -
>> - public void check_isRemoteInterface(RemoteBean b) {
>> -
>> - compareTypes(b, b.getRemote(), javax.ejb.EJBObject.class);
>> -
>> - }
>> -
>> private Class<?> lookForClass(String clazz, String type, String
>> ejbName) {
>> try {
>> return loadClass(clazz);
>> @@ -305,6 +269,63 @@
>> return null;
>> }
>>
>> + private boolean isValidInterface(RemoteBean b, Class clazz,
>> Class beanClass, String tag) {
>> +
>> + if (clazz.equals(beanClass)) {
>> +
>> + fail(b, "xml." + tag + ".beanClass", clazz.getName());
>> +
>> + } else if (!clazz.isInterface()) {
>> +
>> + fail(b, "xml." + tag + ".notInterface", clazz.getName());
>> +
>> + } else if (EJBHome.class.isAssignableFrom(clazz)) {
>> +
>> + if (tag.equals("home")) return true;
>> +
>> + fail(b, "xml." + tag + ".ejbHome", clazz.getName());
>> +
>> + } else if (EJBLocalHome.class.isAssignableFrom(clazz)) {
>> +
>> + if (tag.equals("local-home")) return true;
>> +
>> + fail(b, "xml." + tag + ".ejbLocalHome", clazz.getName());
>> +
>> + } else if (EJBObject.class.isAssignableFrom(clazz)) {
>> +
>> + if (tag.equals("remote")) return true;
>> +
>> + fail(b, "xml." + tag + ".ejbObject", clazz.getName());
>> +
>> + } else if (EJBLocalObject.class.isAssignableFrom(clazz)) {
>> +
>> + if (tag.equals("local")) return true;
>> +
>> + fail(b, "xml." + tag + ".ejbLocalObject", clazz.getName());
>> +
>> + } else if (tag.equals("businessLocal") &&
>> tag.equals("businessRemote")) {
>> +
>> + return true;
>> + }
>> +
>> + // must be tagged as <home>, <local-home>, <remote>, or <local>
>> + if (clazz.isAnnotationPresent(Local.class)) {
>> +
>> + fail(b, "xml." + tag + ".businessLocal", clazz.getName());
>> +
>> + } else if (clazz.isAnnotationPresent(Remote.class)) {
>> +
>> + fail(b, "xml." + tag + ".businessRemote", clazz.getName());
>> +
>> + } else {
>> +
>> + fail(b, "xml." + tag + ".unknown", clazz.getName());
>> +
>> + }
>> +
>> + return false;
>> + }
>> +
>> private void compareTypes(RemoteBean b, String clazz1, Class<?>
>> class2) {
>> Class<?> class1 = null;
>> try {
>>
>> Modified:
>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java
>>
>> URL:
>> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java?rev=677503&r1=677502&r2=677503&view=diff
>>
>> ==============================================================================
>>
>> ---
>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java
>> (original)
>> +++
>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java
>> Wed Jul 16 22:32:23 2008
>> @@ -70,4 +70,15 @@
>> return sb.toString();
>> }
>>
>> + public static String camelCase(String string){
>> + StringBuilder sb = new StringBuilder();
>> + String[] strings = string.split("-");
>> + for (String s : strings) {
>> + int l = sb.length();
>> + sb.append(s);
>> + sb.setCharAt(l, Character.toUpperCase(sb.charAt(l)));
>> + }
>> + return sb.toString();
>> + }
>> +
>> }
>>
>> 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=677503&r1=677502&r2=677503&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 16 22:32:23 2008
>> @@ -47,7 +47,7 @@
>> # 2 - Bean name
>> 1.missing.class Missing class
>> 2.missing.class Missing class {0}
>> -3.missing.class The class {0} not found. Check that the
>> class specified in the {1} element for bean {2} is spelled correctly
>> and the class is present in the jar
>> +3.missing.class The class {0} not found. Check that the
>> class specified in the <{1}> element for bean {2} is spelled
>> correctly and the class is present in the jar
>>
>> # 0 - Class name
>> # 1 - EJB Class name
>> @@ -125,9 +125,10 @@
>> # 1 - Dependent Class name
>> # 2 - Element (home, ejb-class, remote)
>> # 3 - Bean name
>> +# fail(b, "missing.dependent.class", className, missingClass, type,
>> b.getEjbName());
>> 1.missing.dependent.class Missing dependent class or library
>> -2.missing.dependent.class Missing dependent class or
>> library: {1} needed by {2}
>> -3.missing.dependent.class The class {1} not found and is
>> referenced by the {2} class {0}. The Check that the class or related
>> library is available in the classpath
>> +2.missing.dependent.class Missing dependent class or
>> library: {1} needed by {0}
>> +3.missing.dependent.class The class {1} not found and is
>> referenced by the <{2}> class {0}. The Check that the class or
>> related library is available in the classpath
>>
>>
>> # CheckAssemblyBindings.java
>> @@ -304,26 +305,6 @@
>> 2.ann.remoteOrLocal.ejbLocalObject = @{0} used in bean class lists a
>> javax.ejb.EJBLocalObject interface. Use @LocalHome with home
>> interface of "{1}".
>> 3.ann.remoteOrLocal.ejbLocalObject = When applied to a bean class,
>> the @{0} annotation must only list business interfaces and cannot
>> list legacy EJBLocalObject interfaces. The EJBLocalHome of interface
>> for "{1}" can be annotated on the bean class with @LocalHome
>>
>> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbHome", tagName,
>> interfce.getName());
>> -1.xml.businessRemoteOrLocal.ejbHome = javax.ejb.EJBHome interface
>> declared as {0}.
>> -2.xml.businessRemoteOrLocal.ejbHome = javax.ejb.EJBHome interface
>> declared as {0}. Use <home>{1}</home>
>> -3.xml.businessRemoteOrLocal.ejbHome = Interfaces extending
>> javax.ejb.EJBHome pre-date the concept of EJB 3.0 simplified business
>> interfaces and must not use the {0} tag when declared in the
>> ejb-jar.xml. Declare this interface as <home>{1}</home>.
>> -
>> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalHome", tagName,
>> interfce.getName());
>> -1.xml.businessRemoteOrLocal.ejbLocalHome = javax.ejb.EJBLocalHome
>> interface declared as {0}.
>> -2.xml.businessRemoteOrLocal.ejbLocalHome = javax.ejb.EJBLocalHome
>> interface declared as {0}. Use <local-home>{1}</local-home>
>> -3.xml.businessRemoteOrLocal.ejbLocalHome = Interfaces extending
>> javax.ejb.EJBLocalHome pre-date the concept of EJB 3.0 simplified
>> business interfaces and must not use the {0} tag when declared in the
>> ejb-jar.xml. Declare this interface as <local-home>{1}</local-home>.
>> -
>> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbObject", tagName,
>> interfce.getName());
>> -1.xml.businessRemoteOrLocal.ejbObject = javax.ejb.EJBObject
>> interface declared as {0}.
>> -2.xml.businessRemoteOrLocal.ejbObject = javax.ejb.EJBObject
>> interface declared as {0}. Use <remote>{1}</remote>
>> -3.xml.businessRemoteOrLocal.ejbObject = Interfaces extending
>> javax.ejb.EJBObject pre-date the concept of EJB 3.0 simplified
>> business interfaces and must not use the {0} tag when declared in the
>> ejb-jar.xml. Declare this interface as <remote>{1}</remote>.
>> -
>> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalObject", tagName,
>> interfce.getName());
>> -1.xml.businessRemoteOrLocal.ejbLocalObject =
>> javax.ejb.EJBLocalObject interface declared as {0}.
>> -2.xml.businessRemoteOrLocal.ejbLocalObject =
>> javax.ejb.EJBLocalObject interface declared as {0}. Use
>> <local>{1}</local>
>> -3.xml.businessRemoteOrLocal.ejbLocalObject = Interfaces extending
>> javax.ejb.EJBLocalObject pre-date the concept of EJB 3.0 simplified
>> business interfaces and must not use the {0} tag when declared in the
>> ejb-jar.xml. Declare this interface as <local>{1}</local>.
>> -
>> # warn(bean, "ignoredStatefulAnnotation", annotationType, beanType,
>> methodName);
>> 1.ignoredStatefulAnnotation = @{0} is ignored for beans of type {1}
>> 2.ignoredStatefulAnnotation = @{0} is ignored for beans of type
>> {1}. Method: {2}
>> @@ -524,11 +505,6 @@
>> Which can then be implemented by the {0} class.\
>>
>>
>> -# fail(b, "notAnInterface", interfce.getName(), tagName);
>> -1.notAnInterface = Business remotes and locals must be interfaces.
>> -2.notAnInterface = Class tagged as {1} is not an interface: {0}
>> -3.notAnInterface = All business remote and business local views must
>> be java interfaces. Classes, abstract classes or enums are not
>> allowed. Either convert {0} to an interface or remove the related
>> {1} xml tag from your ejb-jar.xml.
>> -
>> # fail(ejbName, "ann.notAnInterface", annotationName,
>> interfce.getName());
>> 1.ann.notAnInterface = @{0} lists a non-interface.
>> 2.ann.notAnInterface = @{0} lists a non-interface: {1}
>> @@ -574,3 +550,195 @@
>> 2.ann.invalidConcurrencyAttribute = Ignoring {0} invalid @Lock
>> annotations. Bean not using Container-Managed Concurrencys.
>> 3.ann.invalidConcurrencyAttribute = The @Lock annotation applies
>> only to beans using Container-Managed Concurrencys. Beans marked as
>> @ConcurrencyManagement(BEAN) are responsible for thier own
>> concurrency and may not use the @Lock annotation. There are {0} such
>> invalid annotations in the bean class that will be ignored and should
>> be removed.
>>
>> +
>> +1.xml.home.ejbLocalHome = javax.ejb.EJBLocalHome interface declared
>> as <home>. Use <local-home>{0}</local-home>
>> +2.xml.home.ejbLocalHome = javax.ejb.EJBLocalHome interface declared
>> as <home>. Use <local-home>{0}</local-home>
>> +3.xml.home.ejbLocalHome = The <home> element is for interfaces
>> extending javax.ejb.EJBHome. The interface supplied is a
>> javax.ejb.EJBLocalHome and should be declared with the <local-home>
>> element as in: <local-home>{0}</local-home>
>> +
>> +1.xml.home.ejbObject = javax.ejb.EJBObject interface declared as
>> <home>. Use <remote>{0}</remote>
>> +2.xml.home.ejbObject = javax.ejb.EJBObject interface declared as
>> <home>. Use <remote>{0}</remote>
>> +3.xml.home.ejbObject = The <home> element is for interfaces
>> extending javax.ejb.EJBHome. The interface supplied is a
>> javax.ejb.EJBObject and should be declared with the <remote> element
>> as in: <remote>{0}</remote>
>> +
>> +1.xml.home.ejbLocalObject = javax.ejb.EJBLocalObject interface
>> declared as <home>. Use <local>{0}</local>
>> +2.xml.home.ejbLocalObject = javax.ejb.EJBLocalObject interface
>> declared as <home>. Use <local>{0}</local>
>> +3.xml.home.ejbLocalObject = The <home> element is for interfaces
>> extending javax.ejb.EJBHome. The interface supplied is a
>> javax.ejb.EJBLocalObject and should be declared with the <local>
>> element as in: <local>{0}</local>
>> +
>> +1.xml.home.businessLocal = EJB 3.0 business interface declared as
>> <home>. Use <business-local>{0}</business-local>
>> +2.xml.home.businessLocal = EJB 3.0 business interface declared as
>> <home>. Use <business-local>{0}</business-local>
>> +3.xml.home.businessLocal = The <home> element of the ejb-jar.xml is
>> for interfaces extending javax.ejb.EJBHome. EJB 3.0 simplified
>> business interfaces can be decalred via
>> <business-local>{0}</business-local> or via the @Remote annotation on
>> the bean class or interface class.
>> +
>> +1.xml.home.businessRemote = EJB 3.0 business interface declared as
>> <home>. Use <business-remote>{0}</business-remote>
>> +2.xml.home.businessRemote = EJB 3.0 business interface declared as
>> <home>. Use <business-remote>{0}</business-remote>
>> +3.xml.home.businessRemote = The <home> element of the ejb-jar.xml is
>> for interfaces extending javax.ejb.EJBHome. EJB 3.0 simplified
>> business interfaces can be decalred via
>> <business-remote>{0}</business-remote> or via the @Remote annotation
>> on the bean class or interface class.
>> +
>> +1.xml.home.beanClass = Bean class mistakenly declared as <home>
>> +2.xml.home.beanClass = Bean class mistakenly declared as <home>
>> +3.xml.home.beanClass = The <home> element of the ejb-jar.xml is for
>> interfaces extending javax.ejb.EJBHome. The bean class cannot be
>> used as a home interface.
>> +
>> +1.xml.home.notInterface = The value of <home> is not an interface
>> +2.xml.home.notInterface = The value of <home> is not an interface: {0}
>> +3.xml.home.notInterface = The <home> element of the ejb-jar.xml is
>> for interfaces extending javax.ejb.EJBHome. Classes, abstract
>> classes or enums are not allowed. Either convert {0} to an interface
>> or remove the related <home> xml tag from your ejb-jar.xml
>> +
>> +1.xml.home.unknown = The value of <home> must be an interface
>> extending javax.ejb.EJBHome
>> +2.xml.home.unknown = The value of <home> must be an interface
>> extending javax.ejb.EJBHome
>> +3.xml.home.unknown = The <home> element of the ejb-jar.xml is for
>> interfaces extending javax.ejb.EJBHome. If this interface is
>> intended to be an EJB 3.0 business remote view, declare this
>> interface as <business-remote>{0}</business-remote> or via the
>> @Remote annotation on the bean class or interface class.
>> +
>> +
>> +
>> +1.xml.remote.ejbHome = javax.ejb.EJBHome interface declared as
>> <remote>. Use <home>{0}</home>
>> +2.xml.remote.ejbHome = javax.ejb.EJBHome interface declared as
>> <remote>. Use <home>{0}</home>
>> +3.xml.remote.ejbHome = The <remote> element is for interfaces
>> extending javax.ejb.EJBObject. The interface supplied is a
>> javax.ejb.EJBHome and should be declared with the <home> element as
>> in: <home>{0}</home>
>> +
>> +1.xml.remote.ejbLocalHome = javax.ejb.EJBLocalHome interface
>> declared as <remote>. Use <local-home>{0}</local-home>
>> +2.xml.remote.ejbLocalHome = javax.ejb.EJBLocalHome interface
>> declared as <remote>. Use <local-home>{0}</local-home>
>> +3.xml.remote.ejbLocalHome = The <remote> element is for interfaces
>> extending javax.ejb.EJBHome. The interface supplied is a
>> javax.ejb.EJBLocalHome and should be declared with the <local-home>
>> element as in: <local-home>{0}</local-home>
>> +
>> +1.xml.remote.ejbLocalObject = javax.ejb.EJBLocalObject interface
>> declared as <remote>. Use <local>{0}</local>
>> +2.xml.remote.ejbLocalObject = javax.ejb.EJBLocalObject interface
>> declared as <remote>. Use <local>{0}</local>
>> +3.xml.remote.ejbLocalObject = The <remote> element is for interfaces
>> extending javax.ejb.EJBObject. The interface supplied is a
>> javax.ejb.EJBLocalObject and should be declared with the <local>
>> element as in: <local>{0}</local>
>> +
>> +# must be attempting an override
>> +1.xml.remote.businessLocal = EJB 3.0 business interface declared as
>> <remote>. Use <business-remote>{0}</business-remote>
>> +2.xml.remote.businessLocal = EJB 3.0 business interface declared as
>> <remote>. Use <business-remote>{0}</business-remote>
>> +3.xml.remote.businessLocal = The <remote> element of the ejb-jar.xml
>> is for interfaces extending javax.ejb.EJBObject. EJB 3.0 simplified
>> business interfaces can be decalred via
>> <business-local>{0}</business-local> or via the @Remote annotation on
>> the bean class or interface class.
>> +
>> +1.xml.remote.businessRemote = EJB 3.0 business interface declared as
>> <remote>. Use <business-remote>{0}</business-remote>
>> +2.xml.remote.businessRemote = EJB 3.0 business interface declared as
>> <remote>. Use <business-remote>{0}</business-remote>
>> +3.xml.remote.businessRemote = The <remote> element of the
>> ejb-jar.xml is for interfaces extending javax.ejb.EJBObject. EJB 3.0
>> simplified business interfaces can be decalred via
>> <business-remote>{0}</business-remote> or via the @Remote annotation
>> on the bean class or interface class.
>> +
>> +1.xml.remote.beanClass = Bean class mistakenly declared as <remote>
>> +2.xml.remote.beanClass = Bean class mistakenly declared as <remote>
>> +3.xml.remote.beanClass = The <remote> element of the ejb-jar.xml is
>> for interfaces extending javax.ejb.EJBObject. The bean class cannot
>> be used as a home interface.
>> +
>> +1.xml.remote.notInterface = The value of <remote> is not an interface
>> +2.xml.remote.notInterface = The value of <remote> is not an
>> interface: {0}
>> +3.xml.remote.notInterface = The <remote> element of the ejb-jar.xml
>> is for interfaces extending javax.ejb.EJBObject. Classes, abstract
>> classes or enums are not allowed. Either convert {0} to an interface
>> or remove the related <remote> xml tag from your ejb-jar.xml
>> +
>> +1.xml.remote.unknown = The value of <remote> must be an interface
>> extending javax.ejb.EJBObject
>> +2.xml.remote.unknown = The value of <remote> must be an interface
>> extending javax.ejb.EJBObject
>> +3.xml.remote.unknown = The <remote> element of the ejb-jar.xml is
>> for interfaces extending javax.ejb.EJBObject. If this interface is
>> intended to be an EJB 3.0 business remote view, declare this
>> interface as <business-remote>{0}</business-remote> or via the
>> @Remote annotation on the bean class or interface class.
>> +
>> +
>> +
>> +
>> +1.xml.localHome.ejbHome = javax.ejb.EJBHome interface declared as
>> <local-home>. Use <home>{0}</home>
>> +2.xml.localHome.ejbHome = javax.ejb.EJBHome interface declared as
>> <local-home>. Use <home>{0}</home>
>> +3.xml.localHome.ejbHome = The <local-home> element is for interfaces
>> extending javax.ejb.EJBLocalHome. The interface supplied is a
>> javax.ejb.EJBHome and should be declared with the <home> element as
>> in: <home>{0}</home>
>> +
>> +1.xml.localHome.ejbObject = javax.ejb.EJBObject interface declared
>> as <local-home>. Use <remote>{0}</remote>
>> +2.xml.localHome.ejbObject = javax.ejb.EJBObject interface declared
>> as <local-home>. Use <remote>{0}</remote>
>> +3.xml.localHome.ejbObject = The <local-home> element is for
>> interfaces extending javax.ejb.EJBLocalHome. The interface supplied
>> is a javax.ejb.EJBObject and should be declared with the <remote>
>> element as in: <remote>{0}</remote>
>> +
>> +1.xml.localHome.ejbLocalObject = javax.ejb.EJBLocalObject interface
>> declared as <local-home>. Use <local>{0}</local>
>> +2.xml.localHome.ejbLocalObject = javax.ejb.EJBLocalObject interface
>> declared as <local-home>. Use <local>{0}</local>
>> +3.xml.localHome.ejbLocalObject = The <local-home> element is for
>> interfaces extending javax.ejb.EJBLocalHome. The interface supplied
>> is a javax.ejb.EJBLocalObject and should be declared with the <local>
>> element as in: <local>{0}</local>
>> +
>> +1.xml.localHome.businessLocal = EJB 3.0 business interface declared
>> as <local-home>. Use <business-local>{0}</business-local>
>> +2.xml.localHome.businessLocal = EJB 3.0 business interface declared
>> as <local-home>. Use <business-local>{0}</business-local>
>> +3.xml.localHome.businessLocal = The <local-home> element of the
>> ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. EJB
>> 3.0 simplified business interfaces can be decalred via
>> <business-local>{0}</business-local> or via the @Remote annotation on
>> the bean class or interface class.
>> +
>> +1.xml.localHome.businessRemote = EJB 3.0 business interface declared
>> as <local-home>. Use <business-remote>{0}</business-remote>
>> +2.xml.localHome.businessRemote = EJB 3.0 business interface declared
>> as <local-home>. Use <business-remote>{0}</business-remote>
>> +3.xml.localHome.businessRemote = The <local-home> element of the
>> ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. EJB
>> 3.0 simplified business interfaces can be decalred via
>> <business-remote>{0}</business-remote> or via the @Remote annotation
>> on the bean class or interface class.
>> +
>> +1.xml.localHome.beanClass = Bean class mistakenly declared as
>> <local-home>
>> +2.xml.localHome.beanClass = Bean class mistakenly declared as
>> <local-home>
>> +3.xml.localHome.beanClass = The <local-home> element of the
>> ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. The
>> bean class cannot be used as a home interface.
>> +
>> +1.xml.localHome.notInterface = The value of <local-home> is not an
>> interface
>> +2.xml.localHome.notInterface = The value of <local-home> is not an
>> interface: {0}
>> +3.xml.localHome.notInterface = The <local-home> element of the
>> ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome.
>> Classes, abstract classes or enums are not allowed. Either convert
>> {0} to an interface or remove the related <local-home> xml tag from
>> your ejb-jar.xml
>> +
>> +1.xml.localHome.unknown = The value of <local-home> must be an
>> interface extending javax.ejb.EJBLocalHome
>> +2.xml.localHome.unknown = The value of <local-home> must be an
>> interface extending javax.ejb.EJBLocalHome
>> +3.xml.localHome.unknown = The <local-home> element of the
>> ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. If
>> this interface is intended to be an EJB 3.0 business local view,
>> declare this interface as <business-local>{0}</business-local> or via
>> the @Local annotation on the bean class or interface class.
>> +
>> +
>> +
>> +
>> +1.xml.local.ejbHome = javax.ejb.EJBHome interface declared as
>> <local>. Use <home>{0}</home>
>> +2.xml.local.ejbHome = javax.ejb.EJBHome interface declared as
>> <local>. Use <home>{0}</home>
>> +3.xml.local.ejbHome = The <local> element is for interfaces
>> extending javax.ejb.EJBLocalObject. The interface supplied is a
>> javax.ejb.EJBHome and should be declared with the <home> element as
>> in: <home>{0}</home>
>> +
>> +1.xml.local.ejbLocalHome = javax.ejb.EJBLocalHome interface declared
>> as <local>. Use <local-home>{0}</local-home>
>> +2.xml.local.ejbLocalHome = javax.ejb.EJBLocalHome interface declared
>> as <local>. Use <local-home>{0}</local-home>
>> +3.xml.local.ejbLocalHome = The <local> element is for interfaces
>> extending javax.ejb.EJBLocalObject. The interface supplied is a
>> javax.ejb.EJBLocalHome and should be declared with the <local-home>
>> element as in: <local-home>{0}</local-home>
>> +
>> +1.xml.local.ejbObject = javax.ejb.EJBObject interface declared as
>> <local>. Use <remote>{0}</remote>
>> +2.xml.local.ejbObject = javax.ejb.EJBObject interface declared as
>> <local>. Use <remote>{0}</remote>
>> +3.xml.local.ejbObject = The <local> element is for interfaces
>> extending javax.ejb.EJBLocalObject. The interface supplied is a
>> javax.ejb.EJBObject and should be declared with the <remote> element
>> as in: <remote>{0}</remote>
>> +
>> +1.xml.local.businessLocal = EJB 3.0 business interface declared as
>> <local>. Use <business-local>{0}</business-local>
>> +2.xml.local.businessLocal = EJB 3.0 business interface declared as
>> <local>. Use <business-local>{0}</business-local>
>> +3.xml.local.businessLocal = The <local> element of the ejb-jar.xml
>> is for interfaces extending javax.ejb.EJBLocalObject. EJB 3.0
>> simplified business interfaces can be decalred via
>> <business-local>{0}</business-local> or via the @Remote annotation on
>> the bean class or interface class.
>> +
>> +# must be attempting an override
>> +1.xml.local.businessRemote = EJB 3.0 business interface declared as
>> <local>. Use <business-local>{0}</business-local>
>> +2.xml.local.businessRemote = EJB 3.0 business interface declared as
>> <local>. Use <business-local>{0}</business-local>
>> +3.xml.local.businessRemote = The <local> element of the ejb-jar.xml
>> is for interfaces extending javax.ejb.EJBLocalObject. EJB 3.0
>> simplified business interfaces can be decalred via
>> <business-remote>{0}</business-remote> or via the @Remote annotation
>> on the bean class or interface class.
>> +
>> +1.xml.local.beanClass = Bean class mistakenly declared as <local>
>> +2.xml.local.beanClass = Bean class mistakenly declared as <local>
>> +3.xml.local.beanClass = The <local> element of the ejb-jar.xml is
>> for interfaces extending javax.ejb.EJBLocalObject. The bean class
>> cannot be used as a home interface.
>> +
>> +1.xml.local.notInterface = The value of <local> is not an interface
>> +2.xml.local.notInterface = The value of <local> is not an interface:
>> {0}
>> +3.xml.local.notInterface = The <local> element of the ejb-jar.xml is
>> for interfaces extending javax.ejb.EJBLocalObject. Classes, abstract
>> classes or enums are not allowed. Either convert {0} to an interface
>> or remove the related <local> xml tag from your ejb-jar.xml
>> +
>> +1.xml.local.unknown = The value of <local> must be an interface
>> extending javax.ejb.EJBLocalObject
>> +2.xml.local.unknown = The value of <local> must be an interface
>> extending javax.ejb.EJBLocalObject. Perhaps you meant to use
>> <business-local>{0}</business-local>
>> +3.xml.local.unknown = The <local> element of the ejb-jar.xml is for
>> interfaces extending javax.ejb.EJBLocalObject. If this interface is
>> intended to be an EJB 3.0 business local view, declare this interface
>> as <business-local>{0}</business-local> or via the @Local annotation
>> on the bean class or interface class.
>> +
>> +
>> +
>> +
>> +1.xml.businessRemote.ejbHome = javax.ejb.EJBHome interface declared
>> as <business-remote>. Use <home>{0}</home>
>> +2.xml.businessRemote.ejbHome = javax.ejb.EJBHome interface declared
>> as <business-remote>. Use <home>{0}</home>
>> +3.xml.businessRemote.ejbHome = Interfaces extending
>> javax.ejb.EJBHome must use the <home> tag, not the <business-remote>
>> tag, when declared in the ejb-jar.xml. Declare this interface as
>> <home>{0}</home> or alternatively add @RemoteHome({0}.class) to the
>> top of your bean class.
>> +
>> +1.xml.businessRemote.ejbLocalHome = javax.ejb.EJBLocalHome interface
>> declared as <business-remote>. Use <local-home>{0}</local-home>
>> +2.xml.businessRemote.ejbLocalHome = javax.ejb.EJBLocalHome interface
>> declared as <business-remote>. Use <local-home>{0}</local-home>
>> +3.xml.businessRemote.ejbLocalHome = Interfaces extending
>> javax.ejb.EJBLocalHome must use the <local-home> tag, not the
>> <business-remote> tag, when declared in the ejb-jar.xml. Declare
>> this interface as <local-home>{0}</local-home> or alternatively add
>> @LocalHome({0}.class) to the top of your bean class.
>> +
>> +1.xml.businessRemote.ejbObject = javax.ejb.EJBObject interface
>> declared as <business-remote>. Use <remote>{0}</remote>
>> +2.xml.businessRemote.ejbObject = javax.ejb.EJBObject interface
>> declared as <business-remote>. Use <remote>{0}</remote>
>> +3.xml.businessRemote.ejbObject = Interfaces extending
>> javax.ejb.EJBObject must use the <remote> tag, not the
>> <business-remote> tag, when declared in the ejb-jar.xml. Declare
>> this interface as <remote>{0}</remote>.
>> +
>> +1.xml.businessRemote.ejbLocalObject = javax.ejb.EJBLocalObject
>> interface declared as <business-remote>. Use <local>{0}</local>
>> +2.xml.businessRemote.ejbLocalObject = javax.ejb.EJBLocalObject
>> interface declared as <business-remote>. Use <local>{0}</local>
>> +3.xml.businessRemote.ejbLocalObject = Interfaces extending
>> javax.ejb.EJBLocalObject must use the <local> tag, not the
>> <business-remote> tag, when declared in the ejb-jar.xml. Declare
>> this interface as <local>{0}</local>.
>> +
>> +1.xml.businessRemote.beanClass = Bean class mistakenly declared as
>> <business-remote>
>> +2.xml.businessRemote.beanClass = Bean class mistakenly declared as
>> <business-remote>
>> +3.xml.businessRemote.beanClass = The bean class cannot itself cannot
>> be used as the value of the <business-remote> element of the
>> ejb-jar.xml. Either list a valid java interface or delete this
>> element and annotate the intended interface with the @Remote annotation.
>> +
>> +1.xml.businessRemote.notInterface = The value of <business-remote>
>> is not an interface
>> +2.xml.businessRemote.notInterface = The value of <business-remote>
>> is not an interface: {0}
>> +3.xml.businessRemote.notInterface = The <business-remote> element of
>> the ejb-jar.xml must be an interface. Classes, abstract classes or
>> enums are not allowed. Either convert {0} to an interface or remove
>> the related <business-remote> xml tag from your ejb-jar.xml
>> +
>> +
>> +
>> +
>> +1.xml.businessLocal.ejbHome = javax.ejb.EJBHome interface declared
>> as <business-local>. Use <home>{0}</home>
>> +2.xml.businessLocal.ejbHome = javax.ejb.EJBHome interface declared
>> as <business-local>. Use <home>{0}</home>
>> +3.xml.businessLocal.ejbHome = Interfaces extending javax.ejb.EJBHome
>> must use the <home> tag, not the <business-local> tag, when declared
>> in the ejb-jar.xml. Declare this interface as <home>{0}</home> or
>> alternatively add @RemoteHome({0}.class) to the top of your bean class.
>> +
>> +1.xml.businessLocal.ejbLocalHome = javax.ejb.EJBLocalHome interface
>> declared as <business-local>. Use <local-home>{0}</local-home>
>> +2.xml.businessLocal.ejbLocalHome = javax.ejb.EJBLocalHome interface
>> declared as <business-local>. Use <local-home>{0}</local-home>
>> +3.xml.businessLocal.ejbLocalHome = Interfaces extending
>> javax.ejb.EJBLocalHome must use the <local-home> tag, not the
>> <business-local> tag, when declared in the ejb-jar.xml. Declare this
>> interface as <local-home>{0}</local-home> or alternatively add
>> @LocalHome({0}.class) to the top of your bean class.
>> +
>> +1.xml.businessLocal.ejbObject = javax.ejb.EJBObject interface
>> declared as <business-local>. Use <remote>{0}</remote>
>> +2.xml.businessLocal.ejbObject = javax.ejb.EJBObject interface
>> declared as <business-local>. Use <remote>{0}</remote>
>> +3.xml.businessLocal.ejbObject = Interfaces extending
>> javax.ejb.EJBObject must use the <remote> tag, not the
>> <business-local> tag, when declared in the ejb-jar.xml. Declare this
>> interface as <remote>{0}</remote>.
>> +
>> +1.xml.businessLocal.ejbLocalObject = javax.ejb.EJBLocalObject
>> interface declared as <business-local>. Use <local>{0}</local>
>> +2.xml.businessLocal.ejbLocalObject = javax.ejb.EJBLocalObject
>> interface declared as <business-local>. Use <local>{0}</local>
>> +3.xml.businessLocal.ejbLocalObject = Interfaces extending
>> javax.ejb.EJBLocalObject must use the <local> tag, not the
>> <business-local> tag, when declared in the ejb-jar.xml. Declare this
>> interface as <local>{0}</local>.
>> +
>> +1.xml.businessLocal.beanClass = Bean class mistakenly declared as
>> <business-local>
>> +2.xml.businessLocal.beanClass = Bean class mistakenly declared as
>> <business-local>
>> +3.xml.businessLocal.beanClass = The bean class cannot itself cannot
>> be used as the value of the <business-local> element of the
>> ejb-jar.xml. Either 1) list a valid java interface or 2) delete this
>> element and annotate the intended interface with the @Local annotation.
>> +
>> +1.xml.businessLocal.notInterface = The value of <business-local> is
>> not an interface
>> +2.xml.businessLocal.notInterface = The value of <business-local> is
>> not an interface: {0}
>> +3.xml.businessLocal.notInterface = The <business-local> element of
>> the ejb-jar.xml must be an interface. Classes, abstract classes or
>> enums are not allowed. Either convert {0} to an interface or remove
>> the related <business-local> xml tag from your ejb-jar.xml
>>
>> Added:
>> 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=677503&view=auto
>>
>> ==============================================================================
>>
>> ---
>> openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java
>> (added)
>> +++
>> openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java
>> Wed Jul 16 22:32:23 2008
>> @@ -0,0 +1,88 @@
>> +/**
>> + * 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.config.rules;
>> +
>> +import junit.framework.TestCase;
>> +import org.apache.openejb.assembler.classic.ContainerSystemInfo;
>> +import
>> org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
>> +import org.apache.openejb.config.ConfigurationFactory;
>> +import org.apache.openejb.config.ValidationFailedException;
>> +import org.apache.openejb.config.ValidationFailure;
>> +import org.apache.openejb.jee.EjbJar;
>> +import org.apache.openejb.jee.StatelessBean;
>> +
>> +import javax.ejb.EJBHome;
>> +import javax.ejb.EJBLocalHome;
>> +import javax.ejb.EJBLocalObject;
>> +import javax.ejb.EJBObject;
>> +import javax.ejb.Local;
>> +import javax.ejb.Remote;
>> +
>> +/**
>> + * @version $Rev$ $Date$
>> + */
>> +public class InvalidInterfacesTest extends TestCase {
>> + private ConfigurationFactory config;
>> +
>> + public void testBadHomeAndLocal() 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);
>> +
>> + try {
>> + config.configureApplication(ejbJar);
>> + } catch (ValidationFailedException e) {
>> + for (ValidationFailure failure : e.getFailures()) {
>> + System.out.println("failure = " +
>> failure.getMessageKey());
>> + }
>> + }
>> +
>> + }
>> +
>> + public void setUp() throws Exception {
>> + config = new ConfigurationFactory(true);
>> + ContainerSystemInfo containerSystem =
>> config.getOpenEjbConfiguration().containerSystem;
>> +
>> containerSystem.containers.add(config.configureService(StatelessSessionContainerInfo.class));
>>
>> + }
>> +
>> + public static class FooBean {
>> +
>> + }
>> +
>> + public static interface FooEJBHome extends EJBHome {
>> + }
>> +
>> + public static interface FooEJBObject extends EJBObject {
>> + }
>> +
>> + public static interface FooEJBLocalHome extends EJBLocalHome {
>> + }
>> +
>> + public static interface FooEJBLocalObject extends EJBLocalObject {
>> + }
>> +
>> + @Remote
>> + public static interface FooRemote {
>> + }
>> +
>> + @Local
>> + public static interface FooLocal {
>> + }
>> +
>> +}
>>
>>
>>
>>
>
>
Re: svn commit: r677503 - in /openejb/trunk/openejb3/container/openejb-core/src:
main/java/org/apache/openejb/assembler/classic/ main/java/org/apache/openejb/config/
main/java/org/apache/openejb/config/rules/ main/java/org/apache/openejb/util/
main/resourc...
Posted by Rick McGuire <ri...@gmail.com>.
David,
I'm now getting tons of test case errors trying to build...is there
additional test case cleanup required, or is the validation acting too
aggresively?
Rick
dblevins@apache.org wrote:
> Author: dblevins
> Date: Wed Jul 16 22:32:23 2008
> New Revision: 677503
>
> URL: http://svn.apache.org/viewvc?rev=677503&view=rev
> Log:
> OPENEJB-859: Improved validation for <home>, <remote>, <local-home>, <local>, <business-local> and <business-remote> elements
> Rewrote this validation completely to be more aggressive in figuring out what the user might have intended to do.
>
> Added:
> openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java
> Modified:
> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java
> 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/util/Strings.java
> openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
>
> Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?rev=677503&r1=677502&r2=677503&view=diff
> ==============================================================================
> --- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java (original)
> +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java Wed Jul 16 22:32:23 2008
> @@ -29,6 +29,7 @@
> import org.apache.openejb.spi.ContainerSystem;
> import org.apache.openejb.util.LogCategory;
> import org.apache.openejb.util.Logger;
> +import org.apache.openejb.util.Strings;
> import org.apache.openejb.loader.SystemInstance;
> import org.apache.openejb.core.CoreDeploymentInfo;
> import org.apache.openejb.core.ivm.naming.BusinessLocalReference;
> @@ -126,21 +127,10 @@
> this.type = type;
> this.annotatedName = annotatedName;
> this.xmlName = xmlName;
> - this.xmlNameCc = camelCase(xmlName);
> + this.xmlNameCc = Strings.camelCase(xmlName);
> this.openejbLegacy = openejbLegacy;
> }
>
> - private String camelCase(String string){
> - StringBuilder sb = new StringBuilder();
> - String[] strings = string.split("-");
> - for (String s : strings) {
> - int l = sb.length();
> - sb.append(s);
> - sb.setCharAt(l, Character.toUpperCase(sb.charAt(l)));
> - }
> - return sb.toString();
> - }
> -
>
> public InterfaceType getType() {
> return type;
>
> Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java
> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java?rev=677503&r1=677502&r2=677503&view=diff
> ==============================================================================
> --- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java (original)
> +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationException.java Wed Jul 16 22:32:23 2008
> @@ -36,6 +36,10 @@
> }
> }
>
> + public String getMessageKey(){
> + return message;
> + }
> +
> public Object[] getDetails() {
> return details;
> }
>
> 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=677503&r1=677502&r2=677503&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 Wed Jul 16 22:32:23 2008
> @@ -24,12 +24,15 @@
> import org.apache.openejb.jee.Interceptor;
> import org.apache.openejb.config.EjbModule;
> import org.apache.openejb.util.SafeToolkit;
> +import org.apache.openejb.util.Strings;
> import org.apache.xbean.finder.ClassFinder;
>
> import javax.ejb.EJBLocalHome;
> import javax.ejb.EJBLocalObject;
> import javax.ejb.EJBHome;
> import javax.ejb.EJBObject;
> +import javax.ejb.Local;
> +import javax.ejb.Remote;
> import javax.jws.WebService;
> import static java.lang.reflect.Modifier.isAbstract;
> import java.lang.reflect.Method;
> @@ -69,38 +72,40 @@
> public void validate(EjbModule ejbModule) {
> for (EnterpriseBean bean : ejbModule.getEjbJar().getEnterpriseBeans()) {
> try {
> - check_hasEjbClass(bean);
> + Class<?> beanClass = check_hasEjbClass(bean);
>
> if (!(bean instanceof RemoteBean)) continue;
> RemoteBean b = (RemoteBean) bean;
>
> check_isEjbClass(b);
> - check_hasDependentClasses(b, b.getEjbClass(), "<ejb-class>");
> + check_hasDependentClasses(b, b.getEjbClass(), "ejb-class");
> check_hasInterface(b);
> +
> + if (b.getRemote() != null){
> + checkInterface(b, beanClass, "remote", b.getRemote());
> + }
> +
> if (b.getHome() != null) {
> - check_hasHomeClass(b);
> - check_hasRemoteClass(b);
> - check_isHomeInterface(b);
> - check_isRemoteInterface(b);
> - check_hasDependentClasses(b, b.getHome(), "<home>");
> - check_hasDependentClasses(b, b.getRemote(), "<remote>");
> + checkInterface(b, beanClass, "home", b.getHome());
> + }
> +
> + if (b.getLocal() != null) {
> + checkInterface(b, beanClass, "local", b.getLocal());
> }
> +
> if (b.getLocalHome() != null) {
> - check_hasLocalHomeClass(b);
> - check_hasLocalClass(b);
> - check_isLocalHomeInterface(b);
> - check_isLocalInterface(b);
> - check_hasDependentClasses(b, b.getLocalHome(), "<local-home>");
> - check_hasDependentClasses(b, b.getLocal(), "<local>");
> + checkInterface(b, beanClass, "local-home", b.getLocalHome());
> }
>
> if (b instanceof SessionBean) {
> SessionBean sessionBean = (SessionBean) b;
> +
> for (String interfce : sessionBean.getBusinessLocal()) {
> - check_businessInterface(sessionBean, interfce, "<business-local>");
> + checkInterface(b, beanClass, "business-local", interfce);
> }
> +
> for (String interfce : sessionBean.getBusinessRemote()) {
> - check_businessInterface(sessionBean, interfce, "<business-remote>");
> + checkInterface(b, beanClass, "business-local", interfce);
> }
> }
> } catch (RuntimeException e) {
> @@ -113,35 +118,30 @@
> }
> }
>
> - private void check_businessInterface(SessionBean b, String interfaceName, String tagName) {
> - String ejbName = b.getEjbName();
> - Class<?> interfce = lookForClass(interfaceName, tagName, b.getEjbName());
> + private void checkInterface(RemoteBean b, Class<?> beanClass, String tag, String className) {
> + Class<?> interfce = lookForClass(className, tag, b.getEjbName());
>
> - if (!interfce.isInterface()){
> - fail(b, "notAnInterface", interfce.getName(), tagName);
> - }
> + if (interfce == null) return;
> +
> + check_hasDependentClasses(b, className, tag);
> +
> + tag = Strings.lcfirst(Strings.camelCase(tag));
> +
> + if (isValidInterface(b, interfce, beanClass, tag));
>
> ClassFinder finder = new ClassFinder(interfce);
>
> for (Class<? extends Annotation> annotation : beanOnlyAnnotations) {
> +
> if (interfce.isAnnotationPresent(annotation)){
> warn(b, "interface.beanOnlyAnnotation", annotation.getSimpleName(), interfce.getName(), b.getEjbClass());
> }
> +
> for (Method method : finder.findAnnotatedMethods(annotation)) {
> warn(b, "interfaceMethod.beanOnlyAnnotation", annotation.getSimpleName(), interfce.getName(), method.getName(), b.getEjbClass());
> }
> }
>
> - if (EJBHome.class.isAssignableFrom(interfce)){
> - fail(ejbName, "xml.businessRemoteOrLocal.ejbHome", tagName, interfce.getName());
> - } else if (EJBObject.class.isAssignableFrom(interfce)){
> - fail(ejbName, "xml.businessRemoteOrLocal.ejbObject", tagName, interfce.getName());
> - } else if (EJBLocalHome.class.isAssignableFrom(interfce)) {
> - fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalHome", tagName, interfce.getName());
> - } else if (EJBLocalObject.class.isAssignableFrom(interfce)){
> - fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalObject", tagName, interfce.getName());
> - }
> -
> }
>
> private void check_hasInterface(RemoteBean b) {
> @@ -187,7 +187,8 @@
> # 2 - Element (home, ejb-class, remote)
> # 3 - Bean name
> */
> - fail(b, "missing.dependent.class", className, e.getMessage(), type, b.getEjbName());
> + String missingClass = e.getMessage();
> + fail(b, "missing.dependent.class", className, missingClass, type, b.getEjbName());
> } catch (NoClassDefFoundError e) {
> /*
> # 0 - Referring Class name
> @@ -195,19 +196,12 @@
> # 2 - Element (home, ejb-class, remote)
> # 3 - Bean name
> */
> - fail(b, "missing.dependent.class", className, e.getMessage(), type, b.getEjbName());
> + String missingClass = e.getMessage();
> + fail(b, "missing.dependent.class", className, missingClass, type, b.getEjbName());
> }
> }
>
> - private void check_hasLocalClass(RemoteBean b) {
> - lookForClass(b.getLocal(), "<local>", b.getEjbName());
> - }
> -
> - private void check_hasLocalHomeClass(RemoteBean b) {
> - lookForClass(b.getLocalHome(), "<local-home>", b.getEjbName());
> - }
> -
> - public void check_hasEjbClass(EnterpriseBean b) {
> + public Class<?> check_hasEjbClass(EnterpriseBean b) {
>
> String ejbName = b.getEjbName();
>
> @@ -217,32 +211,22 @@
> fail(ejbName, "interfaceDeclaredAsBean", beanClass.getName());
> }
>
> - if (isCmp(b)) return;
> + if (isCmp(b)) return beanClass;
>
> if (isAbstract(beanClass.getModifiers())){
> fail(ejbName, "abstractDeclaredAsBean", beanClass.getName());
> }
> - }
> -
> - public void check_hasInterceptorClass(Interceptor i) {
> -
> - lookForClass(i.getInterceptorClass(), "<interceptor-class>", "Interceptor");
>
> + return beanClass;
> }
>
> - public void check_hasHomeClass(RemoteBean b) {
> + private void check_hasInterceptorClass(Interceptor i) {
>
> - lookForClass(b.getHome(), "<home>", b.getEjbName());
> + lookForClass(i.getInterceptorClass(), "interceptor-class", "Interceptor");
>
> }
>
> - public void check_hasRemoteClass(RemoteBean b) {
> -
> - lookForClass(b.getRemote(), "<remote>", b.getEjbName());
> -
> - }
> -
> - public void check_isEjbClass(RemoteBean b) {
> + private void check_isEjbClass(RemoteBean b) {
>
> if (b instanceof SessionBean) {
>
> @@ -258,26 +242,6 @@
>
> }
>
> - private void check_isLocalInterface(RemoteBean b) {
> - compareTypes(b, b.getLocal(), EJBLocalObject.class);
> - }
> -
> - private void check_isLocalHomeInterface(RemoteBean b) {
> - compareTypes(b, b.getLocalHome(), EJBLocalHome.class);
> - }
> -
> - public void check_isHomeInterface(RemoteBean b) {
> -
> - compareTypes(b, b.getHome(), javax.ejb.EJBHome.class);
> -
> - }
> -
> - public void check_isRemoteInterface(RemoteBean b) {
> -
> - compareTypes(b, b.getRemote(), javax.ejb.EJBObject.class);
> -
> - }
> -
> private Class<?> lookForClass(String clazz, String type, String ejbName) {
> try {
> return loadClass(clazz);
> @@ -305,6 +269,63 @@
> return null;
> }
>
> + private boolean isValidInterface(RemoteBean b, Class clazz, Class beanClass, String tag) {
> +
> + if (clazz.equals(beanClass)) {
> +
> + fail(b, "xml." + tag + ".beanClass", clazz.getName());
> +
> + } else if (!clazz.isInterface()) {
> +
> + fail(b, "xml." + tag + ".notInterface", clazz.getName());
> +
> + } else if (EJBHome.class.isAssignableFrom(clazz)) {
> +
> + if (tag.equals("home")) return true;
> +
> + fail(b, "xml." + tag + ".ejbHome", clazz.getName());
> +
> + } else if (EJBLocalHome.class.isAssignableFrom(clazz)) {
> +
> + if (tag.equals("local-home")) return true;
> +
> + fail(b, "xml." + tag + ".ejbLocalHome", clazz.getName());
> +
> + } else if (EJBObject.class.isAssignableFrom(clazz)) {
> +
> + if (tag.equals("remote")) return true;
> +
> + fail(b, "xml." + tag + ".ejbObject", clazz.getName());
> +
> + } else if (EJBLocalObject.class.isAssignableFrom(clazz)) {
> +
> + if (tag.equals("local")) return true;
> +
> + fail(b, "xml." + tag + ".ejbLocalObject", clazz.getName());
> +
> + } else if (tag.equals("businessLocal") && tag.equals("businessRemote")) {
> +
> + return true;
> + }
> +
> + // must be tagged as <home>, <local-home>, <remote>, or <local>
> + if (clazz.isAnnotationPresent(Local.class)) {
> +
> + fail(b, "xml." + tag + ".businessLocal", clazz.getName());
> +
> + } else if (clazz.isAnnotationPresent(Remote.class)) {
> +
> + fail(b, "xml." + tag + ".businessRemote", clazz.getName());
> +
> + } else {
> +
> + fail(b, "xml." + tag + ".unknown", clazz.getName());
> +
> + }
> +
> + return false;
> + }
> +
> private void compareTypes(RemoteBean b, String clazz1, Class<?> class2) {
> Class<?> class1 = null;
> try {
>
> Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java
> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java?rev=677503&r1=677502&r2=677503&view=diff
> ==============================================================================
> --- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java (original)
> +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java Wed Jul 16 22:32:23 2008
> @@ -70,4 +70,15 @@
> return sb.toString();
> }
>
> + public static String camelCase(String string){
> + StringBuilder sb = new StringBuilder();
> + String[] strings = string.split("-");
> + for (String s : strings) {
> + int l = sb.length();
> + sb.append(s);
> + sb.setCharAt(l, Character.toUpperCase(sb.charAt(l)));
> + }
> + return sb.toString();
> + }
> +
> }
>
> 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=677503&r1=677502&r2=677503&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 16 22:32:23 2008
> @@ -47,7 +47,7 @@
> # 2 - Bean name
> 1.missing.class Missing class
> 2.missing.class Missing class {0}
> -3.missing.class The class {0} not found. Check that the class specified in the {1} element for bean {2} is spelled correctly and the class is present in the jar
> +3.missing.class The class {0} not found. Check that the class specified in the <{1}> element for bean {2} is spelled correctly and the class is present in the jar
>
> # 0 - Class name
> # 1 - EJB Class name
> @@ -125,9 +125,10 @@
> # 1 - Dependent Class name
> # 2 - Element (home, ejb-class, remote)
> # 3 - Bean name
> +# fail(b, "missing.dependent.class", className, missingClass, type, b.getEjbName());
> 1.missing.dependent.class Missing dependent class or library
> -2.missing.dependent.class Missing dependent class or library: {1} needed by {2}
> -3.missing.dependent.class The class {1} not found and is referenced by the {2} class {0}. The Check that the class or related library is available in the classpath
> +2.missing.dependent.class Missing dependent class or library: {1} needed by {0}
> +3.missing.dependent.class The class {1} not found and is referenced by the <{2}> class {0}. The Check that the class or related library is available in the classpath
>
>
> # CheckAssemblyBindings.java
> @@ -304,26 +305,6 @@
> 2.ann.remoteOrLocal.ejbLocalObject = @{0} used in bean class lists a javax.ejb.EJBLocalObject interface. Use @LocalHome with home interface of "{1}".
> 3.ann.remoteOrLocal.ejbLocalObject = When applied to a bean class, the @{0} annotation must only list business interfaces and cannot list legacy EJBLocalObject interfaces. The EJBLocalHome of interface for "{1}" can be annotated on the bean class with @LocalHome
>
> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbHome", tagName, interfce.getName());
> -1.xml.businessRemoteOrLocal.ejbHome = javax.ejb.EJBHome interface declared as {0}.
> -2.xml.businessRemoteOrLocal.ejbHome = javax.ejb.EJBHome interface declared as {0}. Use <home>{1}</home>
> -3.xml.businessRemoteOrLocal.ejbHome = Interfaces extending javax.ejb.EJBHome pre-date the concept of EJB 3.0 simplified business interfaces and must not use the {0} tag when declared in the ejb-jar.xml. Declare this interface as <home>{1}</home>.
> -
> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalHome", tagName, interfce.getName());
> -1.xml.businessRemoteOrLocal.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as {0}.
> -2.xml.businessRemoteOrLocal.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as {0}. Use <local-home>{1}</local-home>
> -3.xml.businessRemoteOrLocal.ejbLocalHome = Interfaces extending javax.ejb.EJBLocalHome pre-date the concept of EJB 3.0 simplified business interfaces and must not use the {0} tag when declared in the ejb-jar.xml. Declare this interface as <local-home>{1}</local-home>.
> -
> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbObject", tagName, interfce.getName());
> -1.xml.businessRemoteOrLocal.ejbObject = javax.ejb.EJBObject interface declared as {0}.
> -2.xml.businessRemoteOrLocal.ejbObject = javax.ejb.EJBObject interface declared as {0}. Use <remote>{1}</remote>
> -3.xml.businessRemoteOrLocal.ejbObject = Interfaces extending javax.ejb.EJBObject pre-date the concept of EJB 3.0 simplified business interfaces and must not use the {0} tag when declared in the ejb-jar.xml. Declare this interface as <remote>{1}</remote>.
> -
> -# fail(ejbName, "xml.businessRemoteOrLocal.ejbLocalObject", tagName, interfce.getName());
> -1.xml.businessRemoteOrLocal.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as {0}.
> -2.xml.businessRemoteOrLocal.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as {0}. Use <local>{1}</local>
> -3.xml.businessRemoteOrLocal.ejbLocalObject = Interfaces extending javax.ejb.EJBLocalObject pre-date the concept of EJB 3.0 simplified business interfaces and must not use the {0} tag when declared in the ejb-jar.xml. Declare this interface as <local>{1}</local>.
> -
> # warn(bean, "ignoredStatefulAnnotation", annotationType, beanType, methodName);
> 1.ignoredStatefulAnnotation = @{0} is ignored for beans of type {1}
> 2.ignoredStatefulAnnotation = @{0} is ignored for beans of type {1}. Method: {2}
> @@ -524,11 +505,6 @@
> Which can then be implemented by the {0} class.\
>
>
> -# fail(b, "notAnInterface", interfce.getName(), tagName);
> -1.notAnInterface = Business remotes and locals must be interfaces.
> -2.notAnInterface = Class tagged as {1} is not an interface: {0}
> -3.notAnInterface = All business remote and business local views must be java interfaces. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related {1} xml tag from your ejb-jar.xml.
> -
> # fail(ejbName, "ann.notAnInterface", annotationName, interfce.getName());
> 1.ann.notAnInterface = @{0} lists a non-interface.
> 2.ann.notAnInterface = @{0} lists a non-interface: {1}
> @@ -574,3 +550,195 @@
> 2.ann.invalidConcurrencyAttribute = Ignoring {0} invalid @Lock annotations. Bean not using Container-Managed Concurrencys.
> 3.ann.invalidConcurrencyAttribute = The @Lock annotation applies only to beans using Container-Managed Concurrencys. Beans marked as @ConcurrencyManagement(BEAN) are responsible for thier own concurrency and may not use the @Lock annotation. There are {0} such invalid annotations in the bean class that will be ignored and should be removed.
>
> +
> +1.xml.home.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <home>. Use <local-home>{0}</local-home>
> +2.xml.home.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <home>. Use <local-home>{0}</local-home>
> +3.xml.home.ejbLocalHome = The <home> element is for interfaces extending javax.ejb.EJBHome. The interface supplied is a javax.ejb.EJBLocalHome and should be declared with the <local-home> element as in: <local-home>{0}</local-home>
> +
> +1.xml.home.ejbObject = javax.ejb.EJBObject interface declared as <home>. Use <remote>{0}</remote>
> +2.xml.home.ejbObject = javax.ejb.EJBObject interface declared as <home>. Use <remote>{0}</remote>
> +3.xml.home.ejbObject = The <home> element is for interfaces extending javax.ejb.EJBHome. The interface supplied is a javax.ejb.EJBObject and should be declared with the <remote> element as in: <remote>{0}</remote>
> +
> +1.xml.home.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <home>. Use <local>{0}</local>
> +2.xml.home.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <home>. Use <local>{0}</local>
> +3.xml.home.ejbLocalObject = The <home> element is for interfaces extending javax.ejb.EJBHome. The interface supplied is a javax.ejb.EJBLocalObject and should be declared with the <local> element as in: <local>{0}</local>
> +
> +1.xml.home.businessLocal = EJB 3.0 business interface declared as <home>. Use <business-local>{0}</business-local>
> +2.xml.home.businessLocal = EJB 3.0 business interface declared as <home>. Use <business-local>{0}</business-local>
> +3.xml.home.businessLocal = The <home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBHome. EJB 3.0 simplified business interfaces can be decalred via <business-local>{0}</business-local> or via the @Remote annotation on the bean class or interface class.
> +
> +1.xml.home.businessRemote = EJB 3.0 business interface declared as <home>. Use <business-remote>{0}</business-remote>
> +2.xml.home.businessRemote = EJB 3.0 business interface declared as <home>. Use <business-remote>{0}</business-remote>
> +3.xml.home.businessRemote = The <home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBHome. EJB 3.0 simplified business interfaces can be decalred via <business-remote>{0}</business-remote> or via the @Remote annotation on the bean class or interface class.
> +
> +1.xml.home.beanClass = Bean class mistakenly declared as <home>
> +2.xml.home.beanClass = Bean class mistakenly declared as <home>
> +3.xml.home.beanClass = The <home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBHome. The bean class cannot be used as a home interface.
> +
> +1.xml.home.notInterface = The value of <home> is not an interface
> +2.xml.home.notInterface = The value of <home> is not an interface: {0}
> +3.xml.home.notInterface = The <home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBHome. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related <home> xml tag from your ejb-jar.xml
> +
> +1.xml.home.unknown = The value of <home> must be an interface extending javax.ejb.EJBHome
> +2.xml.home.unknown = The value of <home> must be an interface extending javax.ejb.EJBHome
> +3.xml.home.unknown = The <home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBHome. If this interface is intended to be an EJB 3.0 business remote view, declare this interface as <business-remote>{0}</business-remote> or via the @Remote annotation on the bean class or interface class.
> +
> +
> +
> +1.xml.remote.ejbHome = javax.ejb.EJBHome interface declared as <remote>. Use <home>{0}</home>
> +2.xml.remote.ejbHome = javax.ejb.EJBHome interface declared as <remote>. Use <home>{0}</home>
> +3.xml.remote.ejbHome = The <remote> element is for interfaces extending javax.ejb.EJBObject. The interface supplied is a javax.ejb.EJBHome and should be declared with the <home> element as in: <home>{0}</home>
> +
> +1.xml.remote.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <remote>. Use <local-home>{0}</local-home>
> +2.xml.remote.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <remote>. Use <local-home>{0}</local-home>
> +3.xml.remote.ejbLocalHome = The <remote> element is for interfaces extending javax.ejb.EJBHome. The interface supplied is a javax.ejb.EJBLocalHome and should be declared with the <local-home> element as in: <local-home>{0}</local-home>
> +
> +1.xml.remote.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <remote>. Use <local>{0}</local>
> +2.xml.remote.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <remote>. Use <local>{0}</local>
> +3.xml.remote.ejbLocalObject = The <remote> element is for interfaces extending javax.ejb.EJBObject. The interface supplied is a javax.ejb.EJBLocalObject and should be declared with the <local> element as in: <local>{0}</local>
> +
> +# must be attempting an override
> +1.xml.remote.businessLocal = EJB 3.0 business interface declared as <remote>. Use <business-remote>{0}</business-remote>
> +2.xml.remote.businessLocal = EJB 3.0 business interface declared as <remote>. Use <business-remote>{0}</business-remote>
> +3.xml.remote.businessLocal = The <remote> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBObject. EJB 3.0 simplified business interfaces can be decalred via <business-local>{0}</business-local> or via the @Remote annotation on the bean class or interface class.
> +
> +1.xml.remote.businessRemote = EJB 3.0 business interface declared as <remote>. Use <business-remote>{0}</business-remote>
> +2.xml.remote.businessRemote = EJB 3.0 business interface declared as <remote>. Use <business-remote>{0}</business-remote>
> +3.xml.remote.businessRemote = The <remote> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBObject. EJB 3.0 simplified business interfaces can be decalred via <business-remote>{0}</business-remote> or via the @Remote annotation on the bean class or interface class.
> +
> +1.xml.remote.beanClass = Bean class mistakenly declared as <remote>
> +2.xml.remote.beanClass = Bean class mistakenly declared as <remote>
> +3.xml.remote.beanClass = The <remote> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBObject. The bean class cannot be used as a home interface.
> +
> +1.xml.remote.notInterface = The value of <remote> is not an interface
> +2.xml.remote.notInterface = The value of <remote> is not an interface: {0}
> +3.xml.remote.notInterface = The <remote> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBObject. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related <remote> xml tag from your ejb-jar.xml
> +
> +1.xml.remote.unknown = The value of <remote> must be an interface extending javax.ejb.EJBObject
> +2.xml.remote.unknown = The value of <remote> must be an interface extending javax.ejb.EJBObject
> +3.xml.remote.unknown = The <remote> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBObject. If this interface is intended to be an EJB 3.0 business remote view, declare this interface as <business-remote>{0}</business-remote> or via the @Remote annotation on the bean class or interface class.
> +
> +
> +
> +
> +1.xml.localHome.ejbHome = javax.ejb.EJBHome interface declared as <local-home>. Use <home>{0}</home>
> +2.xml.localHome.ejbHome = javax.ejb.EJBHome interface declared as <local-home>. Use <home>{0}</home>
> +3.xml.localHome.ejbHome = The <local-home> element is for interfaces extending javax.ejb.EJBLocalHome. The interface supplied is a javax.ejb.EJBHome and should be declared with the <home> element as in: <home>{0}</home>
> +
> +1.xml.localHome.ejbObject = javax.ejb.EJBObject interface declared as <local-home>. Use <remote>{0}</remote>
> +2.xml.localHome.ejbObject = javax.ejb.EJBObject interface declared as <local-home>. Use <remote>{0}</remote>
> +3.xml.localHome.ejbObject = The <local-home> element is for interfaces extending javax.ejb.EJBLocalHome. The interface supplied is a javax.ejb.EJBObject and should be declared with the <remote> element as in: <remote>{0}</remote>
> +
> +1.xml.localHome.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <local-home>. Use <local>{0}</local>
> +2.xml.localHome.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <local-home>. Use <local>{0}</local>
> +3.xml.localHome.ejbLocalObject = The <local-home> element is for interfaces extending javax.ejb.EJBLocalHome. The interface supplied is a javax.ejb.EJBLocalObject and should be declared with the <local> element as in: <local>{0}</local>
> +
> +1.xml.localHome.businessLocal = EJB 3.0 business interface declared as <local-home>. Use <business-local>{0}</business-local>
> +2.xml.localHome.businessLocal = EJB 3.0 business interface declared as <local-home>. Use <business-local>{0}</business-local>
> +3.xml.localHome.businessLocal = The <local-home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. EJB 3.0 simplified business interfaces can be decalred via <business-local>{0}</business-local> or via the @Remote annotation on the bean class or interface class.
> +
> +1.xml.localHome.businessRemote = EJB 3.0 business interface declared as <local-home>. Use <business-remote>{0}</business-remote>
> +2.xml.localHome.businessRemote = EJB 3.0 business interface declared as <local-home>. Use <business-remote>{0}</business-remote>
> +3.xml.localHome.businessRemote = The <local-home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. EJB 3.0 simplified business interfaces can be decalred via <business-remote>{0}</business-remote> or via the @Remote annotation on the bean class or interface class.
> +
> +1.xml.localHome.beanClass = Bean class mistakenly declared as <local-home>
> +2.xml.localHome.beanClass = Bean class mistakenly declared as <local-home>
> +3.xml.localHome.beanClass = The <local-home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. The bean class cannot be used as a home interface.
> +
> +1.xml.localHome.notInterface = The value of <local-home> is not an interface
> +2.xml.localHome.notInterface = The value of <local-home> is not an interface: {0}
> +3.xml.localHome.notInterface = The <local-home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related <local-home> xml tag from your ejb-jar.xml
> +
> +1.xml.localHome.unknown = The value of <local-home> must be an interface extending javax.ejb.EJBLocalHome
> +2.xml.localHome.unknown = The value of <local-home> must be an interface extending javax.ejb.EJBLocalHome
> +3.xml.localHome.unknown = The <local-home> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalHome. If this interface is intended to be an EJB 3.0 business local view, declare this interface as <business-local>{0}</business-local> or via the @Local annotation on the bean class or interface class.
> +
> +
> +
> +
> +1.xml.local.ejbHome = javax.ejb.EJBHome interface declared as <local>. Use <home>{0}</home>
> +2.xml.local.ejbHome = javax.ejb.EJBHome interface declared as <local>. Use <home>{0}</home>
> +3.xml.local.ejbHome = The <local> element is for interfaces extending javax.ejb.EJBLocalObject. The interface supplied is a javax.ejb.EJBHome and should be declared with the <home> element as in: <home>{0}</home>
> +
> +1.xml.local.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <local>. Use <local-home>{0}</local-home>
> +2.xml.local.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <local>. Use <local-home>{0}</local-home>
> +3.xml.local.ejbLocalHome = The <local> element is for interfaces extending javax.ejb.EJBLocalObject. The interface supplied is a javax.ejb.EJBLocalHome and should be declared with the <local-home> element as in: <local-home>{0}</local-home>
> +
> +1.xml.local.ejbObject = javax.ejb.EJBObject interface declared as <local>. Use <remote>{0}</remote>
> +2.xml.local.ejbObject = javax.ejb.EJBObject interface declared as <local>. Use <remote>{0}</remote>
> +3.xml.local.ejbObject = The <local> element is for interfaces extending javax.ejb.EJBLocalObject. The interface supplied is a javax.ejb.EJBObject and should be declared with the <remote> element as in: <remote>{0}</remote>
> +
> +1.xml.local.businessLocal = EJB 3.0 business interface declared as <local>. Use <business-local>{0}</business-local>
> +2.xml.local.businessLocal = EJB 3.0 business interface declared as <local>. Use <business-local>{0}</business-local>
> +3.xml.local.businessLocal = The <local> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalObject. EJB 3.0 simplified business interfaces can be decalred via <business-local>{0}</business-local> or via the @Remote annotation on the bean class or interface class.
> +
> +# must be attempting an override
> +1.xml.local.businessRemote = EJB 3.0 business interface declared as <local>. Use <business-local>{0}</business-local>
> +2.xml.local.businessRemote = EJB 3.0 business interface declared as <local>. Use <business-local>{0}</business-local>
> +3.xml.local.businessRemote = The <local> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalObject. EJB 3.0 simplified business interfaces can be decalred via <business-remote>{0}</business-remote> or via the @Remote annotation on the bean class or interface class.
> +
> +1.xml.local.beanClass = Bean class mistakenly declared as <local>
> +2.xml.local.beanClass = Bean class mistakenly declared as <local>
> +3.xml.local.beanClass = The <local> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalObject. The bean class cannot be used as a home interface.
> +
> +1.xml.local.notInterface = The value of <local> is not an interface
> +2.xml.local.notInterface = The value of <local> is not an interface: {0}
> +3.xml.local.notInterface = The <local> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalObject. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related <local> xml tag from your ejb-jar.xml
> +
> +1.xml.local.unknown = The value of <local> must be an interface extending javax.ejb.EJBLocalObject
> +2.xml.local.unknown = The value of <local> must be an interface extending javax.ejb.EJBLocalObject. Perhaps you meant to use <business-local>{0}</business-local>
> +3.xml.local.unknown = The <local> element of the ejb-jar.xml is for interfaces extending javax.ejb.EJBLocalObject. If this interface is intended to be an EJB 3.0 business local view, declare this interface as <business-local>{0}</business-local> or via the @Local annotation on the bean class or interface class.
> +
> +
> +
> +
> +1.xml.businessRemote.ejbHome = javax.ejb.EJBHome interface declared as <business-remote>. Use <home>{0}</home>
> +2.xml.businessRemote.ejbHome = javax.ejb.EJBHome interface declared as <business-remote>. Use <home>{0}</home>
> +3.xml.businessRemote.ejbHome = Interfaces extending javax.ejb.EJBHome must use the <home> tag, not the <business-remote> tag, when declared in the ejb-jar.xml. Declare this interface as <home>{0}</home> or alternatively add @RemoteHome({0}.class) to the top of your bean class.
> +
> +1.xml.businessRemote.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <business-remote>. Use <local-home>{0}</local-home>
> +2.xml.businessRemote.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <business-remote>. Use <local-home>{0}</local-home>
> +3.xml.businessRemote.ejbLocalHome = Interfaces extending javax.ejb.EJBLocalHome must use the <local-home> tag, not the <business-remote> tag, when declared in the ejb-jar.xml. Declare this interface as <local-home>{0}</local-home> or alternatively add @LocalHome({0}.class) to the top of your bean class.
> +
> +1.xml.businessRemote.ejbObject = javax.ejb.EJBObject interface declared as <business-remote>. Use <remote>{0}</remote>
> +2.xml.businessRemote.ejbObject = javax.ejb.EJBObject interface declared as <business-remote>. Use <remote>{0}</remote>
> +3.xml.businessRemote.ejbObject = Interfaces extending javax.ejb.EJBObject must use the <remote> tag, not the <business-remote> tag, when declared in the ejb-jar.xml. Declare this interface as <remote>{0}</remote>.
> +
> +1.xml.businessRemote.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <business-remote>. Use <local>{0}</local>
> +2.xml.businessRemote.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <business-remote>. Use <local>{0}</local>
> +3.xml.businessRemote.ejbLocalObject = Interfaces extending javax.ejb.EJBLocalObject must use the <local> tag, not the <business-remote> tag, when declared in the ejb-jar.xml. Declare this interface as <local>{0}</local>.
> +
> +1.xml.businessRemote.beanClass = Bean class mistakenly declared as <business-remote>
> +2.xml.businessRemote.beanClass = Bean class mistakenly declared as <business-remote>
> +3.xml.businessRemote.beanClass = The bean class cannot itself cannot be used as the value of the <business-remote> element of the ejb-jar.xml. Either list a valid java interface or delete this element and annotate the intended interface with the @Remote annotation.
> +
> +1.xml.businessRemote.notInterface = The value of <business-remote> is not an interface
> +2.xml.businessRemote.notInterface = The value of <business-remote> is not an interface: {0}
> +3.xml.businessRemote.notInterface = The <business-remote> element of the ejb-jar.xml must be an interface. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related <business-remote> xml tag from your ejb-jar.xml
> +
> +
> +
> +
> +1.xml.businessLocal.ejbHome = javax.ejb.EJBHome interface declared as <business-local>. Use <home>{0}</home>
> +2.xml.businessLocal.ejbHome = javax.ejb.EJBHome interface declared as <business-local>. Use <home>{0}</home>
> +3.xml.businessLocal.ejbHome = Interfaces extending javax.ejb.EJBHome must use the <home> tag, not the <business-local> tag, when declared in the ejb-jar.xml. Declare this interface as <home>{0}</home> or alternatively add @RemoteHome({0}.class) to the top of your bean class.
> +
> +1.xml.businessLocal.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <business-local>. Use <local-home>{0}</local-home>
> +2.xml.businessLocal.ejbLocalHome = javax.ejb.EJBLocalHome interface declared as <business-local>. Use <local-home>{0}</local-home>
> +3.xml.businessLocal.ejbLocalHome = Interfaces extending javax.ejb.EJBLocalHome must use the <local-home> tag, not the <business-local> tag, when declared in the ejb-jar.xml. Declare this interface as <local-home>{0}</local-home> or alternatively add @LocalHome({0}.class) to the top of your bean class.
> +
> +1.xml.businessLocal.ejbObject = javax.ejb.EJBObject interface declared as <business-local>. Use <remote>{0}</remote>
> +2.xml.businessLocal.ejbObject = javax.ejb.EJBObject interface declared as <business-local>. Use <remote>{0}</remote>
> +3.xml.businessLocal.ejbObject = Interfaces extending javax.ejb.EJBObject must use the <remote> tag, not the <business-local> tag, when declared in the ejb-jar.xml. Declare this interface as <remote>{0}</remote>.
> +
> +1.xml.businessLocal.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <business-local>. Use <local>{0}</local>
> +2.xml.businessLocal.ejbLocalObject = javax.ejb.EJBLocalObject interface declared as <business-local>. Use <local>{0}</local>
> +3.xml.businessLocal.ejbLocalObject = Interfaces extending javax.ejb.EJBLocalObject must use the <local> tag, not the <business-local> tag, when declared in the ejb-jar.xml. Declare this interface as <local>{0}</local>.
> +
> +1.xml.businessLocal.beanClass = Bean class mistakenly declared as <business-local>
> +2.xml.businessLocal.beanClass = Bean class mistakenly declared as <business-local>
> +3.xml.businessLocal.beanClass = The bean class cannot itself cannot be used as the value of the <business-local> element of the ejb-jar.xml. Either 1) list a valid java interface or 2) delete this element and annotate the intended interface with the @Local annotation.
> +
> +1.xml.businessLocal.notInterface = The value of <business-local> is not an interface
> +2.xml.businessLocal.notInterface = The value of <business-local> is not an interface: {0}
> +3.xml.businessLocal.notInterface = The <business-local> element of the ejb-jar.xml must be an interface. Classes, abstract classes or enums are not allowed. Either convert {0} to an interface or remove the related <business-local> xml tag from your ejb-jar.xml
>
> Added: 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=677503&view=auto
> ==============================================================================
> --- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java (added)
> +++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java Wed Jul 16 22:32:23 2008
> @@ -0,0 +1,88 @@
> +/**
> + * 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.config.rules;
> +
> +import junit.framework.TestCase;
> +import org.apache.openejb.assembler.classic.ContainerSystemInfo;
> +import org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
> +import org.apache.openejb.config.ConfigurationFactory;
> +import org.apache.openejb.config.ValidationFailedException;
> +import org.apache.openejb.config.ValidationFailure;
> +import org.apache.openejb.jee.EjbJar;
> +import org.apache.openejb.jee.StatelessBean;
> +
> +import javax.ejb.EJBHome;
> +import javax.ejb.EJBLocalHome;
> +import javax.ejb.EJBLocalObject;
> +import javax.ejb.EJBObject;
> +import javax.ejb.Local;
> +import javax.ejb.Remote;
> +
> +/**
> + * @version $Rev$ $Date$
> + */
> +public class InvalidInterfacesTest extends TestCase {
> + private ConfigurationFactory config;
> +
> + public void testBadHomeAndLocal() 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);
> +
> + try {
> + config.configureApplication(ejbJar);
> + } catch (ValidationFailedException e) {
> + for (ValidationFailure failure : e.getFailures()) {
> + System.out.println("failure = " + failure.getMessageKey());
> + }
> + }
> +
> + }
> +
> + public void setUp() throws Exception {
> + config = new ConfigurationFactory(true);
> + ContainerSystemInfo containerSystem = config.getOpenEjbConfiguration().containerSystem;
> + containerSystem.containers.add(config.configureService(StatelessSessionContainerInfo.class));
> + }
> +
> + public static class FooBean {
> +
> + }
> +
> + public static interface FooEJBHome extends EJBHome {
> + }
> +
> + public static interface FooEJBObject extends EJBObject {
> + }
> +
> + public static interface FooEJBLocalHome extends EJBLocalHome {
> + }
> +
> + public static interface FooEJBLocalObject extends EJBLocalObject {
> + }
> +
> + @Remote
> + public static interface FooRemote {
> + }
> +
> + @Local
> + public static interface FooLocal {
> + }
> +
> +}
>
>
>
>