BusinessMethodMatchesWithDDpublic class BusinessMethodMatchesWithDD extends com.sun.enterprise.tools.verifier.tests.ejb.EjbTest implements EjbCheckEnterprise Bean's business(...) methods name test.
Each enterprise Bean class must define zero or more business(...) methods.
The method signatures must follow these rules:
The methods in the remote/local interface should be present in the deployment
descriptor |
Fields Summary |
---|
Result | result | ComponentNameConstructor | compName |
Methods Summary |
---|
public Result | check(EjbDescriptor descriptor)Enterprise Bean's business(...) methods name test.
Each enterprise Bean class must define zero or more business(...) methods.
The method signatures must follow these rules:
The methods in the remote/local interface should be present in the
deployment descriptor
result = getInitializedResult();
compName = getVerifierContext().getComponentNameConstructor();
if ((descriptor instanceof EjbSessionDescriptor) ||
(descriptor instanceof EjbEntityDescriptor)) {
if(descriptor.getRemoteClassName() != null &&
!"".equals(descriptor.getRemoteClassName()))
commonToBothInterfaces(descriptor.getRemoteClassName(),
descriptor,
MethodDescriptor.EJB_REMOTE);
if(descriptor.getLocalClassName() != null &&
!"".equals(descriptor.getLocalClassName()))
commonToBothInterfaces(descriptor.getLocalClassName(),
descriptor,
MethodDescriptor.EJB_LOCAL);
}
if(result.getStatus() != Result.FAILED) {
addGoodDetails(result, compName);
result.passed(smh.getLocalString
(getClass().getName() + ".passed",
"Business method(s) are valid."));
}
return result;
| private void | commonToBothInterfaces(java.lang.String intf, EjbDescriptor descriptor, java.lang.String methodIntf)This method is responsible for the logic of the test. It is called for
both local and remote interfaces.
try {
Class intfClass = Class.forName(intf, false, getVerifierContext().getClassLoader());
boolean found = false;
Set allMethods = new HashSet();
for (Iterator e =
descriptor.getPermissionedMethodsByPermission().values().iterator();e.hasNext();) {
Set methodDescriptors = (Set) e.next();
if (methodDescriptors != null)
allMethods.addAll(methodDescriptors);
}
for (Enumeration e =
descriptor.getMethodContainerTransactions().keys();e.hasMoreElements();) {
allMethods.add(e.nextElement());
}
for (Method remoteMethod : intfClass.getMethods()) {
found = false;
// we don't test the EJB methods
if (remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBObject"))
continue;
if (!remoteMethod.getName().startsWith("ejb") &&
!remoteMethod.getName().equals("class$") &&
!remoteMethod.getName().equals("setSessionContext")) {
Iterator methods = allMethods.iterator();
while (methods.hasNext()) {
MethodDescriptor methodDescriptor = (MethodDescriptor)methods.next();
if (methodDescriptor.getName().equals(remoteMethod.getName())) {
if (MethodUtils.stringArrayEquals(methodDescriptor.getParameterClassNames(),
(new MethodDescriptor(remoteMethod,methodIntf)).getParameterClassNames())) {
found = true;
break;
}
}
}
}
if (!found) {
addErrorDetails(result, compName);
result.failed(smh.getLocalString
(getClass().getName() + ".failed",
"Error: Business method [ {0} ] is not defined " +
"in the deployment descriptor.",
new Object[] {remoteMethod.getName()}));
}
}
} catch (Exception e) {
Verifier.debug(e);
addErrorDetails(result, compName);
result.failed(smh.getLocalString
(getClass().getName() + ".failedException",
"Error: Component interface [ {0} ] does not exist " +
"or is not loadable within bean [ {1} ].",
new Object[] {intf,descriptor.getName()}));
}
|
|