HomeInterfaceFindMethodReturnpublic class HomeInterfaceFindMethodReturn extends com.sun.enterprise.tools.verifier.tests.ejb.EjbTest implements com.sun.enterprise.tools.verifier.tests.ejb.EjbCheckEntity beans home interface find method return type test.
The following are the requirements for the signatures of the finder methods
defined in Bean's home interface:
An Entity Bean's home interface defines one or more find(...)
methods.
The return type for a find(...) method must be the enterprise
Bean's remote interface type or a collection thereof. |
Fields Summary |
---|
Result | result | ComponentNameConstructor | compName |
Methods Summary |
---|
public Result | check(com.sun.enterprise.deployment.EjbDescriptor descriptor)Entity beans home interface find method return type test.
The following are the requirements for the signatures of the finder methods
defined in Bean's home interface:
An Entity Bean's home interface defines one or more find(...)
methods.
The return type for a find(...) method must be the enterprise
Bean's remote interface type or a collection thereof.
result = getInitializedResult();
compName = getVerifierContext().getComponentNameConstructor();
if (descriptor instanceof EjbEntityDescriptor) {
String persistence =
((EjbEntityDescriptor)descriptor).getPersistenceType();
if (EjbEntityDescriptor.BEAN_PERSISTENCE.equals(persistence)) {
boolean oneFailed = false;
// RULE: Entity home interface are allowed to have find<METHOD>
// methods which returns the entity Bean's remote interface
// or a collection thereof.
if(descriptor.getRemoteClassName() != null && !"".equals(descriptor.getRemoteClassName()) &&
descriptor.getHomeClassName() != null && !"".equals(descriptor.getHomeClassName())) {
oneFailed = commonToBothInterfaces(descriptor.getHomeClassName(),descriptor.getRemoteClassName(),descriptor);
}
if(oneFailed == false) {
if(descriptor.getLocalClassName() != null && !"".equals(descriptor.getLocalClassName()) &&
descriptor.getLocalHomeClassName() != null && !"".equals(descriptor.getLocalHomeClassName())) {
oneFailed = commonToBothInterfaces(descriptor.getLocalHomeClassName(),descriptor.getLocalClassName(),descriptor);
}
}
if (oneFailed) {
result.setStatus(result.FAILED);
} else {
result.setStatus(result.PASSED);
}
return result;
} else { //if (CONTAINER_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.BEAN_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;
}
| private boolean | commonToBothInterfaces(java.lang.String home, java.lang.String remote, com.sun.enterprise.deployment.EjbDescriptor descriptor)This method is responsible for the logic of the test. It is called for both local and remote interfaces.
boolean oneFailed = false;
try {
Context context = getVerifierContext();
ClassLoader jcl = context.getClassLoader();
Class c = Class.forName(home, false, getVerifierContext().getClassLoader());
Class rc = Class.forName(remote, false, getVerifierContext().getClassLoader());
Method methods[] = c.getDeclaredMethods();
Class methodReturnType;
boolean validReturn = false;
for (int i=0; i< methods.length; i++) {
// clear these from last time thru loop
validReturn = false;
if (methods[i].getName().startsWith("find")) {
// return type must be the remote interface
// or collection thereof
methodReturnType = methods[i].getReturnType();
if ((methodReturnType.getName().equals(rc.getName())) ||
(methodReturnType.getName().equals("java.util.Collection")) ||
(methodReturnType.getName().equals("java.util.Enumeration"))) {
// this is the right return type for find method
validReturn = true;
} else {
validReturn = false;
} // return valid
//report for this particular find method found in home interface
// now display the appropriate results for this particular find
// method
if (validReturn) {
result.addGoodDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addGoodDetails(smh.getLocalString
(getClass().getName() + ".debug1",
"For Home Interface [ {0} ] Method [ {1} ]",
new Object[] {c.getName(),methods[i].getName()}));
result.addGoodDetails(smh.getLocalString
(getClass().getName() + ".passed",
"The find<METHOD> which returns remote interface or a collection there of was found."));
} else if (!validReturn) {
oneFailed = true;
result.addErrorDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.addErrorDetails(smh.getLocalString
(getClass().getName() + ".debug1",
"For Home Interface [ {0} ] Method [ {1} ]",
new Object[] {c.getName(),methods[i].getName()}));
result.addErrorDetails(smh.getLocalString
(getClass().getName() + ".failed",
"Error: A find<METHOD> was found, but the return type [ {0} ] was not the Remote interface [ {1} ] or a collection there of." ,
new Object[] {methodReturnType.getName(),rc.getName()}));
} // end of reporting for this particular 'find' method
} // if the home interface found a "find" method
} // for all the methods within the home interface class, loop
return oneFailed;
} 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: Home interface [ {0} ] or Remote interface [ {1} ] does not exist or is not loadable within bean [ {2} ]",
new Object[] {home,remote, descriptor.getName()}));
return oneFailed;
}
|
|