use of org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor in project Payara by payara.
the class TransactionTypeNullForContainerTX method check.
/**
* Session Bean Transaction demarcation type test.
* For bean managed session beans, it doesn't make sense to have
* container transactions.
*
* @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();
if (descriptor instanceof EjbSessionDescriptor) {
String transactionType = descriptor.getTransactionType();
if (EjbDescriptor.BEAN_TRANSACTION_TYPE.equals(transactionType)) {
// and in the UI
try {
if (descriptor.getMethodContainerTransactions().size() > 0) {
// shouldn't have container transaction for bean managed session
// since container transaction is not null, it's defined, we fail
// test
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failed", "Error: Session Beans [ {0} ] with [ {1} ] managed \n" + "transaction demarcation should not have container \n" + "transactions defined.", new Object[] { descriptor.getName(), transactionType }));
} else {
// container transaction is null, not defined, which is correct
// shouldn't have container transaction for bean managed session
result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.passed(smh.getLocalString(getClass().getName() + ".passed", "This session bean [ {0} ] is [ {1} ] managed and correctly declares no container transactions.", new Object[] { descriptor.getName(), transactionType }));
}
return result;
} catch (NullPointerException e) {
// container transaction is null, not defined, which is correct
// shouldn't have container transaction for bean managed session
result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.passed(smh.getLocalString(getClass().getName() + ".passed", "This session bean [ {0} ] is [ {1} ] managed and correctly declares no container transactions.", new Object[] { descriptor.getName(), transactionType }));
return result;
}
} else {
// not bean/container managed, but is a session/entity bean
// (i.e it's CONTAINER_TRANSACTION_TYPE)
result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable1", "Session bean [ {0} ], expected [ {1} ] managed, but called with [ {2} ] managed.", new Object[] { descriptor.getName(), EjbDescriptor.BEAN_TRANSACTION_TYPE, EjbDescriptor.CONTAINER_TRANSACTION_TYPE }));
return result;
}
} else {
result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable", "[ {0} ] expected {1} \n bean, but called with {2} bean.", new Object[] { getClass(), "Session", "Entity" }));
return result;
}
}
use of org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor in project Payara by payara.
the class EjbCreateMethodException method check.
/**
* Session Bean's ejbCreate(...) methods exception test.
* Each session Bean class must define one or more ejbCreate(...) methods.
* The number and signatures of a session Bean's create methods are specific
* to each EJB class. The method signatures must follow these rules:
*
* The method name must be ejbCreate.
*
* Compatibility Note: EJB 1.0 allowed the ejbCreate method to throw the
* java.rmi.RemoteException to indicate a non-application exception. This
* practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise bean
* should throw the javax.ejb.EJBException or another RuntimeException to
* indicate non-application exceptions to the Container (see Section 12.2.2).
* Note: Treat as a warning to user in this instance.
*
* @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();
if (descriptor instanceof EjbSessionDescriptor) {
boolean oneFailed = false;
int foundWarning = 0;
try {
VerifierTestContext context = getVerifierContext();
ClassLoader jcl = context.getClassLoader();
Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
Class[] ejbCreateMethodParameterTypes;
int foundAtLeastOne = 0;
boolean ejbCreateFound = false;
boolean throwsRemoteException = false;
// start do while loop here....
do {
Method[] methods = c.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
// reset flags from last time thru loop
ejbCreateFound = false;
throwsRemoteException = false;
// The method name must be ejbCreate.
if (methods[i].getName().startsWith("ejbCreate")) {
foundAtLeastOne++;
ejbCreateFound = true;
// Compatibility Note: EJB 1.0 allowed the ejbCreate method to throw
// the java.rmi.RemoteException to indicate a non-application
// exception. This practice is deprecated in EJB 1.1---an EJB 1.1
// compliant enterprise bean should throw the javax.ejb.EJBException
// or another RuntimeException to indicate non-application
// exceptions to the Container (see Section 12.2.2).
// Note: Treat as a warning to user in this instance.
Class[] exceptions = methods[i].getExceptionTypes();
for (int z = 0; z < exceptions.length; ++z) {
if ((exceptions[z].getName().equals("java.rmi.RemoteException")) || (exceptions[z].getName().equals("RemoteException"))) {
throwsRemoteException = true;
break;
}
}
// method
if (ejbCreateFound && (!throwsRemoteException)) {
result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.addGoodDetails(smh.getLocalString(getClass().getName() + ".debug1", "For EJB Class [ {0} ] method [ {1} ]", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
result.addGoodDetails(smh.getLocalString(getClass().getName() + ".passed", " [ {0} ] properly declares [ {1} ] method which properly does not throw java.rmi.RemoteException.", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
} else if (ejbCreateFound && throwsRemoteException) {
result.addWarningDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.addWarningDetails(smh.getLocalString(getClass().getName() + ".debug1", "For EJB Class [ {0} ] method [ {1} ]", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
result.addWarningDetails(smh.getLocalString(getClass().getName() + ".warning", "Error: Compatibility Note:" + "\n An [ {0} ] method was found, but" + "\n EJB 1.0 allowed the ejbCreate method to throw the " + "\n java.rmi.RemoteException to indicate a non-application" + "\n exception. This practice is deprecated in EJB 1.1" + "\n ---an EJB 1.1 compliant enterprise bean should" + "\n throw the javax.ejb.EJBException or another " + "\n RuntimeException to indicate non-application exceptions" + "\n to the Container", new Object[] { methods[i].getName() }));
foundWarning++;
}
}
}
} while (((c = c.getSuperclass()) != null) && (foundAtLeastOne == 0));
if (foundAtLeastOne == 0) {
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failed", "Error: [ {0} ] does not properly declare at least one ejbCreate(...) method. [ {1} ] is not a valid bean.", new Object[] { descriptor.getEjbClassName(), descriptor.getEjbClassName() }));
oneFailed = true;
}
} catch (ClassNotFoundException e) {
Verifier.debug(e);
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failedException", "Error: [ {0} ] class not found.", new Object[] { descriptor.getEjbClassName() }));
oneFailed = true;
}
if (oneFailed) {
result.setStatus(result.FAILED);
} else if (foundWarning > 0) {
result.setStatus(result.WARNING);
} else {
result.setStatus(result.PASSED);
}
return result;
} else {
result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable", "[ {0} ] expected {1} bean, but called with {2} bean.", new Object[] { getClass(), "Session", "Entity" }));
return result;
}
}
use of org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor in project Payara by payara.
the class EjbCreateMethodName method check.
/**
* Session Bean's ejbCreate(...) methods name test.
* Each session Bean class must define one or more ejbCreate(...) methods.
* The number and signatures of a session Bean's create methods are specific
* to each EJB class. The method signatures must follow these rules:
*
* The method name must be ejbCreate.
*
* @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();
if (descriptor instanceof EjbSessionDescriptor) {
boolean oneFailed = false;
try {
VerifierTestContext context = getVerifierContext();
ClassLoader jcl = context.getClassLoader();
Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
int foundAtLeastOne = 0;
// start do while loop here....
do {
Method[] methods = c.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
// The method name must be ejbCreate.
if (methods[i].getName().startsWith("ejbCreate")) {
foundAtLeastOne++;
// now display the appropriate results for this particular ejbCreate
// method
result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.addGoodDetails(smh.getLocalString(getClass().getName() + ".debug1", "For EJB Class [ {0} ] method [ {1} ]", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
result.addGoodDetails(smh.getLocalString(getClass().getName() + ".passed", "[ {0} ] declares [ {1} ] method.", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
}
}
} while (((c = c.getSuperclass()) != null) && (foundAtLeastOne == 0));
if (foundAtLeastOne == 0) {
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failed", "Error: [ {0} ] does not properly declare at least one ejbCreate(...) method. [ {1} ] is not a valid bean.", new Object[] { descriptor.getEjbClassName(), descriptor.getEjbClassName() }));
oneFailed = true;
}
} catch (ClassNotFoundException e) {
Verifier.debug(e);
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failedException", "Error: [ {0} ] class not found.", new Object[] { descriptor.getEjbClassName() }));
oneFailed = true;
}
if (oneFailed) {
result.setStatus(result.FAILED);
} else {
result.setStatus(result.PASSED);
}
return result;
} else {
result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable", "[ {0} ] expected {1} bean, but called with {2} bean.", new Object[] { getClass(), "Session", "Entity" }));
return result;
}
}
use of org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor in project Payara by payara.
the class EjbCreateMethodReturn method check.
/**
* Session Bean's ejbCreate(...) methods return test.
* Each session Bean class must define one or more ejbCreate(...) methods.
* The number and signature of a session Bean's create methods are specific
* to each EJB class. The method signatures must follow these rules:
*
* The method name must be ejbCreate.
*
* The return type must be void.
*
* @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();
if (descriptor instanceof EjbSessionDescriptor) {
boolean oneFailed = false;
try {
VerifierTestContext context = getVerifierContext();
ClassLoader jcl = context.getClassLoader();
Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
Class[] ejbCreateMethodParameterTypes;
int foundAtLeastOne = 0;
boolean ejbCreateFound = false;
boolean returnsVoid = false;
// start do while loop here....
do {
Method[] methods = c.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
// reset flags from last time thru loop
ejbCreateFound = false;
returnsVoid = false;
// The method name must be ejbCreate.
if (methods[i].getName().startsWith("ejbCreate")) {
ejbCreateFound = true;
// The return type must be void.
Class rt = methods[i].getReturnType();
if (rt.getName().equals("void")) {
returnsVoid = true;
foundAtLeastOne++;
}
// method
if (ejbCreateFound && returnsVoid) {
result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.addGoodDetails(smh.getLocalString(getClass().getName() + ".debug1", "For EJB Class [ {0} ] method [ {1} ]", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
result.addGoodDetails(smh.getLocalString(getClass().getName() + ".passed", "[ {0} ] properly declares [ {1} ] method with valid 'void' return type.", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
} else if (ejbCreateFound && (!returnsVoid)) {
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.addErrorDetails(smh.getLocalString(getClass().getName() + ".debug1", "For EJB Class [ {0} ] method [ {1} ]", new Object[] { descriptor.getEjbClassName(), methods[i].getName() }));
result.addErrorDetails(smh.getLocalString(getClass().getName() + ".notApplicable2", "An [ {0} ] method was found, but [ {1} ] method has a non 'void' return type value. [ {2} ] methods return types must define return 'void' type for at least one ejbCreate method.", new Object[] { methods[i].getName(), methods[i].getName(), methods[i].getName() }));
oneFailed = true;
}
}
}
} while (((c = c.getSuperclass()) != null) && (foundAtLeastOne == 0));
if (foundAtLeastOne == 0) {
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failed", "Error: [ {0} ] does not properly declare at least one ejbCreate(...) method with valid 'void' return type. [ {1} ] is not a valid bean.", new Object[] { descriptor.getEjbClassName(), descriptor.getEjbClassName() }));
oneFailed = true;
}
} catch (ClassNotFoundException e) {
Verifier.debug(e);
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failedException", "Error: [ {0} ] class not found.", new Object[] { descriptor.getEjbClassName() }));
oneFailed = true;
}
if (oneFailed) {
result.setStatus(result.FAILED);
} else {
result.setStatus(result.PASSED);
}
return result;
} else {
result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable", "[ {0} ] expected {1} bean, but called with {2} bean.", new Object[] { getClass(), "Session", "Entity" }));
return result;
}
}
use of org.glassfish.ejb.deployment.descriptor.EjbSessionDescriptor in project Payara by payara.
the class HomeMethodTest 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 result = getInitializedResult();
ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
if (getHomeInterfaceName(descriptor) == null || "".equals(getHomeInterfaceName(descriptor))) {
addNaDetails(result, compName);
result.notApplicable(smh.getLocalString("com.sun.enterprise.tools.verifier.tests.ejb.localinterfaceonly.notapp", "Not Applicable because, EJB [ {0} ] has Local Interfaces only.", new Object[] { descriptor.getEjbClassName() }));
return result;
}
if (!(descriptor instanceof EjbSessionDescriptor) && !(descriptor instanceof EjbEntityDescriptor)) {
addNaDetails(result, compName);
result.notApplicable(smh.getLocalString("com.sun.enterprise.tools.verifier.tests.ejb.homeintf.HomeMethodTest.notApplicable1", "Test apply only to session or entity beans."));
return result;
}
boolean homeMethodFound = false;
try {
// retrieve the remote interface methods
ClassLoader jcl = getVerifierContext().getClassLoader();
Class homeInterfaceClass = Class.forName(getClassName(descriptor), false, jcl);
Vector<Method> v = new Vector<Method>();
while (homeInterfaceClass != null && !homeInterfaceClass.getName().equals(getSuperInterface()) && !homeInterfaceClass.getName().equals("java.lang.Object")) {
Method[] homeInterfaceMethods = homeInterfaceClass.getDeclaredMethods();
for (int i = 0; i < homeInterfaceMethods.length; i++) {
v.add(homeInterfaceMethods[i]);
}
homeInterfaceClass = homeInterfaceClass.getSuperclass();
}
Iterator iterator = v.iterator();
while (iterator.hasNext()) {
Method method = (Method) iterator.next();
String methodName = method.getName();
if (methodName.startsWith("create") || methodName.startsWith("find") || methodName.startsWith("remove"))
continue;
Method m = getMethod(javax.ejb.EJBHome.class, methodName, method.getParameterTypes());
if (m != null) {
// this is an EJBHome method...
continue;
}
homeMethodFound = true;
// if (!runIndividualHomeMethodTest( method,descriptor, result))
// oneFailed = true;
runIndividualHomeMethodTest(method, descriptor, result);
if (result.getStatus() == Result.FAILED)
break;
}
} catch (ClassNotFoundException e) {
Verifier.debug(e);
addErrorDetails(result, compName);
result.failed(smh.getLocalString("com.sun.enterprise.tools.verifier.tests.ejb.homeintf.HomeMethodTest.failedException", "Error: Home interface [ {0} ] does not exist or is not loadable within bean [ {1} ]", new Object[] { getClassName(descriptor), descriptor.getName() }));
}
if (!homeMethodFound) {
addNaDetails(result, compName);
result.notApplicable(smh.getLocalString("com.sun.enterprise.tools.verifier.tests.ejb.homeintf.HomeMethodTest.notApplicable2", "Home interface [ {0} ] does not define any home methods", new Object[] { getClassName(descriptor) }));
}
// }
return result;
}
Aggregations