Author: rmannibucau
Date: Tue Aug 14 13:23:47 2012
New Revision: 1372873

URL: http://svn.apache.org/viewvc?rev=1372873&view=rev
Log:
better handling of swallowed myfaces messages + handling resourceId starting 
with java: (regression from service provider refactoring) + adding a message 
when an ejb deployment fails because of too many implemented interfaces

Added:
    
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckTowManyInterfaceTest.java
      - copied, changed from r1372847, 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckUserTransactionRefsTest.java
Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java
    
openejb/trunk/openejb/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java
    
openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1372873&r1=1372872&r2=1372873&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
 Tue Aug 14 13:23:47 2012
@@ -2972,8 +2972,7 @@ public class AnnotationDeployer implemen
 
                     } else {
                         // Multiple interfaces?  Illegal
-                        // TODO -- create message
-                        validation.fail(ejbName, "TODO");
+                        validation.fail(ejbName, "too.many.interfaces", 
ejbName, interfaces.toString().replace("interface ", ""));
                         return;
                     }
                 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=1372873&r1=1372872&r2=1372873&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
 Tue Aug 14 13:23:47 2012
@@ -1652,6 +1652,13 @@ public class AutoConfig implements Dynam
             return resourceId;
         }
 
+        if (resourceId.startsWith("java:")) { // can be an absolute path
+            final String jndi = resourceId.substring("java:".length());
+            if (hasServiceProvider(jndi)) {
+                return jndi;
+            }
+        }
+
         resourceId = toShortName(resourceId);
         if (hasServiceProvider(resourceId)) {
             return resourceId;

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java?rev=1372873&r1=1372872&r2=1372873&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java
 Tue Aug 14 13:23:47 2012
@@ -97,6 +97,8 @@ public class ServiceUtils {
             }
         } catch (OpenEJBException ignored) {
             // someone else will load the file and get the exception
+        } catch (IllegalStateException ise) {
+            // can happen if nothing is found, same
         }
         return false;
     }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties?rev=1372873&r1=1372872&r2=1372873&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
 Tue Aug 14 13:23:47 2012
@@ -911,3 +911,7 @@ public interface {0} extends {2}'{}'
 1.no.rest.resource.method = No public method in REST class [{0}]
 2.no.rest.resource.method = No public method in REST class [{0}]. You should 
probably ensure your service gets at least one public method.
 3.no.rest.resource.method = No public method in REST class [{0}]. To make your 
service available ensure it contains at least one public method.
+
+1.too.many.interfaces = Ejb [{0}] implements too many interfaces: {1}
+2.too.many.interfaces = Ejb [{0}] implements too many interfaces: {1}. Use 
@Local(<interface>) or keep a single interface.
+3.too.many.interfaces = Ejb [{0}] implements too many interfaces: {1}. Use 
@Local(<interface>) or keep a single interface.

Copied: 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckTowManyInterfaceTest.java
 (from r1372847, 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckUserTransactionRefsTest.java)
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckTowManyInterfaceTest.java?p2=openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckTowManyInterfaceTest.java&p1=openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckUserTransactionRefsTest.java&r1=1372847&r2=1372873&rev=1372873&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckUserTransactionRefsTest.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckTowManyInterfaceTest.java
 Tue Aug 14 13:23:47 2012
@@ -16,41 +16,34 @@
  */
 package org.apache.openejb.config.rules;
 
-import java.util.concurrent.Callable;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.StatelessBean;
+import org.junit.runner.RunWith;
 
 import javax.annotation.Resource;
 import javax.ejb.Stateless;
 import javax.ejb.TransactionManagement;
 import javax.ejb.TransactionManagementType;
 import javax.transaction.UserTransaction;
-
-import org.apache.openejb.jee.EjbJar;
-import org.apache.openejb.jee.StatelessBean;
-import org.junit.runner.RunWith;
+import java.util.concurrent.Callable;
 
 /**
  * @version $Rev$ $Date$
  */
 @RunWith(ValidationRunner.class)
-public class CheckUserTransactionRefsTest  {
+public class CheckTowManyInterfaceTest {
 
-    @Keys(@Key("userTransactionRef.forbiddenForCmtdBeans"))
+    @Keys( @Key("too.many.interfaces") )
     public EjbJar testSLSBwithUserTransaction() throws Exception {
         EjbJar ejbJar = new EjbJar();
-        ejbJar.addEnterpriseBean(new StatelessBean(TestBean.class));
+        ejbJar.addEnterpriseBean(new StatelessBean(TwoManyInterface.class));
         return ejbJar;
     }
 
     @Stateless
-    @TransactionManagement(TransactionManagementType.CONTAINER)
-    public static class TestBean implements Callable {
-
-        @Resource
-        private UserTransaction userTransaction;
-
-        public Object call() throws Exception {
-            return null;
-        }
+    public static class TwoManyInterface implements Callable, Runnable {
+        public Object call() throws Exception { return null; }
+        @Override public void run() {}
     }
 
 }

Modified: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java?rev=1372873&r1=1372872&r2=1372873&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java
 Tue Aug 14 13:23:47 2012
@@ -18,6 +18,7 @@ package org.apache.tomee.catalina;
 
 import org.apache.openejb.OpenEJB;
 import org.apache.openejb.classloader.WebAppEnricher;
+import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.JarLocation;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.LogCategory;
@@ -159,8 +160,6 @@ public final class TomEEClassLoaderEnric
 
     /**
      * Validation part
-     * Keep it up to date with URLClassLoaderFirst in openejb-core
-     * (here we use class, in the other one packages)
      */
     private static final String[] FORBIDDEN_CLASSES = new String[]{
             "javax.persistence.Entity", // JPA
@@ -183,12 +182,27 @@ public final class TomEEClassLoaderEnric
         try {
             jarFile = new JarFile(file);
             for (String name : FORBIDDEN_CLASSES) {
-                try { // if we can't load if from our classloader we'll not 
impose anything on this class
-                    parent.loadClass(name);
-                } catch (Exception e) {
+                // if we can't load if from our classLoader we'll not impose 
anything on this class
+                boolean found = false;
+                for (int i = 0; i < 2; i++) {
+                    try {
+                        try {
+                            parent.loadClass(name);
+                            found = true;
+                            break;
+                        } catch (Exception e) {
+                            // found = false
+                        }
+                    } catch (LinkageError le) { // would be a pain to fail here
+                        // retry
+                    }
+                }
+
+                if (!found) {
                     continue;
                 }
 
+                // we found it so let's check it is or not in the file 
(potential conflict)
                 final String entry = name.replace('.', '/') + ".class";
                 final JarEntry jarEntry = jarFile.getJarEntry(entry);
                 if (jarEntry != null) {
@@ -199,7 +213,7 @@ public final class TomEEClassLoaderEnric
             }
             return true;
         } finally {
-            if (jarFile != null) {
+            if (jarFile != null) { // in java 6 JarFile is not Closeable so 
don't use IO.close()
                 try {
                     jarFile.close();
                 } catch (IOException ioe) {

Modified: 
openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java?rev=1372873&r1=1372872&r2=1372873&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java
 Tue Aug 14 13:23:47 2012
@@ -60,6 +60,14 @@ public class TomEEMyFacesContainerInitia
                 || 
"true".equals(SystemInstance.get().getProperty(OPENEJB_JSF_SKIP, "false"))) {
             return;
         }
+
+        // some message filtering, not a perf killer since this class don't 
log a lot
+        final Logger abstractInitializerLogger = 
Logger.getLogger(AbstractFacesInitializer.class.getName());
+        abstractInitializerLogger.setFilter(new RemoveLogMessage(
+                new RemoveLogMessage(abstractInitializerLogger.getFilter(),
+                        Level.WARNING, "No mappings of FacesServlet found. 
Abort initializing MyFaces."),
+                Level.WARNING, "No mappings of FacesServlet found. Abort 
destroy MyFaces."));
+
         if ((classes != null && !classes.isEmpty()) || 
isFacesConfigPresent(ctx)) {
             // we found a faces-config.xml or some classes so let's delegate 
to myfaces
 
@@ -86,13 +94,6 @@ public class TomEEMyFacesContainerInitia
                 }
             }
 
-            // some message filtering, not a perf killer since this class 
don't log a lot
-            final Logger abstractInitializerLogger = 
Logger.getLogger(AbstractFacesInitializer.class.getName());
-            abstractInitializerLogger.setFilter(new RemoveLogMessage(
-                    new RemoveLogMessage(abstractInitializerLogger.getFilter(),
-                            Level.WARNING, "No mappings of FacesServlet found. 
Abort initializing MyFaces."),
-                            Level.WARNING, "No mappings of FacesServlet found. 
Abort destroy MyFaces."));
-
             // finally delegating begin sure we'll not call 
isFacesConfigPresent
             delegate.onStartup(classes, ctx);
         }


Reply via email to