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);
}