Entity Bean's with container managed persistence ejbCreate(...) and
ejbPostCrete(...) methods must be defined to return the primary key class
type. The implementation of the ejbCreate(...) methods should be coded to
return a null. The returned value is ignored by the Container.
The method signatures must follow these rules:
The return type must be defined to return the primary key class type.
Result result = getInitializedResult();
ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
if (descriptor instanceof EjbEntityDescriptor) {
String persistence =
((EjbEntityDescriptor)descriptor).getPersistenceType();
if (EjbEntityDescriptor.CONTAINER_PERSISTENCE.equals(persistence)) {
boolean oneFailed = false;
int foundAtLeastOne = 0;
try {
Context context = getVerifierContext();
ClassLoader jcl = context.getClassLoader();
Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
Method [] methods1 = c.getDeclaredMethods();
int loopCounter = 0;
boolean ejbCreateFound = false;
boolean returnsPrimaryKeyClassType = false;
// start do while loop here....
do {
Method [] methods = c.getDeclaredMethods();
methods1 = null;
methods1 = methods;
for (int i = 0; i < methods.length; i++) {
// reset flags from last time thru loop
ejbCreateFound = false;
loopCounter++;
returnsPrimaryKeyClassType = false;
// The method name must be ejbCreate.
if (methods[i].getName().startsWith("ejbCreate")) {
foundAtLeastOne++;
ejbCreateFound = true;
// The return type must be be defined to
// return the primary key class type
Class rt = methods[i].getReturnType();
Class str = Class.forName(((EjbEntityDescriptor)descriptor).getPrimaryKeyClassName());
do {
if (rt.getName().equals(str.getName())) {
returnsPrimaryKeyClassType = true;
}
str = str.getSuperclass();
}while( str != null && returnsPrimaryKeyClassType != true ) ;
// now display the appropriate results for this particular ejbCreate
// method
if (ejbCreateFound && returnsPrimaryKeyClassType) {
result.addGoodDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addGoodDetails(smh.getLocalString
(getClass().getName() + ".debug1",
"For EJB Class [ {0} ] ejbCreate(...) Method [ {1} ]",
new Object[] {descriptor.getEjbClassName(),methods[i].getName()}));
result.addGoodDetails(smh.getLocalString
(getClass().getName() + ".passed",
"[ {0} ] properly returns the primary key class type.",
new Object[] {descriptor.getEjbClassName()}));
} else if (ejbCreateFound && !returnsPrimaryKeyClassType) {
oneFailed = true;
result.addErrorDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addErrorDetails(smh.getLocalString
(getClass().getName() + ".debug1",
"For EJB Class [ {0} ] ejbCreate(...) Method [ {1} ]",
new Object[] {descriptor.getEjbClassName(),methods1[loopCounter].getName()}));
result.addErrorDetails(smh.getLocalString
(getClass().getName() + ".failed",
"Error: An ejbCreate(...) method was found, but did not properly return the primary key class type."));
}
}
}
} while (((c = c.getSuperclass()) != null) && (!(ejbCreateFound && returnsPrimaryKeyClassType)));
if (foundAtLeastOne == 0) {
result.addNaDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.notApplicable(smh.getLocalString
(getClass().getName() + ".notApplicable1",
"[ {0} ] does not declare any ejbCreate(...) methods.",
new Object[] {descriptor.getEjbClassName()}));
}
} 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()}));
}
if (oneFailed) {
result.setStatus(result.FAILED);
} else if (foundAtLeastOne == 0) {
result.setStatus(result.NOT_APPLICABLE);
} else {
result.setStatus(result.PASSED);
}
return result;
} else { // if (BEAN_PERSISTENCE.equals(persistence)) {
result.addNaDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.notApplicable(smh.getLocalString
(getClass().getName() + ".notApplicable2",
"Expected [ {0} ] managed persistence, but [ {1} ] bean has [ {2} ] managed persistence.",
new Object[] {EjbEntityDescriptor.CONTAINER_PERSISTENCE,descriptor.getName(),persistence}));
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(),"Entity","Session"}));
return result;
}