FileDocCategorySizeDatePackage
BusinessMethodMatchesWithDD.javaAPI DocGlassfish v2 API7886Fri May 04 22:33:32 BST 2007com.sun.enterprise.tools.verifier.tests.ejb.businessmethod

BusinessMethodMatchesWithDD

public class BusinessMethodMatchesWithDD extends com.sun.enterprise.tools.verifier.tests.ejb.EjbTest implements EjbCheck
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

Fields Summary
Result
result
ComponentNameConstructor
compName
Constructors Summary
Methods Summary
public Resultcheck(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

param
descriptor the Enterprise Java Bean deployment descriptor
return
Result the results for this assertion


                                                                  
        

	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 voidcommonToBothInterfaces(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.

param
intf for the Remote/Local interface of the Ejb.
param
descriptor the Enterprise Java Bean deployment descriptor This parameter may be optional depending on the test
param
methodIntf for the interface type

        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()}));
        }