Result result = getInitializedResult();
ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
ClassLoader cl = getVerifierContext().getClassLoader();
Set<LifecycleCallbackDescriptor> callbackDescs =
new HashSet<LifecycleCallbackDescriptor>();
for (EjbInterceptor interceptor : descriptor.getInterceptorClasses()) {
callbackDescs.addAll(interceptor.getPostConstructDescriptors());
callbackDescs.addAll(interceptor.getPreDestroyDescriptors());
callbackDescs.addAll(interceptor.getCallbackDescriptors(
LifecycleCallbackDescriptor.CallbackType.PRE_PASSIVATE));
callbackDescs.addAll(interceptor.getCallbackDescriptors(
LifecycleCallbackDescriptor.CallbackType.POST_ACTIVATE));
}
if(descriptor.hasPostConstructMethod())
callbackDescs.addAll(descriptor.getPostConstructDescriptors());
if(descriptor.hasPreDestroyMethod())
callbackDescs.addAll(descriptor.getPreDestroyDescriptors());
// session descriptor has two extra interceptor methods.
if(descriptor instanceof EjbSessionDescriptor) {
EjbSessionDescriptor ejbSessionDescriptor = ((EjbSessionDescriptor)descriptor);
if(ejbSessionDescriptor.hasPostActivateMethod())
callbackDescs.addAll(ejbSessionDescriptor.getPostActivateDescriptors());
if(ejbSessionDescriptor.hasPrePassivateMethod())
callbackDescs.addAll(ejbSessionDescriptor.getPrePassivateDescriptors());
}
for (LifecycleCallbackDescriptor callbackDesc : callbackDescs) {
try {
Method method = callbackDesc.getLifecycleCallbackMethodObject(cl);
Class[] excepClasses = method.getExceptionTypes();
for (Class exception : excepClasses) {
if(!(RuntimeException.class.isAssignableFrom(exception) ||
java.rmi.RemoteException.class.isAssignableFrom(exception))) {
addErrorDetails(result, compName);
result.failed(smh.getLocalString
(getClass().getName() + ".failed",
"Method [ {0} ] throws an application exception.",
new Object[] {method}));
}
}
} catch (Exception e) {}// will be caught in other tests
}
if(result.getStatus()!=Result.FAILED) {
addGoodDetails(result, compName);
result.passed(smh.getLocalString
(getClass().getName() + ".passed",
"Valid Callback methods."));
}
return result;