Search in sources :

Example 1 with Descriptor

use of org.glassfish.deployment.common.Descriptor in project Payara by payara.

the class CmpFields method check.

/**
 * Container-managed fields valid type test.
 *
 * The Bean Provider must ensure that the Java types assigned to the
 * container-managed fields are one of the following: Java primitive types,
 * Java serializable types, or references to enterprise beans' remote or home
 * interfaces.
 *
 * @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 persistentType = ((EjbEntityDescriptor) descriptor).getPersistenceType();
        if (EjbEntityDescriptor.CONTAINER_PERSISTENCE.equals(persistentType)) {
            // this test apply only to 1.x cmp beans, in 2.x fields are virtual fields only
            if (EjbCMPEntityDescriptor.CMP_1_1 != ((EjbCMPEntityDescriptor) descriptor).getCMPVersion()) {
                result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                result.notApplicable(smh.getLocalString("com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.notApplicable3", "Test do not apply to this cmp-version of container managed persistence EJBs"));
                return result;
            }
            VerifierTestContext context = getVerifierContext();
            ClassLoader jcl = context.getClassLoader();
            // RULE: container-managed fields are one of the following:
            // Java primitive types, Java serializable types, or references
            // to enterprise beans' remote or home interfaces.
            Set persistentFields = ((EjbCMPEntityDescriptor) descriptor).getPersistenceDescriptor().getCMPFields();
            Iterator iterator = persistentFields.iterator();
            Descriptor persistentField;
            Field field;
            boolean oneFailed = false;
            while (iterator.hasNext()) {
                persistentField = (Descriptor) iterator.next();
                boolean foundField = false;
                try {
                    Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
                    // start do while loop here....
                    do {
                        try {
                            Field f = c.getDeclaredField(persistentField.getName());
                            foundField = true;
                            Class persistentFieldClassType = f.getType();
                            if (descriptor.getHomeClassName() != null && !"".equals(descriptor.getHomeClassName()) && descriptor.getRemoteClassName() != null && !"".equals(descriptor.getRemoteClassName())) {
                                if (RmiIIOPUtils.isPersistentFieldTypeValid(persistentFieldClassType, descriptor.getHomeClassName(), descriptor.getRemoteClassName())) {
                                    result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                                    result.addGoodDetails(smh.getLocalString(getClass().getName() + ".passed", "Valid type assigned to container managed field [ {0} ] found in bean [ {1} ]", new Object[] { ((Descriptor) persistentField).getName(), c.getName() }));
                                } else {
                                    oneFailed = true;
                                    result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                                    result.addErrorDetails(smh.getLocalString(getClass().getName() + ".failed", "Error: Invalid type assigned to container managed field [ {0} ] found in bean [ {1} ]", new Object[] { ((Descriptor) persistentField).getName(), c.getName() }));
                                }
                            }
                            if (descriptor.getLocalHomeClassName() != null && !"".equals(descriptor.getLocalHomeClassName()) && descriptor.getLocalClassName() != null && !"".equals(descriptor.getLocalClassName())) {
                                if (RmiIIOPUtils.isPersistentFieldTypeValid(persistentFieldClassType, descriptor.getLocalHomeClassName(), descriptor.getLocalClassName())) {
                                    result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                                    result.addGoodDetails(smh.getLocalString(getClass().getName() + ".passed", "Valid type assigned to container managed field [ {0} ] found in bean [ {1} ]", new Object[] { ((Descriptor) persistentField).getName(), c.getName() }));
                                } else {
                                    oneFailed = true;
                                    result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                                    result.addErrorDetails(smh.getLocalString(getClass().getName() + ".failed", "Error: Invalid type assigned to container managed field [ {0} ] found in bean [ {1} ]", new Object[] { ((Descriptor) persistentField).getName(), c.getName() }));
                                }
                            }
                        } catch (NoSuchFieldException e) {
                            foundField = false;
                        }
                    } while (((c = c.getSuperclass()) != null) && (!foundField));
                    if (!foundField) {
                        if (!oneFailed) {
                            oneFailed = true;
                        }
                        result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                        result.addErrorDetails(smh.getLocalString(getClass().getName() + ".failedException1", "Error: field [ {0} ] not found in class [ {1} ]", new Object[] { ((Descriptor) persistentField).getName(), descriptor.getEjbClassName() }));
                    }
                } catch (ClassNotFoundException e) {
                    Verifier.debug(e);
                    result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
                    result.failed(smh.getLocalString(getClass().getName() + ".failedException", "Error: [ {0} ] class not found.", new Object[] { descriptor.getEjbClassName() }));
                }
            }
            if (oneFailed) {
                result.setStatus(Result.FAILED);
            } else {
                result.setStatus(Result.PASSED);
            }
        } else {
            // if (BEAN_PERSISTENCE.equals(persistentType))
            result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
            result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable1", "Expected persistence type [ {0} ], but [ {1} ] bean has persistence type [ {2} ]", new Object[] { EjbEntityDescriptor.CONTAINER_PERSISTENCE, descriptor.getName(), persistentType }));
        }
        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;
    }
}
Also used : Set(java.util.Set) VerifierTestContext(com.sun.enterprise.tools.verifier.VerifierTestContext) Result(com.sun.enterprise.tools.verifier.Result) EjbEntityDescriptor(org.glassfish.ejb.deployment.descriptor.EjbEntityDescriptor) Field(java.lang.reflect.Field) Iterator(java.util.Iterator) EjbEntityDescriptor(org.glassfish.ejb.deployment.descriptor.EjbEntityDescriptor) EjbCMPEntityDescriptor(org.glassfish.ejb.deployment.descriptor.EjbCMPEntityDescriptor) Descriptor(org.glassfish.deployment.common.Descriptor) EjbDescriptor(org.glassfish.ejb.deployment.descriptor.EjbDescriptor) ComponentNameConstructor(com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor)

Example 2 with Descriptor

use of org.glassfish.deployment.common.Descriptor in project Payara by payara.

the class AroundInvokeNode method getDescriptor.

@Override
public LifecycleCallbackDescriptor getDescriptor() {
    if (descriptor == null) {
        descriptor = new LifecycleCallbackDescriptor();
        Descriptor parentDesc = (Descriptor) getParentNode().getDescriptor();
        if (parentDesc instanceof EjbDescriptor) {
            EjbDescriptor ejbDesc = (EjbDescriptor) parentDesc;
            descriptor.setDefaultLifecycleCallbackClass(ejbDesc.getEjbClassName());
        } else if (parentDesc instanceof EjbInterceptor) {
            EjbInterceptor ejbInterceptor = (EjbInterceptor) parentDesc;
            descriptor.setDefaultLifecycleCallbackClass(ejbInterceptor.getInterceptorClassName());
        }
    }
    return descriptor;
}
Also used : LifecycleCallbackDescriptor(com.sun.enterprise.deployment.LifecycleCallbackDescriptor) LifecycleCallbackDescriptor(com.sun.enterprise.deployment.LifecycleCallbackDescriptor) Descriptor(org.glassfish.deployment.common.Descriptor) EjbDescriptor(com.sun.enterprise.deployment.EjbDescriptor) EjbInterceptor(com.sun.enterprise.deployment.EjbInterceptor) EjbDescriptor(com.sun.enterprise.deployment.EjbDescriptor)

Example 3 with Descriptor

use of org.glassfish.deployment.common.Descriptor in project Payara by payara.

the class MailSessionDeployer method registerMailSessionDefinitions.

private void registerMailSessionDefinitions(String appName, Descriptor descriptor) {
    if (descriptor instanceof JndiNameEnvironment) {
        JndiNameEnvironment env = (JndiNameEnvironment) descriptor;
        for (Descriptor msd : env.getResourceDescriptors(JavaEEResourceType.MSD)) {
            assert msd instanceof MailSessionDescriptor;
            registerMSDReferredByApplication(appName, (MailSessionDescriptor) msd);
        }
    }
    // ejb descriptor
    if (descriptor instanceof EjbBundleDescriptor) {
        EjbBundleDescriptor ejbDesc = (EjbBundleDescriptor) descriptor;
        Set<EjbDescriptor> ejbDescriptors = (Set<EjbDescriptor>) ejbDesc.getEjbs();
        for (EjbDescriptor ejbDescriptor : ejbDescriptors) {
            for (Descriptor msd : ejbDescriptor.getResourceDescriptors(JavaEEResourceType.MSD)) {
                assert msd instanceof MailSessionDescriptor;
                registerMSDReferredByApplication(appName, (MailSessionDescriptor) msd);
            }
        }
        // ejb interceptors
        Set<EjbInterceptor> ejbInterceptors = ejbDesc.getInterceptors();
        for (EjbInterceptor ejbInterceptor : ejbInterceptors) {
            for (Descriptor msd : ejbInterceptor.getResourceDescriptors(JavaEEResourceType.MSD)) {
                assert msd instanceof MailSessionDescriptor;
                registerMSDReferredByApplication(appName, (MailSessionDescriptor) msd);
            }
        }
    }
    if (descriptor instanceof BundleDescriptor) {
        // managed bean descriptors
        Set<ManagedBeanDescriptor> managedBeanDescriptors = ((BundleDescriptor) descriptor).getManagedBeans();
        for (ManagedBeanDescriptor mbd : managedBeanDescriptors) {
            for (Descriptor msd : mbd.getResourceDescriptors(JavaEEResourceType.MSD)) {
                assert msd instanceof MailSessionDescriptor;
                registerMSDReferredByApplication(appName, (MailSessionDescriptor) msd);
            }
        }
    }
}
Also used : RootDeploymentDescriptor(org.glassfish.deployment.common.RootDeploymentDescriptor) Descriptor(org.glassfish.deployment.common.Descriptor)

Example 4 with Descriptor

use of org.glassfish.deployment.common.Descriptor in project Payara by payara.

the class ApplicationValidator method isExistsDescriptor.

/**
 * Method to compare existing descriptor with other descriptors. If both descriptor is equal then deployment
 * should be failed. scope is nothing but app level,connector level, ejb level etc., which is used later to
 * compare same jndi name is defined at different scope or not.
 * @param name
 * @param descriptor
 * @param scope
 * @return
 */
private boolean isExistsDescriptor(String name, ResourceDescriptor descriptor, String scope) {
    if (descriptor != null) {
        CommonResourceValidator commonResourceValidator = allResourceDescriptors.get(name);
        if (commonResourceValidator != null) {
            Descriptor existingDescriptor = commonResourceValidator.getDescriptor();
            if (descriptor instanceof MailSessionDescriptor && existingDescriptor instanceof MailSessionDescriptor) {
                if (!descriptor.equals(existingDescriptor)) {
                    allUniqueResource = false;
                    return true;
                } else if (!(existingDescriptor == descriptor)) {
                    DOLUtils.getDefaultLogger().log(Level.SEVERE, "DEP0001:Application validation fails for given application: {0}", new Object[] { descriptor.getName() });
                }
            } else if (descriptor instanceof DataSourceDefinitionDescriptor && existingDescriptor instanceof DataSourceDefinitionDescriptor) {
                if (!descriptor.equals(existingDescriptor)) {
                    allUniqueResource = false;
                    return true;
                } else if (!(existingDescriptor == descriptor)) {
                    DOLUtils.getDefaultLogger().log(Level.SEVERE, "DEP0002:Duplicate descriptor found for given jndi-name: {0}", new Object[] { descriptor.getName() });
                }
            } else if (descriptor instanceof ConnectionFactoryDefinitionDescriptor && existingDescriptor instanceof ConnectionFactoryDefinitionDescriptor) {
                if (!descriptor.equals(existingDescriptor)) {
                    allUniqueResource = false;
                    return true;
                } else if (!(existingDescriptor == descriptor)) {
                    DOLUtils.getDefaultLogger().log(Level.SEVERE, "DEP0002:Duplicate descriptor found for given jndi-name: {0}", new Object[] { descriptor.getName() });
                }
            } else if (descriptor instanceof AdministeredObjectDefinitionDescriptor && existingDescriptor instanceof AdministeredObjectDefinitionDescriptor) {
                if (!descriptor.equals(existingDescriptor)) {
                    allUniqueResource = false;
                    return true;
                } else if (!(existingDescriptor == descriptor)) {
                    DOLUtils.getDefaultLogger().log(Level.SEVERE, "DEP0002:Duplicate descriptor found for given jndi-name: {0}", new Object[] { descriptor.getName() });
                }
            }
            @SuppressWarnings("unchecked") Vector<String> vectorScope = commonResourceValidator.getScope();
            if (vectorScope != null) {
                vectorScope.add(scope);
            }
            commonResourceValidator.setScope(vectorScope);
            allResourceDescriptors.put(name, commonResourceValidator);
        } else {
            Vector<String> vectorScope = new Vector<>();
            vectorScope.add(scope);
            allResourceDescriptors.put(name, new CommonResourceValidator(descriptor, name, vectorScope));
        }
    }
    return false;
}
Also used : ModuleDescriptor(org.glassfish.deployment.common.ModuleDescriptor) Descriptor(org.glassfish.deployment.common.Descriptor)

Example 5 with Descriptor

use of org.glassfish.deployment.common.Descriptor in project Payara by payara.

the class DOLUtils method getComponentEnvId.

/**
 * Generate a unique id name for each J2EE component.
 * @param env
 * @return
 */
public static String getComponentEnvId(JndiNameEnvironment env) {
    String id = null;
    if (env instanceof EjbDescriptor) {
        // EJB component
        EjbDescriptor ejbEnv = (EjbDescriptor) env;
        // Make jndi name flat so it won't result in the creation of
        // a bunch of sub-contexts.
        String flattedJndiName = ejbEnv.getJndiName().replace('/', '.');
        EjbBundleDescriptor ejbBundle = ejbEnv.getEjbBundleDescriptor();
        Descriptor d = ejbBundle.getModuleDescriptor().getDescriptor();
        // as the web bundle, because they share the same JNDI namespace
        if (d instanceof WebBundleDescriptor) {
            // copy of code below
            WebBundleDescriptor webEnv = (WebBundleDescriptor) d;
            id = webEnv.getApplication().getName() + ID_SEPARATOR + webEnv.getContextRoot();
            if (deplLogger.isLoggable(Level.FINER)) {
                deplLogger.log(Level.FINER, CONVERT_EJB_TO_WEB_ID, id);
            }
        } else {
            id = ejbEnv.getApplication().getName() + ID_SEPARATOR + ejbBundle.getModuleDescriptor().getArchiveUri() + ID_SEPARATOR + ejbEnv.getName() + ID_SEPARATOR + flattedJndiName + ejbEnv.getUniqueId();
        }
    } else if (env instanceof WebBundleDescriptor) {
        WebBundleDescriptor webEnv = (WebBundleDescriptor) env;
        id = webEnv.getApplication().getName() + ID_SEPARATOR + webEnv.getContextRoot();
    } else if (env instanceof ApplicationClientDescriptor) {
        ApplicationClientDescriptor appEnv = (ApplicationClientDescriptor) env;
        id = "client" + ID_SEPARATOR + appEnv.getName() + ID_SEPARATOR + appEnv.getMainClassName();
    } else if (env instanceof ManagedBeanDescriptor) {
        id = ((ManagedBeanDescriptor) env).getGlobalJndiName();
    } else if (env instanceof EjbBundleDescriptor) {
        EjbBundleDescriptor ejbBundle = (EjbBundleDescriptor) env;
        id = "__ejbBundle__" + ID_SEPARATOR + ejbBundle.getApplication().getName() + ID_SEPARATOR + ejbBundle.getModuleName();
    }
    return id;
}
Also used : EjbBundleDescriptor(com.sun.enterprise.deployment.EjbBundleDescriptor) WebBundleDescriptor(com.sun.enterprise.deployment.WebBundleDescriptor) ModuleDescriptor(org.glassfish.deployment.common.ModuleDescriptor) ActiveDescriptor(org.glassfish.hk2.api.ActiveDescriptor) BundleDescriptor(com.sun.enterprise.deployment.BundleDescriptor) ConnectorDescriptor(com.sun.enterprise.deployment.ConnectorDescriptor) Descriptor(org.glassfish.deployment.common.Descriptor) ManagedBeanDescriptor(com.sun.enterprise.deployment.ManagedBeanDescriptor) EjbDescriptor(com.sun.enterprise.deployment.EjbDescriptor) WebBundleDescriptor(com.sun.enterprise.deployment.WebBundleDescriptor) EjbBundleDescriptor(com.sun.enterprise.deployment.EjbBundleDescriptor) RootDeploymentDescriptor(org.glassfish.deployment.common.RootDeploymentDescriptor) ApplicationClientDescriptor(com.sun.enterprise.deployment.ApplicationClientDescriptor) ApplicationClientDescriptor(com.sun.enterprise.deployment.ApplicationClientDescriptor) ManagedBeanDescriptor(com.sun.enterprise.deployment.ManagedBeanDescriptor) EjbDescriptor(com.sun.enterprise.deployment.EjbDescriptor)

Aggregations

Descriptor (org.glassfish.deployment.common.Descriptor)17 EjbDescriptor (com.sun.enterprise.deployment.EjbDescriptor)5 ComponentNameConstructor (com.sun.enterprise.tools.verifier.tests.ComponentNameConstructor)5 Iterator (java.util.Iterator)5 Set (java.util.Set)5 Result (com.sun.enterprise.tools.verifier.Result)4 RootDeploymentDescriptor (org.glassfish.deployment.common.RootDeploymentDescriptor)4 EjbCMPEntityDescriptor (org.glassfish.ejb.deployment.descriptor.EjbCMPEntityDescriptor)4 EjbDescriptor (org.glassfish.ejb.deployment.descriptor.EjbDescriptor)4 EjbBundleDescriptor (com.sun.enterprise.deployment.EjbBundleDescriptor)3 LifecycleCallbackDescriptor (com.sun.enterprise.deployment.LifecycleCallbackDescriptor)3 Field (java.lang.reflect.Field)3 EjbEntityDescriptor (org.glassfish.ejb.deployment.descriptor.EjbEntityDescriptor)3 BundleDescriptor (com.sun.enterprise.deployment.BundleDescriptor)2 EjbInterceptor (com.sun.enterprise.deployment.EjbInterceptor)2 EjbReferenceDescriptor (com.sun.enterprise.deployment.EjbReferenceDescriptor)2 ManagedBeanDescriptor (com.sun.enterprise.deployment.ManagedBeanDescriptor)2 ServiceReferenceDescriptor (com.sun.enterprise.deployment.ServiceReferenceDescriptor)2 VerifierTestContext (com.sun.enterprise.tools.verifier.VerifierTestContext)2 ModuleDescriptor (org.glassfish.deployment.common.ModuleDescriptor)2