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