Bean Type Test.
The bean provider must use the appropriate session or entity element
to declare the bean type.
Result result = getInitializedResult();
ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
if ((descriptor instanceof EjbSessionDescriptor) ||
(descriptor instanceof EjbEntityDescriptor)) {
try {
Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
boolean validBean = false;
// walk up the class tree (bug #4243606)
do {
Class[] interfaces = c.getInterfaces();
for (int i = 0; i < interfaces.length; i++) {
logger.log(Level.FINE, getClass().getName() + ".debug1",
new Object[] {interfaces[i].getName()});
if (interfaces[i].getName().equals("javax.ejb.EntityBean") &&
(descriptor instanceof EjbEntityDescriptor)) {
validBean = true;
result.addGoodDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.passed(smh.getLocalString
(getClass().getName() + ".passed",
"[ {0} ] properly implements the {1}Bean interface.",
new Object[] {descriptor.getEjbClassName(),"Entity"}));
break;
} else if (interfaces[i].getName().equals("javax.ejb.SessionBean") &&
descriptor instanceof EjbSessionDescriptor) {
validBean = true;
result.addGoodDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.passed(smh.getLocalString
(getClass().getName() + ".passed",
"[ {0} ] properly implements the {1}Bean interface.",
new Object[] {descriptor.getEjbClassName(),"Session"}));
break;
}
}
} while ((((c=c.getSuperclass()) != null) && (!validBean)));
if (!validBean){
result.addErrorDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.failed(smh.getLocalString
(getClass().getName() + ".failed",
"Error: [ {0} ] is not a valid bean. The bean provider must use the appropriate {1} or {2} element to declare the bean type.",
new Object[] {descriptor.getEjbClassName(),"session","entity"}));
}
} 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()}));
}
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 with a Session or Entity Bean.",
new Object[] {getClass()}));
return result;
}