public Result check(Descriptor descriptor) {
    this.descriptor = descriptor;
    result = getInitializedResult();
    compName = getVerifierContext().getComponentNameConstructor();
    ClassLoader cl = getVerifierContext().getClassLoader();
    List<InjectionCapable> injectables = getInjectables(getClassName());
    for (InjectionCapable injectionCapable : injectables) {
      Set<InjectionTarget> iTargets = injectionCapable.getInjectionTargets();
      for (InjectionTarget target : iTargets) {
        try {
          if (target.isFieldInjectable()) {
            Class classObj = Class.forName(getClassName(), false, cl);
            Field field = classObj.getDeclaredField(target.getFieldName());
            testMethodModifiers(field.getModifiers(), "field", field);
          }
          if (target.isMethodInjectable()) {
            Class classObj = Class.forName(getClassName(), false, cl);
            Method method = getInjectedMethod(classObj, target.getMethodName());
            if (method == null) continue;
            testMethodModifiers(method.getModifiers(), "method", method);
          }
        } catch (Exception e) {
        } // ignore as it will be caught in other tests
      }
    }

    if (result.getStatus() != Result.FAILED) {
      addGoodDetails(result, compName);
      result.passed(
          smh.getLocalString(getClass().getName() + ".passed", "Valid injection method(s)."));
    }
    return result;
  }
 /**
  * Checks if the EJB class implements the TimedObject interface
  *
  * @param descriptor the Enterprise Java Bean deployment descriptor
  * @return <code>Result</code> the results for this assertion
  */
 public Result check(EjbDescriptor descriptor) {
   Result result = getInitializedResult();
   ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
   boolean isEjb30 = descriptor.getEjbBundleDescriptor().getSpecVersion().equalsIgnoreCase("3.0");
   if (descriptor.isTimedObject()) {
     // Timers can be created for stateless session beans, message-driven beans,
     // and 2.1 entity beans.Timers cannot be created for stateful session beans or EJB 3.0
     // entities.
     if (((descriptor instanceof EjbEntityDescriptor) && isEjb30)
         || ((descriptor instanceof EjbSessionDescriptor)
             && ((((EjbSessionDescriptor) descriptor).getSessionType())
                 .equals(EjbSessionDescriptor.STATEFUL)))) {
       addErrorDetails(result, compName);
       result.failed(
           smh.getLocalString(
               getClass().getName() + ".failed1",
               "[ {0} ] must not implement the TimedObject interface."
                   + "Only 2.1 entity beans or stateless session beans may "
                   + "implement the TimedObject interface",
               new Object[] {descriptor.getEjbClassName()}));
     }
   }
   if (result.getStatus() != Result.FAILED) {
     addGoodDetails(result, compName);
     result.passed(
         smh.getLocalString(
             getClass().getName() + ".passed",
             "[ {0} ] properly implements the TimedObject interface",
             new Object[] {descriptor.getEjbClassName()}));
   }
   return result;
 }
  /**
   * Session Bean's bean-managed transaction demarcation test.
   *
   * <p>The enterprise bean with bean-managed transaction demarcation must be a Session bean.
   *
   * @param descriptor the Enterprise Java Bean deployment descriptor
   * @return <code>Result</code> the results for this assertion
   */
  public Result check(EjbDescriptor descriptor) {

    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();

    String transactionType = descriptor.getTransactionType();
    if (EjbSessionDescriptor.BEAN_TRANSACTION_TYPE.equals(transactionType)) {
      if (descriptor instanceof EjbSessionDescriptor) {
        result.addGoodDetails(
            smh.getLocalString(
                "tests.componentNameConstructor",
                "For [ {0} ]",
                new Object[] {compName.toString()}));
        result.passed(
            smh.getLocalString(
                getClass().getName() + ".passed",
                "[ {0} ] is valid transactionType within Session bean [ {1} ]",
                new Object[] {transactionType, descriptor.getName()}));
      } else if (descriptor instanceof EjbEntityDescriptor) {
        result.addErrorDetails(
            smh.getLocalString(
                "tests.componentNameConstructor",
                "For [ {0} ]",
                new Object[] {compName.toString()}));
        result.failed(
            smh.getLocalString(
                getClass().getName() + ".failedException",
                "Error: [ {0} ] is not valid transactionType within entity bean [ {1} ]",
                new Object[] {transactionType, descriptor.getName()}));
      }
      return result;
    } else if (EjbSessionDescriptor.CONTAINER_TRANSACTION_TYPE.equals(transactionType)) {
      result.addNaDetails(
          smh.getLocalString(
              "tests.componentNameConstructor", "For [ {0} ]", new Object[] {compName.toString()}));
      result.notApplicable(
          smh.getLocalString(
              getClass().getName() + ".notApplicable",
              "Expected [ {0} ] transaction demarcation, but [ {1} ] bean has [ {2} ] transaction demarcation.",
              new Object[] {
                EjbSessionDescriptor.BEAN_TRANSACTION_TYPE,
                descriptor.getName(),
                EjbSessionDescriptor.CONTAINER_TRANSACTION_TYPE
              }));
      return result;
    } else {
      result.addNaDetails(
          smh.getLocalString(
              "tests.componentNameConstructor", "For [ {0} ]", new Object[] {compName.toString()}));
      result.notApplicable(
          smh.getLocalString(
              getClass().getName() + ".notApplicable",
              "Expected [ {0} ] transaction demarcation, but [ {1} ] bean has [ {2} ] transaction demarcation.",
              new Object[] {
                EjbSessionDescriptor.BEAN_TRANSACTION_TYPE, descriptor.getName(), transactionType
              }));
      return result;
    }
  }
  /**
   * All methods should have a
   *
   * @param descriptor the Enterprise Java Bean deployment descriptor
   * @return <code>Result</code> the results for this assertion
   */
  public Result check(EjbDescriptor descriptor) {

    result = getInitializedResult();
    //        boolean oneFailed = false;

    try {
      if (descriptor instanceof EjbSessionDescriptor || descriptor instanceof EjbEntityDescriptor) {

        Set methods = descriptor.getMethodDescriptors();
        //		 Set methodPermissions = new HashSet();
        boolean noPermissions = false;

        for (Iterator i = methods.iterator(); i.hasNext(); ) {
          MethodDescriptor md = (MethodDescriptor) i.next();
          Set permissions = descriptor.getMethodPermissionsFor(md);
          if (permissions.isEmpty() || (permissions == null)) {
            result.addWarningDetails(
                smh.getLocalString(
                    getClass().getName() + ".failed",
                    "Warning: Method [ {0} ] of EJB [ {1} ] does not have assigned security-permissions",
                    new Object[] {md.getName(), descriptor.getName()}));
            result.setStatus(result.WARNING);
            noPermissions = true;
          }
        }

        if (!noPermissions) {
          result.passed(
              smh.getLocalString(
                  getClass().getName() + ".passed",
                  "Valid: All [ {0} ]EJB  interfaces methods have security-permissions assigned.",
                  new Object[] {descriptor.getName()}));
        }

      } else {
        result.notApplicable(
            smh.getLocalString(
                getClass().getName() + ".notApplicable",
                "The bean [ {0} ] is neither a Session nor Entity Bean",
                new Object[] {descriptor.getName()}));
        return result;
      }
    } catch (Exception e) {
      result.failed(
          smh.getLocalString(
              getClass().getName() + ".exception",
              "The test generated the following exception [ {0} ]",
              new Object[] {e.getLocalizedMessage()}));
    }
    return result;
  }
  /**
   * Check that the Client API Connection interface implements the close() method
   *
   * @paramm descriptor deployment descriptor for the rar file
   * @return result object containing the result of the individual test performed
   */
  public Result check(ConnectorDescriptor descriptor) {

    // get the connection
    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
    if (isCCIImplemented(descriptor, result)) {
      Class c = testConnectionImpl(descriptor, result);
      if (c == null) {
        return result;
      }
      // now check the close() method
      Method m = getMethod(c, "close", null);
      if (m != null) {
        // passed
        result.addGoodDetails(
            smh.getLocalString(
                "tests.componentNameConstructor",
                "For [ {0} ]",
                new Object[] {compName.toString()}));
        result.passed(
            smh.getLocalString(
                getClass().getName() + ".passed",
                "The connection interface [ {0} ] implements the close() method",
                new Object[] {c.getName()}));
      } else {
        result.addErrorDetails(
            smh.getLocalString(
                "tests.componentNameConstructor",
                "For [ {0} ]",
                new Object[] {compName.toString()}));
        result.failed(
            smh.getLocalString(
                getClass().getName() + ".failed",
                "Error: The connection interface [ {0} ] does not implement the close() method",
                new Object[] {c.getName()}));
      }
    } else {
      // test is NA
      result.addNaDetails(
          smh.getLocalString(
              "tests.componentNameConstructor", "For [ {0} ]", new Object[] {compName.toString()}));
      result.notApplicable(
          smh.getLocalString(
              "com.sun.enterprise.tools.verifier.tests.connector.cci.notApp",
              "The CCI interfaces do not seem to be implemented by this resource adapter"));
    }
    return result;
  }
Beispiel #6
0
  /**
   * The ejb element specifies the URI of a ejb-jar, relative to the top level of the application
   * package.
   *
   * @param descriptor the Application deployment descriptor
   * @return <code>Result</code> the results for this assertion
   */
  public Result check(Application descriptor) {

    Result result = getInitializedResult();

    if (descriptor.getBundleDescriptors(EjbBundleDescriptor.class).size() > 0) {
      boolean oneFailed = false;
      for (Iterator itr = descriptor.getBundleDescriptors(EjbBundleDescriptor.class).iterator();
          itr.hasNext(); ) {
        EjbBundleDescriptor ejbd = (EjbBundleDescriptor) itr.next();

        // not sure what we can do to test this string?
        if (ejbd.getModuleDescriptor().getArchiveUri().endsWith(".jar")) {
          result.passed(
              smh.getLocalString(
                  getClass().getName() + ".passed",
                  "[ {0} ] specifies the URI [ {1} ] of an ejb-jar, relative to the top level of the application package [ {2} ].",
                  new Object[] {
                    ejbd.getName(), ejbd.getModuleDescriptor().getArchiveUri(), descriptor.getName()
                  }));
        } else {
          if (!oneFailed) {
            oneFailed = true;
          }
          result.addErrorDetails(
              smh.getLocalString(
                  getClass().getName() + ".failed",
                  "Error: [ {0} ] does not specify the URI [ {1} ] of an ejb-jar, relative to the top level of the application package [ {2} ], or does not end with \".jar\"",
                  new Object[] {
                    ejbd.getName(), ejbd.getModuleDescriptor().getArchiveUri(), descriptor.getName()
                  }));
        }
      }
      if (oneFailed) {
        result.setStatus(Result.FAILED);
      } else {
        result.setStatus(Result.PASSED);
      }
    } else {
      result.notApplicable(
          smh.getLocalString(
              getClass().getName() + ".notApplicable",
              "There are no ejb components in application [ {0} ]",
              new Object[] {descriptor.getName()}));
    }

    return result;
  }
Beispiel #7
0
 public Result check(EjbDescriptor descriptor) {
   Result result = getInitializedResult();
   ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
   boolean oneFailed = false;
   try {
     Set resRef = descriptor.getResourceReferenceDescriptors();
     if (!(resRef.isEmpty())) {
       Iterator it = resRef.iterator();
       while (it.hasNext()) {
         ResourceReferenceDescriptor resDesc = ((ResourceReferenceDescriptor) it.next());
         String refName = resDesc.getName();
         if (refName == null || refName.length() == 0) {
           addErrorDetails(result, compName);
           result.failed(
               smh.getLocalString(
                   getClass().getName() + ".failed",
                   "FAILED [AS-EJB resource-ref] : resource-ref has empty res-ref-name"));
         } else {
           addGoodDetails(result, compName);
           result.passed(
               smh.getLocalString(
                   getClass().getName() + ".passed",
                   "PASSED [AS-EJB resource-ref] : res-ref-name is {0}",
                   new Object[] {refName}));
         }
       }
     } else {
       addNaDetails(result, compName);
       result.notApplicable(
           smh.getLocalString(
               getClass().getName() + ".notApplicable",
               "{0} Does not define any resource-ref Elements",
               new Object[] {descriptor.getName()}));
     }
   } catch (Exception ex) {
     addErrorDetails(result, compName);
     result.addErrorDetails(
         smh.getLocalString(
             getClass().getName() + ".notRun",
             "NOT RUN [AS-EJB] : Could not create the descriptor object"));
   }
   return result;
 }
  /**
   * Enterprise Bean's business(...) methods argument RMI IIOP test. Each enterprise Bean class must
   * define zero or more business(...) methods. The method signatures must follow these rules:
   *
   * <p>The methods return value must be legal types for RMI-IIOP.
   *
   * @param descriptor the Enterprise Java Bean deployment descriptor
   * @return <code>Result</code> the results for this assertion
   */
  public Result check(EjbDescriptor descriptor) {

    result = getInitializedResult();
    compName = getVerifierContext().getComponentNameConstructor();

    if ((descriptor instanceof EjbSessionDescriptor)
        || (descriptor instanceof EjbEntityDescriptor)) {
      if (descriptor.getRemoteClassName() != null && !"".equals(descriptor.getRemoteClassName()))
        commonToBothInterfaces(descriptor.getRemoteClassName(), descriptor);

      Set<String> remoteInterfaces = descriptor.getRemoteBusinessClassNames();
      for (String remoteIntf : remoteInterfaces) commonToBothInterfaces(remoteIntf, descriptor);
    }
    if (result.getStatus() != Result.FAILED) {
      addGoodDetails(result, compName);
      result.passed(
          smh.getLocalString(
              getClass().getName() + ".passed", "Proper declaration of business method(s) found."));
    }
    return result;
  }
  public Result check(EjbDescriptor descriptor) {
    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();

    Set<String> remoteAndLocalIntfs = descriptor.getRemoteBusinessClassNames();
    remoteAndLocalIntfs.addAll(descriptor.getLocalBusinessClassNames());

    for (String remoteOrLocalIntf : remoteAndLocalIntfs) {
      try {
        Class c = Class.forName(remoteOrLocalIntf, false, getVerifierContext().getClassLoader());
        if (javax.ejb.EJBObject.class.isAssignableFrom(c)
            || javax.ejb.EJBLocalObject.class.isAssignableFrom(c)) {
          addErrorDetails(result, compName);
          result.failed(
              smh.getLocalString(
                  getClass().getName() + ".failed",
                  "[ {0} ] extends either javax.ejb.EJBObject " + "or javax.ejb.EJBLocalObject.",
                  new Object[] {remoteOrLocalIntf}));
        }
      } catch (ClassNotFoundException e) {
        Verifier.debug(e);
        addErrorDetails(result, compName);
        result.failed(
            smh.getLocalString(
                getClass().getName() + ".failed1",
                "Business Interface class [ {0} ] not found.",
                new Object[] {remoteOrLocalIntf}));
      }
    }
    if (result.getStatus() != Result.FAILED) {
      addGoodDetails(result, compName);
      result.passed(
          smh.getLocalString(getClass().getName() + ".passed", "Business Interface(s) are valid."));
    }

    return result;
  }
  /**
   * Test for each message-listener , that "activationspec-class" implements
   * "javax.resource.spi.ActivationSpec".
   *
   * @param descriptor deployment descriptor for the rar file
   * @return result object containing the result of the individual test performed
   */
  public Result check(ConnectorDescriptor descriptor) {

    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
    if (!descriptor.getInBoundDefined()) {
      result.addNaDetails(
          smh.getLocalString(
              "tests.componentNameConstructor", "For [ {0} ]", new Object[] {compName.toString()}));
      result.notApplicable(
          smh.getLocalString(
              "com.sun.enterprise.tools.verifier.tests.connector.messageinflow.notApp",
              "Resource Adapter does not provide inbound communication"));
      return result;
    }
    InboundResourceAdapter ra = descriptor.getInboundResourceAdapter();
    Set msgListeners = ra.getMessageListeners();
    boolean oneFailed = false;
    Iterator iter = msgListeners.iterator();
    while (iter.hasNext()) {
      MessageListener msgListener = (MessageListener) iter.next();
      String impl = msgListener.getActivationSpecClass();
      Class implClass = null;
      try {
        implClass = Class.forName(impl, false, getVerifierContext().getClassLoader());
      } catch (ClassNotFoundException e) {
        result.addErrorDetails(
            smh.getLocalString(
                "tests.componentNameConstructor",
                "For [ {0} ]",
                new Object[] {compName.toString()}));
        result.failed(
            smh.getLocalString(
                "com.sun.enterprise.tools.verifier.tests.connector.messageinflow.nonexist",
                "Error: The class [ {0} ] as defined under activationspec-class in the deployment descriptor does not exist",
                new Object[] {impl}));
        return result;
      }
      if (!isImplementorOf(implClass, "javax.resource.spi.ActivationSpec")) {
        oneFailed = true;
        result.addErrorDetails(
            smh.getLocalString(
                "tests.componentNameConstructor",
                "For [ {0} ]",
                new Object[] {compName.toString()}));
        result.failed(
            smh.getLocalString(
                getClass().getName() + ".failed",
                "Error: activationspec-class [ {0} ] does not implement javax.resource.spi.ActivationSpec.",
                new Object[] {impl}));
        return result;
      }
    }
    if (!oneFailed) {
      result.addGoodDetails(
          smh.getLocalString(
              "tests.componentNameConstructor", "For [ {0} ]", new Object[] {compName.toString()}));
      result.passed(
          smh.getLocalString(
              getClass().getName() + ".passed",
              "Success: all activationspec-class implement javax.resource.spi.ActivationSpec"));
    }
    return result;
  }
Beispiel #11
0
  /**
   * The Web form-error-page value defines the location in the web application where the page can be
   * used for error page can be found within web application test
   *
   * @param descriptor the Web deployment descriptor
   * @return <code>Result</code> the results for this assertion
   */
  public Result check(WebBundleDescriptor descriptor) {

    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();

    if (descriptor.getLoginConfiguration() != null) {
      boolean foundIt = false;
      //            ZipEntry ze=null;
      //            JarFile jar=null;
      FileArchive arch = null;

      String formErrorPage = descriptor.getLoginConfiguration().getFormErrorPage();
      if (formErrorPage.length() > 0) {

        try {

          //                    File f =
          // Verifier.getArchiveFile(descriptor.getModuleDescriptor().getArchiveUri());
          //                    if(f==null){

          String uri = getAbstractArchiveUri(descriptor);

          try {
            arch = new FileArchive();
            arch.open(uri);
          } catch (IOException e) {
            throw e;
          }
          //                    }else{
          //                        jar = new JarFile(f);
          //                    }
          if (formErrorPage.startsWith("/")) formErrorPage = formErrorPage.substring(1);
          //                    if (f!=null){
          //                        ze = jar.getEntry(formErrorPage);
          //                        foundIt = (ze != null);
          //                    }
          //                    else{
          File fep = new File(new File(arch.getURI()), formErrorPage);
          if (fep.exists()) foundIt = true;
          fep = null;
          //                    }
          //                    if (jar!=null)
          //                        jar.close();
        } catch (Exception ex) {
          // should be aldready set?
          foundIt = false;
        }
        if (foundIt) {
          result.addGoodDetails(
              smh.getLocalString(
                  "tests.componentNameConstructor",
                  "For [ {0} ]",
                  new Object[] {compName.toString()}));
          result.passed(
              smh.getLocalString(
                  getClass().getName() + ".passed",
                  "The form-error-page [ {0} ] value defines the location in the web application where the error page that is displayed when login is not successful can be found within web application [ {1} ]",
                  new Object[] {formErrorPage, descriptor.getName()}));
        } else {
          result.addErrorDetails(
              smh.getLocalString(
                  "tests.componentNameConstructor",
                  "For [ {0} ]",
                  new Object[] {compName.toString()}));
          result.failed(
              smh.getLocalString(
                  getClass().getName() + ".failed",
                  "Error: The form-error-page [ {0} ] value does not define the location in the web application where the error page that is displayed when login is not successful can be found within web application [ {1} ]",
                  new Object[] {formErrorPage, descriptor.getName()}));
        }
      } else {
        result.addNaDetails(
            smh.getLocalString(
                "tests.componentNameConstructor",
                "For [ {0} ]",
                new Object[] {compName.toString()}));
        result.notApplicable(
            smh.getLocalString(
                getClass().getName() + ".notApplicable",
                "There are no form-error-page elements within this web archive [ {0} ]",
                new Object[] {descriptor.getName()}));
      }
    } else {
      result.addNaDetails(
          smh.getLocalString(
              "tests.componentNameConstructor", "For [ {0} ]", new Object[] {compName.toString()}));
      result.notApplicable(
          smh.getLocalString(
              getClass().getName() + ".notApplicable",
              "There are no form-error-page elements within this web archive [ {0} ]",
              new Object[] {descriptor.getName()}));
    }

    return result;
  }
  /**
   * Entity bean's Primary Key Class test. If the enterprise bean is a Entity Bean, the Bean
   * provider specifies the fully qualified name of the Entity bean's primary key class in the
   * "primary-class" element. The Bean provider 'must' specify the primary key class for an Entity
   * with bean managed persistence, and 'may' (but is not required to) specify the primary key class
   * for an Entity with Container-managed persistence.
   *
   * @param descriptor the Enterprise Java Bean deployment descriptor
   * @return <code>Result</code> the results for this assertion
   */
  public Result check(EjbDescriptor descriptor) {

    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();

    if (descriptor instanceof EjbEntityDescriptor) {
      String persistence = ((EjbEntityDescriptor) descriptor).getPersistenceType();
      if (EjbEntityDescriptor.BEAN_PERSISTENCE.equals(persistence)) {
        logger.log(
            Level.FINE,
            getClass().getName() + ".debug1",
            new Object[] {descriptor.getName(), "bean"});
        String primkey = ((EjbEntityDescriptor) descriptor).getPrimaryKeyClassName();

        if (!primkey.equals("java.lang.String")) {
          try {
            Class c = Class.forName(primkey, false, getVerifierContext().getClassLoader());

            result.addGoodDetails(
                smh.getLocalString(
                    "tests.componentNameConstructor",
                    "For [ {0} ]",
                    new Object[] {compName.toString()}));
            result.passed(
                smh.getLocalString(
                    getClass().getName() + ".passed",
                    "Primary Key Class [ {0} ] exist and is loadable",
                    new Object[] {primkey}));
          } catch (Exception e) {
            Verifier.debug(e);
            result.addErrorDetails(
                smh.getLocalString(
                    "tests.componentNameConstructor",
                    "For [ {0} ]",
                    new Object[] {compName.toString()}));
            result.failed(
                smh.getLocalString(
                    getClass().getName() + ".failedException",
                    "Error: Loading Primary Key Class [ {0} ]",
                    new Object[] {primkey}));
            return result;
          }
        } else {
          result.addGoodDetails(
              smh.getLocalString(
                  "tests.componentNameConstructor",
                  "For [ {0} ]",
                  new Object[] {compName.toString()}));

          result.passed(
              smh.getLocalString(
                  getClass().getName() + ".passed1",
                  "Primary Key Class is [ {0} ]",
                  new Object[] {primkey}));
        }

        return result;

      } else if (EjbEntityDescriptor.CONTAINER_PERSISTENCE.equals(persistence)) {
        result.addNaDetails(
            smh.getLocalString(
                "tests.componentNameConstructor",
                "For [ {0} ]",
                new Object[] {compName.toString()}));
        result.notApplicable(
            smh.getLocalString(
                getClass().getName() + ".notApplicable1",
                "Entity Bean [ {0} ] with [ {1} ] managed persistence, primkey optional.",
                new Object[] {descriptor.getName(), persistence}));
        return result;
      } else {
        result.addNaDetails(
            smh.getLocalString(
                "tests.componentNameConstructor",
                "For [ {0} ]",
                new Object[] {compName.toString()}));
        result.notApplicable(
            smh.getLocalString(
                getClass().getName() + ".notApplicable2",
                "Expected [ {0} ] managed persistence, but [ {1} ] bean has [ {2} ] managed persistence.",
                new Object[] {
                  EjbEntityDescriptor.BEAN_PERSISTENCE, descriptor.getName(), persistence
                }));
        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;
    }
  }
  /**
   * Entity bean's Primary Key Class type test. If the enterprise bean is a Entity Bean, the Bean
   * provider specifies the fully qualified name of the Entity bean's primary key class in the
   * "primary-class" element. The Bean provider 'must' specify the primary key class for an Entity
   * with bean managed persistence, and 'may' (but is not required to) specify the primary key class
   * for an Entity with Container-managed persistence.
   *
   * <p>Special case: Unknown primary key class In special situations, the Bean Provider may choose
   * not to specify the primary key class for an entity bean with container-managed persistence.
   * This case happens if the Bean Provider wants to allow the Deployer to select the primary key
   * fields at deployment time. The Deployer uses instructions supplied by the Bean Provider (these
   * instructions are beyond the scope of the EJB spec.) to define a suitable primary key class.
   *
   * <p>In this special case, the type of the argument of the findByPrimaryKey method must be
   * declared as java.lang.Object, and the return value of ejbCreate() must be declared as
   * java.lang.Object. The Bean Provider must specify the primary key class in the deployment
   * descriptor as of the type java.lang.Object.
   *
   * <p>The primary key class is specified at deployment time when the Bean Provider develops
   * enterprise beans that is intended to be used with multiple back-ends that provide persistence,
   * and when these multiple back-ends require different primary key structures.
   *
   * @param descriptor the Enterprise Java Bean deployment descriptor
   * @return <code>Result</code> the results for this assertion
   */
  public Result check(EjbDescriptor descriptor) {

    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();

    if (descriptor instanceof EjbEntityDescriptor) {
      String persistence = ((EjbEntityDescriptor) descriptor).getPersistenceType();
      if (EjbEntityDescriptor.CONTAINER_PERSISTENCE.equals(persistence)) {
        String primkey = ((EjbEntityDescriptor) descriptor).getPrimaryKeyClassName();

        // primkey can be not set, via setting xml element
        // <prim-key-class> to "java.lang.Object"
        if (primkey.equals("java.lang.Object")) {
          result.addGoodDetails(
              smh.getLocalString(
                  "tests.componentNameConstructor",
                  "For [ {0} ]",
                  new Object[] {compName.toString()}));
          result.passed(
              smh.getLocalString(
                  getClass().getName() + ".passed",
                  "Properly defined primary key class type [ {0} ]",
                  new Object[] {"java.lang.Object"}));
        } else {
          result.addNaDetails(
              smh.getLocalString(
                  "tests.componentNameConstructor",
                  "For [ {0} ]",
                  new Object[] {compName.toString()}));
          result.notApplicable(
              smh.getLocalString(
                  getClass().getName() + ".notApplicable1",
                  "Primary Key Class is [ {0} ]",
                  new Object[] {primkey}));
        }

        return result;

      } else if (EjbEntityDescriptor.BEAN_PERSISTENCE.equals(persistence)) {
        result.addNaDetails(
            smh.getLocalString(
                "tests.componentNameConstructor",
                "For [ {0} ]",
                new Object[] {compName.toString()}));
        result.notApplicable(
            smh.getLocalString(
                getClass().getName() + ".notApplicable2",
                "Entity Bean with [ {0} ] managed persistence, primkey mandatory.",
                new Object[] {persistence}));
        return result;
      } else {
        result.addNaDetails(
            smh.getLocalString(
                "tests.componentNameConstructor",
                "For [ {0} ]",
                new Object[] {compName.toString()}));
        result.notApplicable(
            smh.getLocalString(
                getClass().getName() + ".notApplicable3",
                "Expected [ {0} ] managed persistence, but [ {1} ] bean has [ {2} ] managed persistence.",
                new Object[] {
                  EjbEntityDescriptor.CONTAINER_PERSISTENCE, descriptor.getName(), persistence
                }));
        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;
    }
  }
Beispiel #14
0
  public static boolean checkWebProperties(
      WebProperty[] webProps, Result result, WebBundleDescriptor descriptor, Object obj) {
    String compName = result.getComponentName();
    String name;
    String value;
    boolean oneFailed = false;
    String[] names = null;
    if (webProps.length > 0) {
      names = new String[webProps.length];
      for (int rep = 0; rep < webProps.length; rep++) {
        name =
            webProps[rep].getAttributeValue(
                WebProperty.NAME); // *************needs verification from ko]umar Sg
        value = webProps[rep].getAttributeValue(WebProperty.VALUE);
        names[rep] = name;
        if (name != null && value != null && name.length() != 0 && value.length() != 0) {
          // check if the name already exist in this web-prop
          boolean isDuplicate = false;
          for (int rep1 = 0; rep1 < rep; rep1++) {
            if (name.equals(names[rep1])) {
              isDuplicate = true;
              break;
            }
          }

          if (!isDuplicate) {
            result.addGoodDetails(
                smh.getLocalString(
                    "tests.componentNameConstructor", "For [ {0} ]", new Object[] {compName}));
            result.passed(
                smh.getLocalString(
                    obj.getClass().getName() + ".passed",
                    "PASSED [AS-WEB property] Proper web property with name  [ {0} ] and value [ {1} ] defined.",
                    new Object[] {name, value}));
          } else {
            if (!oneFailed) oneFailed = true;
            result.addErrorDetails(
                smh.getLocalString(
                    "tests.componentNameConstructor", "For [ {0} ]", new Object[] {compName}));
            result.failed(
                smh.getLocalString(
                    obj.getClass().getName() + ".failed2",
                    "FAILED [AS-WEB property] name [ {0} ] and value [ {1} ], the name must be unique in the entire list of web property.",
                    new Object[] {name, value}));
          }

        } else {
          if (!oneFailed) oneFailed = true;
          result.addErrorDetails(
              smh.getLocalString(
                  "tests.componentNameConstructor", "For [ {0} ]", new Object[] {compName}));
          result.failed(
              smh.getLocalString(
                  obj.getClass().getName() + ".failed1",
                  "FAILED [AS-WEB property] name [ {0} ] and value [ {1} ], attributes must be of finite length.",
                  new Object[] {name, value}));
        }
      }
    }

    return oneFailed;
  }
  /**
   * Optionally implemented SessionSynchronization interface transaction demarcation test. If an
   * enterprise bean implements the javax.ejb.SessionSynchronization interface, the Application
   * Assembler can specify only the following values for the transaction attributes of the bean's
   * methods: Required RequiresNew Mandatory
   *
   * @param descriptor the Enterprise Java Bean deployment descriptor
   * @return <code>Result</code> the results for this assertion
   */
  public Result check(EjbDescriptor descriptor) {

    Result result = getInitializedResult();
    ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
    boolean oneFound = false;

    if (descriptor instanceof EjbSessionDescriptor) {
      try {
        Context context = getVerifierContext();
        ClassLoader jcl = context.getClassLoader();
        Class c =
            Class.forName(
                descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
        // walk up the class tree
        do {
          Class[] interfaces = c.getInterfaces();

          for (int i = 0; i < interfaces.length; i++) {
            if (interfaces[i].getName().equals("javax.ejb.SessionSynchronization")) {
              oneFound = true;
              break;
            }
          }
        } while ((c = c.getSuperclass()) != null);

      } catch (ClassNotFoundException e) {
        Verifier.debug(e);
        addErrorDetails(result, compName);
        result.failed(
            smh.getLocalString(
                getClass().getName() + ".failedException1",
                "Error: [ {0} ] class not found.",
                new Object[] {descriptor.getEjbClassName()}));
        return result;
      }

      // If an enterprise bean implements the javax.ejb.SessionSynchronization
      // interface, the Application Assembler can specify only the following
      // values for the transaction attributes of the bean's methods:
      //   Required, RequiresNew, Mandatory
      if (oneFound) {
        String transactionAttribute = "";
        ContainerTransaction containerTransaction = null;
        boolean oneFailed = false;
        if (!descriptor.getMethodContainerTransactions().isEmpty()) {
          for (Enumeration ee = descriptor.getMethodContainerTransactions().keys();
              ee.hasMoreElements(); ) {
            MethodDescriptor methodDescriptor = (MethodDescriptor) ee.nextElement();
            containerTransaction =
                (ContainerTransaction)
                    descriptor.getMethodContainerTransactions().get(methodDescriptor);

            if (!(containerTransaction != null && properAttribDefined(containerTransaction))) {
              transactionAttribute = containerTransaction.getTransactionAttribute();
              addErrorDetails(result, compName);
              result.failed(
                  smh.getLocalString(
                      getClass().getName() + ".failed",
                      "Error: TransactionAttribute [ {0} ] for method [ {1} ] is not valid.",
                      new Object[] {transactionAttribute, methodDescriptor.getName()}));
            }
          }
        }
      }
    }

    if (result.getStatus() != Result.FAILED) {
      addGoodDetails(result, compName);
      result.passed(
          smh.getLocalString(
              getClass().getName() + ".passed",
              "TransactionAttributes are defined properly for the bean"));
    }
    return result;
  }