[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 = \
&quot;openejb.default.security.role&quot;; </span><del>-    protected static final \
Logger logger = Logger.getInstance(&quot;OpenEJB.startup&quot;, \
                &quot;org.openejb.util.resources&quot;);
-    protected static final Messages messages = new \
Messages(&quot;org.openejb.util.resources&quot;); </del><ins>+    protected static \
final Logger logger = Logger.getInstance(&quot;OpenEJB.startup&quot;, \
&quot;org.openejb.alt.config.rules&quot;); +    protected static final Messages \
messages = new Messages(&quot;org.openejb.alt.config.rules&quot;); </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 &lt; \
errors.length; j++) { </span><span class="cx">                         \
ValidationError e = errors[j]; </span><del>-                        \
logger.error(e.getPrefix() + &quot; ... &quot; + e.getBean().getEjbName() + \
&quot;:\t&quot; + e.getMessage(2)); </del><ins>+                        String \
ejbName = (e.getBean() != null)? e.getBean().getEjbName(): &quot;null&quot;; +        \
logger.error(e.getPrefix() + &quot; ... &quot; + ejbName + &quot;:\t&quot; + \
e.getMessage(2)); </ins><span class="cx">                     }
</span><span class="cx">                     ValidationFailure[] failures = \
set.getFailures(); </span><span class="cx">                     for (int j = 0; j \
&lt; 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 = \
&quot;META-INF/org.openejb.cli/&quot;; </span><span class="cx"> 
</span><del>-    protected static final Messages _messages = new \
Messages(&quot;org.openejb.util.resources&quot;); </del><ins>+    protected static \
final Messages _messages = new Messages(&quot;org.openejb.alt.config.rules&quot;); \
</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(&quot;cannot.validate&quot;); </span><ins>+            \
err.setCause(e); +            err.setBean(new Bean(){
+
+                public String getType() {
+                    return &quot;Ejb-jar&quot;;
+                }
+
+                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(&quot;.&quot;)){
+                            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 &quot;errors&quot;;
</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(), \
&quot;&lt;ejb-class&gt;&quot;); </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(), &quot;&lt;home&gt;&quot;); +                \
check_hasDependentClasses(b, b.getRemote(), &quot;&lt;remote&gt;&quot;); </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(), &quot;&lt;local-home&gt;&quot;); +     \
check_hasDependentClasses(b, b.getLocal(), &quot;&lt;local&gt;&quot;); </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(&quot;missing.dependent.class&quot;); +            \
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(&quot;missing.dependent.class&quot;); +            \
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(), \
&quot;&lt;local&gt;&quot;); </span><span class="cx">     }
</span><span class="lines">@@ -162,6 +207,5 @@
</span><span class="cx">             throw new \
OpenEJBException(SafeToolkit.messages.format(&quot;cl0007&quot;, 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