private void processEntityBeanMetaData(
      final DeploymentUnit deploymentUnit, final EntityBeanMetaData entity)
      throws DeploymentUnitProcessingException {
    final EjbJarDescription ejbJarDescription = getEjbJarDescription(deploymentUnit);

    final String beanName = entity.getName();
    final String beanClassName = entity.getEjbClass();

    final EntityBeanComponentDescription description =
        new EntityBeanComponentDescription(
            beanName, beanClassName, ejbJarDescription, deploymentUnit.getServiceName());
    // add it to the ejb jar description
    ejbJarDescription.getEEModuleDescription().addComponent(description);
    description.setDescriptorData(entity);

    description.setPersistenceType(entity.getPersistenceType());
    description.setReentrant(entity.isReentrant());
    description.setPrimaryKeyType(entity.getPrimKeyClass());
    // TODO: validation

    final String localHome = entity.getLocalHome();
    if (localHome != null) {
      description.addLocalHome(localHome);
    }

    final String local = entity.getLocal();
    if (local != null) {
      description.addEjbLocalObjectView(local);
    }
  }
  @Override
  protected EntityBeanMetaData assertFullEntity(
      String ejbName, IEnterpriseBeansMetaData<?, ?, ?, ?> enterpriseBeansMetaData, Mode mode) {
    EntityBeanMetaData entity = assertEntity(ejbName + "EjbName", enterpriseBeansMetaData);
    assertId(ejbName, entity);
    assertMappedName(ejbName, entity.getMappedName());
    assertClass(ejbName, "Home", entity.getHome());
    assertClass(ejbName, "Remote", entity.getRemote());
    assertClass(ejbName, "LocalHome", entity.getLocalHome());
    assertClass(ejbName, "Local", entity.getLocal());
    assertClass(ejbName, "EjbClass", entity.getEjbClass());
    assertEquals(PersistenceType.Container, entity.getPersistenceType());
    assertEquals(ejbName + "PrimKeyClass", entity.getPrimKeyClass());
    assertTrue(entity.isReentrant());
    assertEquals("2.x", entity.getCmpVersion());
    assertFalse(entity.isCMP1x());
    assertEquals(ejbName + "AbstractSchemaName", entity.getAbstractSchemaName());
    assertCmpFields(ejbName, 2, entity.getCmpFields());
    assertEquals(ejbName + "PrimKeyField", entity.getPrimKeyField());
    assertEnvironment(ejbName, entity.getJndiEnvironmentRefsGroup(), true, mode);
    if (mode == Mode.SPEC) {
      assertContainerTransactions(ejbName, 6, 6, entity.getContainerTransactions());
      assertMethodPermissions(
          ejbName, ejbName + "MethodPermission", 3, 3, entity.getMethodPermissions());
      assertExcludeList(ejbName, 5, 5, entity.getExcludeList());
    } else {
      assertNull(entity.getContainerTransactions());
      assertNull(entity.getMethodPermissions());
      assertNull(entity.getExcludeList());
    }
    assertSecurityRoleRefs(ejbName, 2, entity.getSecurityRoleRefs());
    assertSecurityIdentity(ejbName, "SecurityIdentity", entity.getSecurityIdentity(), true, mode);
    assertQueries(ejbName, 3, entity.getQueries());

    return entity;
  }