Search in sources :

Example 16 with ContainerTransaction

use of org.glassfish.ejb.deployment.descriptor.ContainerTransaction in project Payara by payara.

the class TransactionDemarcationBeanManaged method check.

/**
 * Session/Entity Bean bean-managed transaction demarcation type test.
 * The Application Assembler must not define transaction attributes for an
 * enterprise bean with bean-managed transaction demarcation.
 *
 * @param descriptor the Enterprise Java Bean deployment descriptor
 *
 * @return <code>Result</code> the results for this assertion
 */
public Result check(EjbDescriptor descriptor) {
    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
    // <ejb-class>verifier.ejb.hello.BogusEJB...
    try {
        // enterprise bean with bean-managed transaction demarcation.
        if ((descriptor instanceof EjbSessionDescriptor) || (descriptor instanceof EjbEntityDescriptor)) {
            String transactionType = descriptor.getTransactionType();
            if (EjbDescriptor.BEAN_TRANSACTION_TYPE.equals(transactionType)) {
                ContainerTransaction containerTransaction = null;
                if (!descriptor.getMethodContainerTransactions().isEmpty()) {
                    for (Enumeration ee = descriptor.getMethodContainerTransactions().keys(); ee.hasMoreElements(); ) {
                        MethodDescriptor methodDescriptor = (MethodDescriptor) ee.nextElement();
                        containerTransaction = (ContainerTransaction) descriptor.getMethodContainerTransactions().get(methodDescriptor);
                        try {
                            String transactionAttribute = containerTransaction.getTransactionAttribute();
                            // don't need this check here
                            if (ContainerTransaction.NOT_SUPPORTED.equals(transactionAttribute) || ContainerTransaction.SUPPORTS.equals(transactionAttribute) || ContainerTransaction.REQUIRED.equals(transactionAttribute) || ContainerTransaction.REQUIRES_NEW.equals(transactionAttribute) || ContainerTransaction.MANDATORY.equals(transactionAttribute) || ContainerTransaction.NEVER.equals(transactionAttribute) || (!transactionAttribute.equals(""))) {
                                result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                                result.failed(smh.getLocalString(getClass().getName() + ".failed", "Error: TransactionAttribute [ {0} ] for method [ {1} ] is not valid.   The Application Assembler must not define transaction attributes for an enterprise bean [ {2} ] with bean-managed transaction demarcation.", new Object[] { transactionAttribute, methodDescriptor.getName(), descriptor.getName() }));
                            } else {
                                result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                                result.passed(smh.getLocalString(getClass().getName() + ".passed", "Valid: TransactionAttribute [ {0} ] for method [ {1} ] is not defined for an enterprise bean [ {2} ] with bean-managed transaction demarcation.", new Object[] { transactionAttribute, methodDescriptor.getName(), descriptor.getName() }));
                            }
                        } catch (NullPointerException e) {
                            result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                            result.passed(smh.getLocalString(getClass().getName() + ".passed1", "Valid: TransactionAttribute is null for method [ {0} ] in bean [ {1} ]", new Object[] { methodDescriptor.getName(), descriptor.getName() }));
                            return result;
                        }
                    }
                } else {
                    result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                    result.passed(smh.getLocalString(getClass().getName() + ".passed2", "Valid: There are no method permissions within this bean [ {0} ]", new Object[] { descriptor.getName() }));
                }
                return result;
            } else {
                // not container managed, but is a session/entity bean
                result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable2", "Bean [ {0} ] is not [ {1} ] managed, it is [ {2} ] managed.", new Object[] { descriptor.getName(), EjbDescriptor.BEAN_TRANSACTION_TYPE, transactionType }));
            }
            return result;
        } else {
            result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
            result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable", "[ {0} ] not called \n with a Session or Entity bean.", new Object[] { getClass() }));
            return result;
        }
    } catch (Throwable t) {
        result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
        result.failed(smh.getLocalString(getClass().getName() + ".failedException", "Error: [ {0} ] does not contain class [ {1} ] within bean [ {2} ]", new Object[] { descriptor.getName(), t.getMessage(), descriptor.getName() }));
        return result;
    }
}
Also used : EjbEntityDescriptor(org.glassfish.ejb.deployment.descriptor.EjbEntityDescriptor) Enumeration(java.util.Enumeration) ContainerTransaction(org.glassfish.ejb.deployment.descriptor.ContainerTransaction) EjbSessionDescriptor(org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor) MethodDescriptor(com.sun.enterprise.deployment.MethodDescriptor) ComponentNameConstructor(com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor) Result(com.sun.enterprise.tools.verifier.Result)

Example 17 with ContainerTransaction

use of org.glassfish.ejb.deployment.descriptor.ContainerTransaction in project Payara by payara.

the class ContainerTransactionMethodExists method check.

/**
 * @param descriptor the Enterprise Java Bean deployment descriptor
 * @return <code>Result</code> the results for this assertion
 */
public Result check(EjbDescriptor descriptor) {
    result = getInitializedResult();
    compName = getVerifierContext().getComponentNameConstructor();
    if ((descriptor instanceof EjbSessionDescriptor) || (descriptor instanceof EjbEntityDescriptor)) {
        Map<MethodDescriptor, ContainerTransaction> transactionalMethods = descriptor.getMethodContainerTransactions();
        if (transactionalMethods != null) {
            for (MethodDescriptor methodDescriptor : transactionalMethods.keySet()) checkMethodStyles(methodDescriptor, descriptor);
        }
    }
    if (result.getStatus() != Result.FAILED) {
        addGoodDetails(result, compName);
        result.passed(smh.getLocalString(getClass().getName() + ".passed", "Valid container transaction method(s) found."));
    }
    return result;
}
Also used : EjbEntityDescriptor(org.glassfish.ejb.deployment.descriptor.EjbEntityDescriptor) ContainerTransaction(org.glassfish.ejb.deployment.descriptor.ContainerTransaction) EjbSessionDescriptor(org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor) MethodDescriptor(com.sun.enterprise.deployment.MethodDescriptor)

Example 18 with ContainerTransaction

use of org.glassfish.ejb.deployment.descriptor.ContainerTransaction in project Payara by payara.

the class EJBContainerTransactionManager method findTxAttr.

/**
 * Calculate for the transaction attribute for a method.
 * This is only used during container initialization.  After that,
 * tx attributes can be looked up with variations of getTxAttr()
 */
int findTxAttr(MethodDescriptor md) {
    int txAttr = -1;
    if (container.isBeanManagedTran) {
        return Container.TX_BEAN_MANAGED;
    }
    ContainerTransaction ct = ejbDescriptor.getContainerTransactionFor(md);
    if (ct != null) {
        String attr = ct.getTransactionAttribute();
        if (attr.equals(ContainerTransaction.NOT_SUPPORTED))
            txAttr = Container.TX_NOT_SUPPORTED;
        else if (attr.equals(ContainerTransaction.SUPPORTS))
            txAttr = Container.TX_SUPPORTS;
        else if (attr.equals(ContainerTransaction.REQUIRED))
            txAttr = Container.TX_REQUIRED;
        else if (attr.equals(ContainerTransaction.REQUIRES_NEW))
            txAttr = Container.TX_REQUIRES_NEW;
        else if (attr.equals(ContainerTransaction.MANDATORY))
            txAttr = Container.TX_MANDATORY;
        else if (attr.equals(ContainerTransaction.NEVER))
            txAttr = Container.TX_NEVER;
    }
    if (txAttr == -1) {
        throw new EJBException("Transaction Attribute not found for method " + md.prettyPrint());
    }
    container.validateTxAttr(md, txAttr);
    return txAttr;
}
Also used : ContainerTransaction(org.glassfish.ejb.deployment.descriptor.ContainerTransaction) EJBException(javax.ejb.EJBException)

Aggregations

ContainerTransaction (org.glassfish.ejb.deployment.descriptor.ContainerTransaction)18 MethodDescriptor (com.sun.enterprise.deployment.MethodDescriptor)17 Enumeration (java.util.Enumeration)7 EjbSessionDescriptor (org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor)6 Result (com.sun.enterprise.tools.verifier.Result)5 ComponentNameConstructor (com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor)5 Method (java.lang.reflect.Method)5 Iterator (java.util.Iterator)4 EjbDescriptor (org.glassfish.ejb.deployment.descriptor.EjbDescriptor)4 VerifierTestContext (com.sun.enterprise.tools.verifier.VerifierTestContext)3 Set (java.util.Set)3 EjbEntityDescriptor (org.glassfish.ejb.deployment.descriptor.EjbEntityDescriptor)3 Collection (java.util.Collection)2 TransactionAttribute (javax.ejb.TransactionAttribute)2 EnvironmentProperty (com.sun.enterprise.deployment.EnvironmentProperty)1 LifecycleCallbackDescriptor (com.sun.enterprise.deployment.LifecycleCallbackDescriptor)1 MethodPermission (com.sun.enterprise.deployment.MethodPermission)1 ResourceEnvReferenceDescriptor (com.sun.enterprise.deployment.ResourceEnvReferenceDescriptor)1 ResourceReferenceDescriptor (com.sun.enterprise.deployment.ResourceReferenceDescriptor)1 RoleReference (com.sun.enterprise.deployment.RoleReference)1