EjbClassImplementsComponentInterfacepublic class EjbClassImplementsComponentInterface extends com.sun.enterprise.tools.verifier.tests.ejb.EjbTest implements com.sun.enterprise.tools.verifier.tests.ejb.EjbCheckOptionally implements the enterprise Bean's remote interface test.
The class may, but is not required to, implement the enterprise Bean's
remote interface. It is recommended that the enterprise bean class
not implement the remote interface to prevent inadvertent passing of
this as a method argument or result.
Note: Display warning to user in this instance. |
Fields Summary |
---|
Result | result | ComponentNameConstructor | compName |
Methods Summary |
---|
public Result | check(EjbDescriptor descriptor)Optionally implements the enterprise Bean's remote interface test.
The class may, but is not required to, implement the enterprise Bean's
remote interface. It is recommended that the enterprise bean class
not implement the remote interface to prevent inadvertent passing of
this as a method argument or result.
Note: Display warning to user in this instance.
result = getInitializedResult();
compName = getVerifierContext().getComponentNameConstructor();
if (descriptor instanceof EjbEntityDescriptor) {
if(descriptor.getRemoteClassName() != null && !"".equals(descriptor.getRemoteClassName()))
commonToBothInterfaces(descriptor.getRemoteClassName(),(EjbEntityDescriptor)descriptor);
if(descriptor.getLocalClassName() != null && !"".equals(descriptor.getLocalClassName()))
commonToBothInterfaces(descriptor.getLocalClassName(),(EjbEntityDescriptor)descriptor);
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 void | commonToBothInterfaces(java.lang.String component, EjbDescriptor descriptor)
try {
Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
Class rc = Class.forName(component, false, getVerifierContext().getClassLoader());
boolean foundOne = false;
// walk up the class tree
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(rc.getName()) &&
descriptor instanceof EjbEntityDescriptor) {
// display warning to user
result.addWarningDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.warning(smh.getLocalString
(getClass().getName() + ".warning",
"Warning: [ {0} ] class implments the enterprise Bean's remote interface [ {1} ]. It is recommended that the enterprise bean class not implement the remote interface to prevent inadvertent passing of this as a method argument or result. The class must provide no-op implementations of the methods defined in the javax.ejb.EJBObject interface.",
new Object[] {descriptor.getEjbClassName(),rc.getName()}));
foundOne = true;
break;
}
}
} while ((c=c.getSuperclass()) != null);
if (!foundOne) {
// does not implement Bean's remote interface, test n/a
result.addNaDetails(smh.getLocalString
("tests.componentNameConstructor",
"For [ {0} ]",
new Object[] {compName.toString()}));
result.notApplicable(smh.getLocalString
(getClass().getName() + ".notApplicable2",
"[ {0} ] does not optionally implement bean class remote interface [ {1} ]",
new Object[] {descriptor.getEjbClassName(),rc.getName()}));
} else {
// if the class implements the enterprise Bean's remote interface,
// the class must provide no-op implementations of the methods
// defined in the javax.ejb.EJBObject interface.
// i can check all methods defined within javax.ejb.EJBObject
// interface, but i can't tell whether they are no-ops
// do nothing
}
} 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()}));
}
|
|