Author: dblevins
Date: Thu Jun 26 22:17:42 2008
New Revision: 672114
URL: http://svn.apache.org/viewvc?rev=672114&view=rev
Log:
OPENEJB-835: @ApplicationException ignored when class exists in separate module
OPENEJB-833: @ApplicationException overriding via ejb-jar.xml broken
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationException.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/AssemblyDescriptor.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EnvEntry.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=672114&r1=672113&r2=672114&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
Thu Jun 26 22:17:42 2008
@@ -329,8 +329,7 @@
/* 19.2: ejb-name: Default is the unqualified name of the bean
class */
EjbJar ejbJar = ejbModule.getEjbJar();
- List<Class> classes = finder.findAnnotatedClasses(Stateless.class);
- for (Class<?> beanClass : classes) {
+ for (Class<?> beanClass :
finder.findAnnotatedClasses(Stateless.class)) {
Stateless stateless = beanClass.getAnnotation(Stateless.class);
String ejbName = getEjbName(stateless, beanClass);
@@ -350,8 +349,7 @@
}
}
- classes = finder.findAnnotatedClasses(Stateful.class);
- for (Class<?> beanClass : classes) {
+ for (Class<?> beanClass :
finder.findAnnotatedClasses(Stateful.class)) {
Stateful stateful = beanClass.getAnnotation(Stateful.class);
String ejbName = getEjbName(stateful, beanClass);
@@ -372,7 +370,7 @@
}
}
- classes = finder.findAnnotatedClasses(MessageDriven.class);
+ List<Class> classes =
finder.findAnnotatedClasses(MessageDriven.class);
for (Class<?> beanClass : classes) {
MessageDriven mdb =
beanClass.getAnnotation(MessageDriven.class);
String ejbName = getEjbName(mdb, beanClass);
@@ -389,16 +387,17 @@
}
}
- classes = finder.findAnnotatedClasses(ApplicationException.class);
- if (!classes.isEmpty()) {
- if (ejbJar.getAssemblyDescriptor() == null) {
- ejbJar.setAssemblyDescriptor(new AssemblyDescriptor());
- }
+ AssemblyDescriptor assemblyDescriptor =
ejbModule.getEjbJar().getAssemblyDescriptor();
+ if (assemblyDescriptor == null) {
+ assemblyDescriptor = new AssemblyDescriptor();
+
ejbModule.getEjbJar().setAssemblyDescriptor(assemblyDescriptor);
}
- for (Class<?> exceptionClass : classes) {
- ApplicationException annotation =
exceptionClass.getAnnotation(ApplicationException.class);
- org.apache.openejb.jee.ApplicationException exception = new
org.apache.openejb.jee.ApplicationException(exceptionClass.getName(),
annotation.rollback());
-
ejbJar.getAssemblyDescriptor().getApplicationException().add(exception);
+
+ for (Class<?> exceptionClass :
finder.findAnnotatedClasses(ApplicationException.class)) {
+ if (assemblyDescriptor.getApplicationException(exceptionClass)
!= null){
+ ApplicationException annotation =
exceptionClass.getAnnotation(ApplicationException.class);
+ assemblyDescriptor.addApplicationException(exceptionClass,
annotation.rollback());
+ }
}
return ejbModule;
@@ -675,10 +674,8 @@
}
AssemblyDescriptor assemblyDescriptor =
ejbModule.getEjbJar().getAssemblyDescriptor();
- if (assemblyDescriptor == null) {
- assemblyDescriptor = new AssemblyDescriptor();
-
ejbModule.getEjbJar().setAssemblyDescriptor(assemblyDescriptor);
- }
+
+ processApplicationExceptions(clazz, assemblyDescriptor);
if (bean.getTransactionType() == TransactionType.CONTAINER) {
processTransactionAttributes(clazz, ejbName,
assemblyDescriptor, inheritedClassFinder);
@@ -902,6 +899,8 @@
processCallbacks(interceptor, inheritedClassFinder);
+ processApplicationExceptions(clazz,
ejbModule.getEjbJar().getAssemblyDescriptor());
+
buildAnnotatedRefs(interceptor, inheritedClassFinder,
classLoader);
processWebServiceClientHandlers(interceptor, classLoader);
@@ -922,6 +921,17 @@
return ejbModule;
}
+ private void processApplicationExceptions(Class<?> clazz,
AssemblyDescriptor assemblyDescriptor) {
+ for (Method method : clazz.getMethods()) {
+ for (Class<?> exception : method.getExceptionTypes()) {
+ ApplicationException annotation =
exception.getAnnotation(ApplicationException.class);
+ if (annotation == null) continue;
+ if (assemblyDescriptor.getApplicationException(exception)
!= null) continue;
+ assemblyDescriptor.addApplicationException(exception,
annotation.rollback());
+ }
+ }
+ }
+
private void processSessionInterfaces(SessionBean sessionBean,
Class<?> beanClass, EjbModule ejbModule) {
ValidationContext validation = ejbModule.getValidation();
Modified:
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationException.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationException.java?rev=672114&r1=672113&r2=672114&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationException.java
(original)
+++
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationException.java
Thu Jun 26 22:17:42 2008
@@ -47,7 +47,7 @@
"exceptionClass",
"rollback"
})
-public class ApplicationException {
+public class ApplicationException implements Keyable<String> {
@XmlElement(name = "exception-class", required = true)
protected String exceptionClass;
@@ -65,6 +65,10 @@
this.rollback = rollback;
}
+ public ApplicationException(Class exceptionClass, boolean rollback) {
+ this(exceptionClass.getName(), rollback);
+ }
+
public String getExceptionClass() {
return exceptionClass;
}
@@ -89,4 +93,7 @@
this.id = value;
}
+ public String getKey() {
+ return exceptionClass;
+ }
}
Modified:
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/AssemblyDescriptor.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/AssemblyDescriptor.java?rev=672114&r1=672113&r2=672114&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/AssemblyDescriptor.java
(original)
+++
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/AssemblyDescriptor.java
Thu Jun 26 22:17:42 2008
@@ -30,6 +30,7 @@
import java.util.List;
import java.util.Map;
import java.util.LinkedHashMap;
+import java.util.Collection;
/**
@@ -76,7 +77,7 @@
@XmlElement(name = "exclude-list")
protected ExcludeList excludeList;
@XmlElement(name = "application-exception", required = true)
- protected List<ApplicationException> applicationException;
+ protected KeyedCollection<String, ApplicationException>
applicationException;
@XmlAttribute
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlID
@@ -133,7 +134,7 @@
getInterceptorBinding().add(binding);
return binding;
}
-
+
public List<MessageDestination> getMessageDestination() {
if (messageDestination == null) {
messageDestination = new ArrayList<MessageDestination>();
@@ -152,13 +153,29 @@
this.excludeList = value;
}
- public List<ApplicationException> getApplicationException() {
+ public Collection<ApplicationException> getApplicationException() {
if (applicationException == null) {
- applicationException = new ArrayList<ApplicationException>();
+ applicationException = new KeyedCollection<String,
ApplicationException>();
}
return this.applicationException;
}
+ public Map<String, ApplicationException> getApplicationExceptionMap() {
+ return ((KeyedCollection<String, ApplicationException>)
getApplicationException()).toMap();
+ }
+
+ public ApplicationException getApplicationException(String className) {
+ return this.getApplicationExceptionMap().get(className);
+ }
+
+ public ApplicationException getApplicationException(Class clazz) {
+ return getApplicationException(clazz.getName());
+ }
+
+ public void addApplicationException(Class clazz, boolean rollback) {
+ getApplicationException().add(new ApplicationException(clazz,
rollback));
+ }
+
public String getId() {
return id;
}
Modified:
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EnvEntry.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EnvEntry.java?rev=672114&r1=672113&r2=672114&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EnvEntry.java
(original)
+++
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EnvEntry.java
Thu Jun 26 22:17:42 2008
@@ -92,6 +92,10 @@
this.envEntryValue = envEntryValue;
}
+ public EnvEntry(String envEntryName, Class envEntryType, String
envEntryValue) {
+ this(envEntryName, envEntryType.getName(), envEntryValue);
+ }
+
@XmlTransient
public String getName() {
return getEnvEntryName();