Search in sources :

Example 1 with ApplicationExceptionDetails

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;
}
Also used : ApplicationExceptionDetails(org.jboss.as.ejb3.tx.ApplicationExceptionDetails)

Example 2 with ApplicationExceptionDetails

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);
}
Also used : ApplicationExceptions(org.jboss.as.ejb3.deployment.ApplicationExceptions) ApplicationExceptionDetails(org.jboss.as.ejb3.tx.ApplicationExceptionDetails) EjbJarMetaData(org.jboss.metadata.ejb.spec.EjbJarMetaData) ApplicationExceptionDescriptions(org.jboss.as.ejb3.deployment.ApplicationExceptionDescriptions) ApplicationExceptionsMetaData(org.jboss.metadata.ejb.spec.ApplicationExceptionsMetaData) AssemblyDescriptorMetaData(org.jboss.metadata.ejb.spec.AssemblyDescriptorMetaData) ApplicationExceptionMetaData(org.jboss.metadata.ejb.spec.ApplicationExceptionMetaData) Module(org.jboss.modules.Module) DeploymentUnit(org.jboss.as.server.deployment.DeploymentUnit) Map(java.util.Map)

Example 3 with ApplicationExceptionDetails

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);
}
Also used : ApplicationExceptionDetails(org.jboss.as.ejb3.tx.ApplicationExceptionDetails)

Aggregations

ApplicationExceptionDetails (org.jboss.as.ejb3.tx.ApplicationExceptionDetails)3 Map (java.util.Map)1 ApplicationExceptionDescriptions (org.jboss.as.ejb3.deployment.ApplicationExceptionDescriptions)1 ApplicationExceptions (org.jboss.as.ejb3.deployment.ApplicationExceptions)1 DeploymentUnit (org.jboss.as.server.deployment.DeploymentUnit)1 ApplicationExceptionMetaData (org.jboss.metadata.ejb.spec.ApplicationExceptionMetaData)1 ApplicationExceptionsMetaData (org.jboss.metadata.ejb.spec.ApplicationExceptionsMetaData)1 AssemblyDescriptorMetaData (org.jboss.metadata.ejb.spec.AssemblyDescriptorMetaData)1 EjbJarMetaData (org.jboss.metadata.ejb.spec.EjbJarMetaData)1 Module (org.jboss.modules.Module)1