use of org.jboss.as.ejb3.tx.ApplicationExceptionDetails in project wildfly by wildfly.
the class EJBComponent method getApplicationException.
public ApplicationExceptionDetails getApplicationException(Class<?> exceptionClass, Method invokedMethod) {
ApplicationExceptionDetails applicationException = this.applicationExceptions.get(exceptionClass);
if (applicationException != null) {
return applicationException;
}
// Check if the super class of the passed exception class, is an application exception.
Class<?> superClass = exceptionClass.getSuperclass();
while (superClass != null && !(superClass.equals(Exception.class) || superClass.equals(Object.class))) {
applicationException = this.applicationExceptions.get(superClass);
// is set to true.
if (applicationException != null) {
if (applicationException.isInherited()) {
return applicationException;
}
// not an application exception, so return null
return null;
}
// move to next super class
superClass = superClass.getSuperclass();
}
// (see EJB 3.1 FR 14.2.1)
if (RuntimeException.class.isAssignableFrom(exceptionClass) || Error.class.isAssignableFrom(exceptionClass))
return null;
if (invokedMethod != null) {
final Class<?>[] exceptionTypes = invokedMethod.getExceptionTypes();
for (Class<?> type : exceptionTypes) {
if (type.isAssignableFrom(exceptionClass))
return APPLICATION_EXCEPTION;
}
}
// not an application exception, so return null.
return null;
}
use of org.jboss.as.ejb3.tx.ApplicationExceptionDetails in project wildfly by wildfly.
the class ApplicationExceptionMergingProcessor method deploy.
@Override
public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
if (!EjbDeploymentMarker.isEjbDeployment(deploymentUnit)) {
return;
}
final List<DeploymentUnit> accessibleSubDeployments = deploymentUnit.getAttachment(Attachments.ACCESSIBLE_SUB_DEPLOYMENTS);
final Module module = deploymentUnit.getAttachment(Attachments.MODULE);
final ApplicationExceptions applicationExceptions = new ApplicationExceptions();
for (DeploymentUnit unit : accessibleSubDeployments) {
//we want to get the details for classes from all sub deployments we have access to
final ApplicationExceptionDescriptions exceptionDescriptions = unit.getAttachment(EjbDeploymentAttachmentKeys.APPLICATION_EXCEPTION_DESCRIPTIONS);
if (exceptionDescriptions != null) {
for (Map.Entry<String, org.jboss.as.ejb3.tx.ApplicationExceptionDetails> exception : exceptionDescriptions.getApplicationExceptions().entrySet()) {
try {
final Class<?> index = ClassLoadingUtils.loadClass(exception.getKey(), module);
applicationExceptions.addApplicationException(index, exception.getValue());
} catch (ClassNotFoundException e) {
ROOT_LOGGER.debug("Could not load application exception class", e);
}
}
}
}
//now add the exceptions from the assembly descriptor
EjbJarMetaData ejbJarMetaData = deploymentUnit.getAttachment(EjbDeploymentAttachmentKeys.EJB_JAR_METADATA);
if (ejbJarMetaData != null) {
// process assembly-descriptor stuff
AssemblyDescriptorMetaData assemblyDescriptor = ejbJarMetaData.getAssemblyDescriptor();
if (assemblyDescriptor != null) {
// process application-exception(s)
ApplicationExceptionsMetaData ddAppExceptions = assemblyDescriptor.getApplicationExceptions();
if (ddAppExceptions != null && !ddAppExceptions.isEmpty()) {
for (ApplicationExceptionMetaData applicationException : ddAppExceptions) {
String exceptionClassName = applicationException.getExceptionClass();
try {
final Class<?> index = ClassLoadingUtils.loadClass(exceptionClassName, module);
boolean rollback = applicationException.isRollback();
// by default inherited is true
boolean inherited = applicationException.isInherited() == null ? true : applicationException.isInherited();
// add the application exception to the ejb jar description
applicationExceptions.addApplicationException(index, new ApplicationExceptionDetails(exceptionClassName, inherited, rollback));
} catch (ClassNotFoundException e) {
throw EjbLogger.ROOT_LOGGER.failToLoadAppExceptionClassInEjbJarXml(exceptionClassName, e);
}
}
}
}
}
deploymentUnit.putAttachment(EjbDeploymentAttachmentKeys.APPLICATION_EXCEPTION_DETAILS, applicationExceptions);
}
use of org.jboss.as.ejb3.tx.ApplicationExceptionDetails in project wildfly by wildfly.
the class ApplicationExceptionDescriptions method addApplicationException.
public void addApplicationException(final String exceptionClassName, final boolean rollback, final boolean inherited) {
if (exceptionClassName == null || exceptionClassName.isEmpty()) {
throw EjbLogger.ROOT_LOGGER.stringParamCannotBeNullOrEmpty("Exception class name");
}
//TODO: Is this a good idea? ApplicationException's equals/hashCode
//will not work the way that would be expected
ApplicationExceptionDetails appException = new ApplicationExceptionDetails(exceptionClassName, inherited, rollback);
// add it to the map
this.applicationExceptions.put(exceptionClassName, appException);
}
Aggregations