The Bean Provider must declare all enterprise bean's references to the homes
of other enterprise beans as specified in section 14.3.2 of the Moscone spec.
Check for one within the same jar file, can't check outside of jar file.
Load/locate & check other bean's home/remote/bean, ensure they match with
what the linking bean says they should be; check for pair of referencing and
referenced beans exist.
Result result = getInitializedResult();
ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
if (descriptor instanceof ApplicationClientDescriptor) {
// RULE: References to other beans must be declared in the form of
// references to other beans homes as specified in section
// 14.3.2 of the Moscone spec.
// check for one bean within the same jar file; can't check outside of
// jar file. need to load/locate and check other beans remote, home, bean
// match with the linking bean says they should be. i.e. check for pair
// of referencing & referenced bean exist, using reflection API
EjbReferenceDescriptor ejbReference;
Set references = descriptor.getEjbReferenceDescriptors();
Iterator iterator = references.iterator();
if (iterator.hasNext()) {
boolean oneFailed = false;
while (iterator.hasNext()) {
ejbReference = (EjbReferenceDescriptor) iterator.next();
String homeClassName = ejbReference.getHomeClassName();
if(homeClassName == null) {
oneFailed = true;
result.addErrorDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.failed(smh.getLocalString
(getClass().getName() + ".failed1",
"Error: {0} class cannot be null.",
new Object[] {"home"}));
} else {
try {
Class.forName(homeClassName, false, getVerifierContext().getClassLoader());
} catch (ClassNotFoundException e) {
Verifier.debug(e);
oneFailed = true;
result.addErrorDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.failed(smh.getLocalString
(getClass().getName() + ".failed",
"Error: [ {0} ] class [ {1} ] cannot be found within this jar [ {2} ].",
new Object[] {ejbReference.getName(), homeClassName,
descriptor.getModuleDescriptor().getArchiveUri()}));
}
result.addGoodDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.passed(smh.getLocalString
(getClass().getName() + ".passed2",
"The referenced bean's home interface [ {0} ] exists and is loadable within [ {1} ].",
new Object[] {ejbReference.getHomeClassName(),
descriptor.getModuleDescriptor().getArchiveUri()}));
}
String remoteClassName = ejbReference.getEjbInterface();
if(remoteClassName == null) {
oneFailed = true;
result.addErrorDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.failed(smh.getLocalString
(getClass().getName() + ".failed1",
"Error: {0} class cannot be null.",
new Object[] {"remote"}));
} else {
try {
Class.forName(remoteClassName, false, getVerifierContext().getClassLoader());
} catch (ClassNotFoundException e) {
Verifier.debug(e);
oneFailed = true;
result.addErrorDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.failed(smh.getLocalString
(getClass().getName() + ".failed",
"Error: [ {0} ] class [ {1} ] cannot be found within this jar [ {2} ].",
new Object[] {ejbReference.getName(), remoteClassName,
descriptor.getModuleDescriptor().getArchiveUri()}));
}
result.addGoodDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.passed(smh.getLocalString
(getClass().getName() + ".passed3",
"The referenced bean's remote interface [ {0} ] exists and is loadable within [ {1} ].",
new Object[] {ejbReference.getEjbInterface(),
descriptor.getModuleDescriptor().getArchiveUri()}));
}
}
if (oneFailed) {
result.setStatus(result.FAILED);
} else {
result.setStatus(result.PASSED);
}
} else {
result.addNaDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.notApplicable(smh.getLocalString
(getClass().getName() + ".notApplicable1",
"There are no ejb references to other beans within this application client [ {0} ]",
new Object[] {descriptor.getName()}));
}
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 application client.",
new Object[] {getClass()}));
return result;
}