FileDocCategorySizeDatePackage
ASEjbIsReadOnlyBean.javaAPI DocGlassfish v2 API12084Fri May 04 22:35:12 BST 2007com.sun.enterprise.tools.verifier.tests.ejb.ias

ASEjbIsReadOnlyBean

public class ASEjbIsReadOnlyBean extends com.sun.enterprise.tools.verifier.tests.ejb.EjbTest implements com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck
ejb [0,n] is-read-only-bean ? [String] The is-read-only-bean should be defined for entity beans only. Also the implementation should not define ant create and remove methods. This is recommended and not required
author
Irfan Ahmed

Fields Summary
boolean
oneFailed
boolean
oneWarning
Constructors Summary
Methods Summary
public Resultcheck(com.sun.enterprise.deployment.EjbDescriptor descriptor)

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


                        
        

	Result result = getInitializedResult();
	ComponentNameConstructor compName = new ComponentNameConstructor(descriptor);

        SunEjbJar ejbJar = descriptor.getEjbBundleDescriptor().getIasEjbObject();
        String ejbName = null;
        Ejb testCase = null;
        if(ejbJar!=null)
        {
            testCase = getEjb(descriptor.getName(),ejbJar);
            String isReadOnlyBean = testCase.getIsReadOnlyBean();
            if(isReadOnlyBean != null)
            {
                if(isReadOnlyBean.length()==0)
                {
                    oneFailed = true;
                     result.failed(smh.getLocalString(getClass().getName()+".failed",
                        "FAILED [AS-EJB ejb] : is-read-only-bean cannot be an empty string"));
                }
                else
                {
                    if(!isReadOnlyBean.equals("true") && !isReadOnlyBean.equals("false"))
                    {
                        oneFailed = true;
                        result.failed(smh.getLocalString(getClass().getName()+".failed1",
                            "FAILED [AS-EJB ejb] : is-read-only-bean cannot be {0}. It can only be true or false",
                            new Object[]{isReadOnlyBean}));
                    }
                    else
                    {
                        if(isReadOnlyBean.equals("true"))
                            testROBSpecific(descriptor,testCase,result);
                        else
                        {
                            result.passed(smh.getLocalString(getClass().getName()+".passed",
                            "PASSED [AS-EJB ejb] is-read-only-bean is {0}",
                            new Object[]{isReadOnlyBean}));
                        }
                    }
                }
                if(oneFailed)
                    result.setStatus(Result.FAILED);
			    else if(oneWarning)
				    result.setStatus(Result.WARNING);
            }
            else
            {
                result.notApplicable(smh.getLocalString(getClass().getName()+".notApplicable",
                    "NOT APPLICABLE [AS-EJB ejb] is-read-only-bean Element not defined"));
            }
        }
        else
        {
            result.addErrorDetails(smh.getLocalString
                                   ("tests.componentNameConstructor",
                                    "For [ {0} ]",
                                    new Object[] {compName.toString()}));
            result.addErrorDetails(smh.getLocalString
                 (getClass().getName() + ".notRun",
                  "NOT RUN [AS-EJB] : Could not create an SunEjbJar object"));
        }
        return result;
    
public voidtestROBSpecific(com.sun.enterprise.deployment.EjbDescriptor descriptor, com.sun.enterprise.tools.common.dd.ejb.Ejb testCase, Result result)

        //Read only Beans can only be Entity Beans
        if(descriptor instanceof EjbEntityDescriptor)
        {
            result.passed(smh.getLocalString(getClass().getName()+".passed1", 
                                    "PASSED [AS-EJB ejb] : Read Only Beans can only be Entity Beans"));
        }
        else if(descriptor instanceof EjbSessionDescriptor)
        {
            oneFailed = true;
            result.failed(smh.getLocalString(getClass().getName()+".failed2",
                "FAILED [AS-EJB ejb] : Read Only Beans cannot be Session Beans. They can only be Entity Beans"));
            return;
        }
        else if(descriptor instanceof EjbMessageBeanDescriptor)
        {
            oneFailed = true;
            result.failed(smh.getLocalString(getClass().getName()+".failed3",
                "FAILED [AS-EJB ejb] : Read Only Beans cannot be Message Driven Beans. They can only be Entity Beans"));
            return;
        }

        //Only Container Managed Transactions are Allowed
        String txnType = descriptor.getTransactionType();
        if(txnType.equals(descriptor.CONTAINER_TRANSACTION_TYPE))
        {
            result.passed(smh.getLocalString(getClass().getName()+".passed2", 
                                    "PASSED [AS-EJB ejb] : Read Only Beans can only have Container Managed Transactions"));
        }
        else
        {
            oneFailed = true;
            result.failed(smh.getLocalString(getClass().getName()+".failed4",
                "FAILED [AS-EJB ejb] : Read Only Beans cannot have Bean Managed Transactions"));
        }

        //Encourage not to have create/remove methods in Home Interface
        String homeName = descriptor.getHomeClassName();
        Class homeClass = null;
        boolean foundCreateMethod = false;
        boolean foundRemoveMethod = false;
        try
        {
            homeClass = getVerifierContext().getClassLoader().loadClass(homeName);
            Method methods[] = homeClass.getMethods();
            for(int i=0;i<methods.length;i++)
            {
                if(methods[i].getName().startsWith("create"))
                {
                    foundCreateMethod = true;
                    break;
                }
            }

            for(int i=0;i<methods.length;i++)
            {
               if(methods[i].getName().startsWith("remove"))
               {
                    foundRemoveMethod = true;
                    break;
               }
            }
            if(foundCreateMethod)
            {
			    oneWarning = true;
                result.addWarningDetails(smh.getLocalString(getClass().getName()+".warning1",
                    "WARNING [AS-EJB ejb] : Read Only Beans should have zero create Methods"));
            }
            else
                result.passed(smh.getLocalString(getClass().getName()+".passed3",
                    "PASSED [AS-EJB ejb] : Read Only Bean has zero create Methods"));

            if(foundRemoveMethod)
            {
			    oneWarning = true;
                result.addWarningDetails(smh.getLocalString(getClass().getName()+".warning2",
                    "WARNING [AS-EJB ejb] : Read Only Beans should have zero remove Methods"));
            }
            else
            {
                result.passed(smh.getLocalString(getClass().getName()+".passed4",
                    "PASSED [AS-EJB ejb] : Read Only Bean has zero remove Methods"));
            }

            //Refresh Period Test
            String refreshPeriod = testCase.getRefreshPeriodInSeconds();
            if(refreshPeriod!=null)
            {
                if(refreshPeriod.length()==0)
                {
                    oneFailed = true;
                    result.failed(smh.getLocalString(getClass().getName()+".failed5",
                        "FAILED [AS-EJB ejb] : refresh-period-in-seconds is empty. It should be between 0 and {0}",new Object[]{new Long( Long.MAX_VALUE)}));
                }
                else
                {
                    try
                    {
                        long refValue = Long.valueOf(refreshPeriod).longValue();
                        if(refValue <0 || refValue > Long.MAX_VALUE)
                        {
                            result.failed(smh.getLocalString(getClass().getName()+".failed6",
                                "FAILED [AS-EJB ejb] : refresh-period-in-seconds is invalid. It should be between 0 and {0}." ,new Object[]{new Long( Long.MAX_VALUE)}));
                        }
                        else
                            result.passed(smh.getLocalString(getClass().getName()+".passed5",
                                "PASSED [AS-EJB ejb] : refresh-period-in-seconds is {0}",new Object[]{new Long(refValue)}));
                    }
                    catch(NumberFormatException nfex)
                    {
                        Verifier.debug(nfex);
                        result.failed(smh.getLocalString(getClass().getName()+".failed6",
                            "FAILED [AS-EJB ejb] : refresh-period-in-seconds is invalid. It should be between 0 and {0}", new Object[]{new Long(Long.MAX_VALUE)} ));
                    }
                }
            }

            if(oneFailed)
                result.setStatus(Result.FAILED);
        }
        catch(ClassNotFoundException cfne)
        {
            Verifier.debug(cfne);
            result.addErrorDetails(smh.getLocalString
                           ("tests.componentNameConstructor",
                            "For [ {0} ]",
                            new Object[] {(new ComponentNameConstructor(descriptor)).toString()}));
            result.failed(smh.getLocalString
                  (getClass().getName() + ".failed7",
                   "Error: Home interface [ {0} ] does not exist or is not loadable within bean [ {1} ]",
                   new Object[] {homeName, descriptor.getName()}));
        }