Diff
Modified: trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/ConfigurationFactory.java (2567 => 2568)
--- trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/ConfigurationFactory.java 2006-03-22 01:56:22 UTC (rev 2567)
+++ trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/ConfigurationFactory.java 2006-03-22 02:00:32 UTC (rev 2568)
@@ -56,8 +56,8 @@
public class ConfigurationFactory implements OpenEjbConfigurationFactory, ProviderDefaults {
public static final String DEFAULT_SECURITY_ROLE = "openejb.default.security.role";
- protected static final Logger logger = Logger.getInstance("OpenEJB.startup", "org.openejb.util.resources");
- protected static final Messages messages = new Messages("org.openejb.util.resources");
+ protected static final Logger logger = Logger.getInstance("OpenEJB.startup", "org.openejb.alt.config.rules");
+ protected static final Messages messages = new Messages("org.openejb.alt.config.rules");
private AutoDeployer deployer;
private Openejb openejb;
@@ -1086,7 +1086,8 @@
ValidationError[] errors = set.getErrors();
for (int j = 0; j < errors.length; j++) {
ValidationError e = errors[j];
- logger.error(e.getPrefix() + " ... " + e.getBean().getEjbName() + ":\t" + e.getMessage(2));
+ String ejbName = (e.getBean() != null)? e.getBean().getEjbName(): "null";
+ logger.error(e.getPrefix() + " ... " + ejbName + ":\t" + e.getMessage(2));
}
ValidationFailure[] failures = set.getFailures();
for (int j = 0; j < failures.length; j++) {
Modified: trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/EjbValidator.java (2567 => 2568)
--- trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/EjbValidator.java 2006-03-22 01:56:22 UTC (rev 2567)
+++ trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/EjbValidator.java 2006-03-22 02:00:32 UTC (rev 2568)
@@ -11,6 +11,11 @@
import org.openejb.OpenEJBException;
import org.openejb.loader.SystemInstance;
import org.openejb.alt.config.ejb11.EjbJar;
+import org.openejb.alt.config.ejb11.EjbRef;
+import org.openejb.alt.config.ejb11.EjbLocalRef;
+import org.openejb.alt.config.ejb11.EnvEntry;
+import org.openejb.alt.config.ejb11.ResourceRef;
+import org.openejb.alt.config.ejb11.SecurityRoleRef;
import org.openejb.alt.config.rules.CheckClasses;
import org.openejb.alt.config.rules.CheckMethods;
import org.openejb.util.JarUtils;
@@ -20,7 +25,7 @@
public class EjbValidator {
private static final String helpBase = "META-INF/org.openejb.cli/";
- protected static final Messages _messages = new Messages("org.openejb.util.resources");
+ protected static final Messages _messages = new Messages("org.openejb.alt.config.rules");
int LEVEL = 2;
boolean PRINT_DETAILS = false;
@@ -47,7 +52,7 @@
return ejbSets;
}
- public EjbSet validateJar(EjbJarUtils ejbJarUtils, ClassLoader classLoader) {
+ public EjbSet validateJar(final EjbJarUtils ejbJarUtils, ClassLoader classLoader) {
EjbSet set = null;
try {
@@ -59,6 +64,70 @@
} catch (Throwable e) {
e.printStackTrace(System.out);
ValidationError err = new ValidationError("cannot.validate");
+ err.setCause(e);
+ err.setBean(new Bean(){
+
+ public String getType() {
+ return "Ejb-jar";
+ }
+
+ public Object getBean() {
+ return null;
+ }
+
+ public String getEjbName() {
+ String name = ejbJarUtils.getEjbJar().getDisplayName();
+ if (name == null){
+ File jar = new File(ejbJarUtils.getJarLocation());
+ jar = jar.getAbsoluteFile();
+ name = jar.getName();
+ if (name.equals(".")){
+ name = jar.getParentFile().getName();
+ }
+ }
+ return name;
+ }
+
+ public String getEjbClass() {
+ return null;
+ }
+
+ public String getHome() {
+ return null;
+ }
+
+ public String getRemote() {
+ return null;
+ }
+
+ public String getLocalHome() {
+ return null;
+ }
+
+ public String getLocal() {
+ return null;
+ }
+
+ public EjbRef[] getEjbRef() {
+ return new EjbRef[0];
+ }
+
+ public EjbLocalRef[] getEjbLocalRef() {
+ return new EjbLocalRef[0];
+ }
+
+ public EnvEntry[] getEnvEntry() {
+ return new EnvEntry[0];
+ }
+
+ public ResourceRef[] getResourceRef() {
+ return new ResourceRef[0];
+ }
+
+ public SecurityRoleRef[] getSecurityRoleRef() {
+ return new SecurityRoleRef[0];
+ }
+ });
err.setDetails(e.getMessage());
set.addError(err);
}
Modified: trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/ValidationError.java (2567 => 2568)
--- trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/ValidationError.java 2006-03-22 01:56:22 UTC (rev 2567)
+++ trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/ValidationError.java 2006-03-22 02:00:32 UTC (rev 2568)
@@ -2,6 +2,8 @@
public class ValidationError extends ValidationException {
+ private Throwable cause;
+
public ValidationError(String message) {
super(message);
}
@@ -14,4 +16,12 @@
return "errors";
}
+ public Throwable getCause() {
+ return cause;
+ }
+
+ public void setCause(Throwable cause) {
+ this.cause = cause;
+ }
+
}
Modified: trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/rules/CheckClasses.java (2567 => 2568)
--- trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/rules/CheckClasses.java 2006-03-22 01:56:22 UTC (rev 2567)
+++ trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/rules/CheckClasses.java 2006-03-22 02:00:32 UTC (rev 2568)
@@ -9,6 +9,7 @@
import javax.ejb.EJBLocalHome;
import javax.ejb.EJBLocalObject;
+import java.lang.reflect.Method;
public class CheckClasses implements ValidationRule {
@@ -25,17 +26,22 @@
b = beans[i];
check_hasEjbClass(b);
check_isEjbClass(b);
+ check_hasDependentClasses(b, b.getEjbClass(), "<ejb-class>");
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>");
}
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>");
}
}
} catch (RuntimeException e) {
@@ -43,6 +49,45 @@
}
}
+ private void check_hasDependentClasses(Bean b, String className, String type) {
+ try {
+ ClassLoader cl = set.getClassLoader();
+ Class clazz = cl.loadClass(className);
+ for (Object item : clazz.getFields()) { item.toString(); }
+ for (Object item : clazz.getMethods()) { item.toString(); }
+ for (Object item : clazz.getConstructors()) { item.toString(); }
+ for (Object item : clazz.getAnnotations()) { item.toString(); }
+ for (Object item : clazz.getEnumConstants()) { item.toString(); }
+ } catch (NullPointerException e) {
+ // Don't know why I get these from clazz.getEnumConstants()
+ } catch (ClassNotFoundException e) {
+ /*
+ # 0 - Referring Class name
+ # 1 - Dependent Class name
+ # 2 - Element (home, ejb-class, remote)
+ # 3 - Bean name
+ */
+ ValidationFailure failure = new ValidationFailure("missing.dependent.class");
+ failure.setDetails(className, e.getMessage(), type, b.getEjbName());
+ failure.setBean(b);
+
+ set.addFailure(failure);
+ } catch (NoClassDefFoundError e) {
+ /*
+ # 0 - Referring Class name
+ # 1 - Dependent Class name
+ # 2 - Element (home, ejb-class, remote)
+ # 3 - Bean name
+ */
+
+ ValidationFailure failure = new ValidationFailure("missing.dependent.class");
+ failure.setDetails(className, e.getMessage(), type, b.getEjbName());
+ failure.setBean(b);
+
+ set.addFailure(failure);
+ }
+ }
+
private void check_hasLocalClass(Bean b) {
lookForClass(b, b.getLocal(), "<local>");
}
@@ -162,6 +207,5 @@
throw new OpenEJBException(SafeToolkit.messages.format("cl0007", clazz, set.getJarPath()));
}
}
-
}
Modified: trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/rules/Messages.properties (2567 => 2568)
--- trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/rules/Messages.properties 2006-03-22 01:56:22 UTC (rev 2567)
+++ trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/rules/Messages.properties 2006-03-22 02:00:32 UTC (rev 2568)
@@ -46,12 +46,11 @@
# Validation Rule messages
#--------------------------------------------------------------------
-# 0 - Class name
-# 1 - Element (home, ejb-class, remote)
-# 2 - Bean name
+# 0 - Error Message
+# 1 - Stack Trace
1.cannot.validate Cannot validate jar
-2.cannot.validate Cannot validate jar
-3.cannot.validate {0}
+2.cannot.validate Cannot validate jar: {0}
+3.cannot.validate Cannot validate jar: {0}
# 0 - Class name
# 1 - Element (home, ejb-class, remote)
@@ -116,3 +115,10 @@
2.misslocated.class Misslocated class {0}
3.misslocated.class The class {0} was found in a parent classloader and was loaded from there rather than this jar. However, a dependent class {3} was not found in the parent classloader. \n\nThere are two ways to fix this:\n\nOne, remove the class {0} from the jar in the parent classloader to ensure the class is only loaded from this jar.\n\nTwo, move the dependent class {3} and any other dependent classes into the jar in the parent classloader. \n\nMore information can be found at http://www.openejb.org/faq_validation.html#misslocated.class
+# 0 - Referring Class name
+# 1 - Dependent Class name
+# 2 - Element (home, ejb-class, remote)
+# 3 - Bean name
+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