[prev in list] [next in list] [prev in thread] [next in thread]
List: openejb-cvs
Subject: [openejb-scm] [2568] trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config: Add
From: dblevins () codehaus ! org
Date: 2006-03-22 1:58:22
Message-ID: 20060322020035.9966.qmail () codehaus ! org
[Download RAW message or body]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><style type="text/css"><!--
#msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li { font-family: verdana,arial,helvetica,sans-serif; \
font-size: 10pt; } #msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: \
bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: \
6px; } #msg ul, pre { overflow: auto; }
#patch { width: 100%; }
#patch h4 {font-family: \
verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, \
#patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins \
{background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del \
{background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, \
.info {color:#888;background:#fff;}
--></style>
<title>[2568] trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config: \
Added checks for dependent classes.</title> </head>
<body>
<div id="msg">
<dl>
<dt>Revision</dt> <dd>2568</dd>
<dt>Author</dt> <dd>dblevins</dd>
<dt>Date</dt> <dd>2006-03-21 21:00:32 -0500 (Tue, 21 Mar 2006)</dd>
</dl>
<h3>Log Message</h3>
<pre>Added checks for dependent classes. Improved message handling for validation \
errors.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkopenejb3containeropenejbcoresrcmainjavaorgopenejbaltconfigConfigura \
tionFactoryjava">trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/ConfigurationFactory.java</a></li>
<li><a href="#trunkopenejb3containeropenejbcoresrcmainjavaorgopenejbaltconfigEjbValid \
atorjava">trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/EjbValidator.java</a></li>
<li><a href="#trunkopenejb3containeropenejbcoresrcmainjavaorgopenejbaltconfigValidati \
onErrorjava">trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/ValidationError.java</a></li>
<li><a href="#trunkopenejb3containeropenejbcoresrcmainjavaorgopenejbaltconfigrulesChe \
ckClassesjava">trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/rules/CheckClasses.java</a></li>
<li><a href="#trunkopenejb3containeropenejbcoresrcmainjavaorgopenejbaltconfigrulesMes \
sagesproperties">trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/rules/Messages.properties</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkopenejb3containeropenejbcoresrcmainjavaorgopenejbaltconfigConfigurationFactoryjava"></a>
<div class="modfile"><h4>Modified: \
trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/ConfigurationFactory.java \
(2567 => 2568)</h4> <pre class="diff">
<span class="info">--- \
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) </span><span class="lines">@@ -56,8 +56,8 @@
</span><span class="cx"> public class ConfigurationFactory implements \
OpenEjbConfigurationFactory, ProviderDefaults { </span><span class="cx">
</span><span class="cx"> public static final String DEFAULT_SECURITY_ROLE = \
"openejb.default.security.role"; </span><del>- protected static final \
Logger logger = Logger.getInstance("OpenEJB.startup", \
"org.openejb.util.resources");
- protected static final Messages messages = new \
Messages("org.openejb.util.resources"); </del><ins>+ 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"); </ins><span \
class="cx"> </span><span class="cx"> private AutoDeployer deployer;
</span><span class="cx"> private Openejb openejb;
</span><span class="lines">@@ -1086,7 +1086,8 @@
</span><span class="cx"> ValidationError[] errors = \
set.getErrors(); </span><span class="cx"> for (int j = 0; j < \
errors.length; j++) { </span><span class="cx"> \
ValidationError e = errors[j]; </span><del>- \
logger.error(e.getPrefix() + " ... " + e.getBean().getEjbName() + \
":\t" + e.getMessage(2)); </del><ins>+ String \
ejbName = (e.getBean() != null)? e.getBean().getEjbName(): "null"; + \
logger.error(e.getPrefix() + " ... " + ejbName + ":\t" + \
e.getMessage(2)); </ins><span class="cx"> }
</span><span class="cx"> ValidationFailure[] failures = \
set.getFailures(); </span><span class="cx"> for (int j = 0; j \
< failures.length; j++) { </span></pre></div>
<a id="trunkopenejb3containeropenejbcoresrcmainjavaorgopenejbaltconfigEjbValidatorjava"></a>
<div class="modfile"><h4>Modified: \
trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/EjbValidator.java \
(2567 => 2568)</h4> <pre class="diff">
<span class="info">--- \
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) </span><span class="lines">@@ -11,6 +11,11 @@
</span><span class="cx"> import org.openejb.OpenEJBException;
</span><span class="cx"> import org.openejb.loader.SystemInstance;
</span><span class="cx"> import org.openejb.alt.config.ejb11.EjbJar;
</span><ins>+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;
</ins><span class="cx"> import org.openejb.alt.config.rules.CheckClasses;
</span><span class="cx"> import org.openejb.alt.config.rules.CheckMethods;
</span><span class="cx"> import org.openejb.util.JarUtils;
</span><span class="lines">@@ -20,7 +25,7 @@
</span><span class="cx"> public class EjbValidator {
</span><span class="cx"> private static final String helpBase = \
"META-INF/org.openejb.cli/"; </span><span class="cx">
</span><del>- protected static final Messages _messages = new \
Messages("org.openejb.util.resources"); </del><ins>+ protected static \
final Messages _messages = new Messages("org.openejb.alt.config.rules"); \
</ins><span class="cx"> </span><span class="cx"> int LEVEL = 2;
</span><span class="cx"> boolean PRINT_DETAILS = false;
</span><span class="lines">@@ -47,7 +52,7 @@
</span><span class="cx"> return ejbSets;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- public EjbSet validateJar(EjbJarUtils ejbJarUtils, ClassLoader \
classLoader) { </del><ins>+ public EjbSet validateJar(final EjbJarUtils \
ejbJarUtils, ClassLoader classLoader) { </ins><span class="cx"> EjbSet set = \
null; </span><span class="cx">
</span><span class="cx"> try {
</span><span class="lines">@@ -59,6 +64,70 @@
</span><span class="cx"> } catch (Throwable e) {
</span><span class="cx"> e.printStackTrace(System.out);
</span><span class="cx"> ValidationError err = new \
ValidationError("cannot.validate"); </span><ins>+ \
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];
+ }
+ });
</ins><span class="cx"> err.setDetails(e.getMessage());
</span><span class="cx"> set.addError(err);
</span><span class="cx"> }
</span></pre></div>
<a id="trunkopenejb3containeropenejbcoresrcmainjavaorgopenejbaltconfigValidationErrorjava"></a>
<div class="modfile"><h4>Modified: \
trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/ValidationError.java \
(2567 => 2568)</h4> <pre class="diff">
<span class="info">--- \
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) </span><span class="lines">@@ -2,6 +2,8 @@
</span><span class="cx">
</span><span class="cx"> public class ValidationError extends ValidationException {
</span><span class="cx">
</span><ins>+ private Throwable cause;
+
</ins><span class="cx"> public ValidationError(String message) {
</span><span class="cx"> super(message);
</span><span class="cx"> }
</span><span class="lines">@@ -14,4 +16,12 @@
</span><span class="cx"> return "errors";
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ public Throwable getCause() {
+ return cause;
+ }
+
+ public void setCause(Throwable cause) {
+ this.cause = cause;
+ }
+
</ins><span class="cx"> }
</span></pre></div>
<a id="trunkopenejb3containeropenejbcoresrcmainjavaorgopenejbaltconfigrulesCheckClassesjava"></a>
<div class="modfile"><h4>Modified: \
trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/rules/CheckClasses.java \
(2567 => 2568)</h4> <pre class="diff">
<span class="info">--- \
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) </span><span class="lines">@@ -9,6 +9,7 @@
</span><span class="cx">
</span><span class="cx"> import javax.ejb.EJBLocalHome;
</span><span class="cx"> import javax.ejb.EJBLocalObject;
</span><ins>+import java.lang.reflect.Method;
</ins><span class="cx">
</span><span class="cx"> public class CheckClasses implements ValidationRule {
</span><span class="cx">
</span><span class="lines">@@ -25,17 +26,22 @@
</span><span class="cx"> b = beans[i];
</span><span class="cx"> check_hasEjbClass(b);
</span><span class="cx"> check_isEjbClass(b);
</span><ins>+ check_hasDependentClasses(b, b.getEjbClass(), \
"<ejb-class>"); </ins><span class="cx"> if \
(b.getHome() != null) { </span><span class="cx"> \
check_hasHomeClass(b); </span><span class="cx"> \
check_hasRemoteClass(b); </span><span class="cx"> \
check_isHomeInterface(b); </span><span class="cx"> \
check_isRemoteInterface(b); </span><ins>+ \
check_hasDependentClasses(b, b.getHome(), "<home>"); + \
check_hasDependentClasses(b, b.getRemote(), "<remote>"); </ins><span \
class="cx"> } </span><span class="cx"> if \
(b.getLocalHome() != null) { </span><span class="cx"> \
check_hasLocalHomeClass(b); </span><span class="cx"> \
check_hasLocalClass(b); </span><span class="cx"> \
check_isLocalHomeInterface(b); </span><span class="cx"> \
check_isLocalInterface(b); </span><ins>+ \
check_hasDependentClasses(b, b.getLocalHome(), "<local-home>"); + \
check_hasDependentClasses(b, b.getLocal(), "<local>"); </ins><span \
class="cx"> } </span><span class="cx"> }
</span><span class="cx"> } catch (RuntimeException e) {
</span><span class="lines">@@ -43,6 +49,45 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ 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);
+ }
+ }
+
</ins><span class="cx"> private void check_hasLocalClass(Bean b) {
</span><span class="cx"> lookForClass(b, b.getLocal(), \
"<local>"); </span><span class="cx"> }
</span><span class="lines">@@ -162,6 +207,5 @@
</span><span class="cx"> throw new \
OpenEJBException(SafeToolkit.messages.format("cl0007", clazz, \
set.getJarPath())); </span><span class="cx"> }
</span><span class="cx"> }
</span><del>-
</del><span class="cx"> }
</span><span class="cx">
</span></pre></div>
<a id="trunkopenejb3containeropenejbcoresrcmainjavaorgopenejbaltconfigrulesMessagesproperties"></a>
<div class="modfile"><h4>Modified: \
trunk/openejb3/container/openejb-core/src/main/java/org/openejb/alt/config/rules/Messages.properties \
(2567 => 2568)</h4> <pre class="diff">
<span class="info">--- \
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) </span><span class="lines">@@ -46,12 +46,11 @@
</span><span class="cx"> # Validation Rule messages
</span><span class="cx"> \
#-------------------------------------------------------------------- </span><span \
class="cx"> </span><del>-# 0 - Class name
-# 1 - Element (home, ejb-class, remote)
-# 2 - Bean name
</del><ins>+# 0 - Error Message
+# 1 - Stack Trace
</ins><span class="cx"> 1.cannot.validate Cannot validate jar
</span><del>-2.cannot.validate Cannot validate jar
-3.cannot.validate {0}
</del><ins>+2.cannot.validate Cannot validate jar: {0}
+3.cannot.validate Cannot validate jar: {0}
</ins><span class="cx">
</span><span class="cx"> # 0 - Class name
</span><span class="cx"> # 1 - Element (home, ejb-class, remote)
</span><span class="lines">@@ -116,3 +115,10 @@
</span><span class="cx"> 2.misslocated.class Misslocated class {0}
</span><span class="cx"> 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 </span><span class="cx"> \
</span><ins>+# 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 </ins></pre>
</div>
</div>
</body>
</html>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic