use of org.glassfish.deployment.common.Descriptor in project Payara by payara.
the class PrimekeyFieldPersistentFields method check.
/**
* The primkey-field must be one of the fields declared in the cmp-field
* elements.
*
* @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();
// cmp-field elements
if (descriptor instanceof EjbEntityDescriptor) {
String persistence = ((EjbEntityDescriptor) descriptor).getPersistenceType();
if (EjbEntityDescriptor.CONTAINER_PERSISTENCE.equals(persistence)) {
try {
// do i need to use this to help determine single vs. multiple
// object finders, etc.
String primkey = ((EjbEntityDescriptor) descriptor).getPrimaryKeyClassName();
if (primkey.equals("java.lang.String")) {
try {
FieldDescriptor primField = ((EjbCMPEntityDescriptor) descriptor).getPrimaryKeyFieldDesc();
// primField must exist in order to be valid & pass test
Descriptor persistentField;
Field field;
Set persistentFields = ((EjbCMPEntityDescriptor) descriptor).getPersistenceDescriptor().getCMPFields();
Iterator iterator = persistentFields.iterator();
boolean foundMatch = false;
while (iterator.hasNext()) {
persistentField = (Descriptor) iterator.next();
if (primField != null) {
if (primField.getName().equals(persistentField.getName())) {
foundMatch = true;
break;
} else {
continue;
}
} else {
// should already be set, can't ever be in cmp
// fields if primField doesn't exist
foundMatch = false;
break;
}
}
if (foundMatch) {
result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.passed(smh.getLocalString(getClass().getName() + ".passed", "Primary key field [ {0} ] is defined within set of container managed fields for bean [ {1} ]", new Object[] { primField.getName(), descriptor.getName() }));
} else {
if (primField != null) {
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failed", "Primary key field [ {0} ] is not defined within set of container managed fields for bean [ {1} ]", new Object[] { primField.getName(), descriptor.getName() }));
} else {
// not failed
try {
if (((EjbEntityDescriptor) descriptor).getPrimaryKeyClassName().equals("java.lang.Object")) {
result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable2", "Primkey field not defined for [ {0} ] bean.", new Object[] { descriptor.getName() }));
} else {
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failed1", "Primary key field is not defined within set of container managed fields for bean [ {0} ]", new Object[] { descriptor.getName() }));
}
} catch (NullPointerException e) {
result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable2", "Primkey field not defined for [ {0} ] bean.", new Object[] { descriptor.getName() }));
}
}
}
} catch (NullPointerException e) {
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failed2", "Error: Primary Key Field must be defined for bean [ {0} ] with primary key class set to [ {1} ]", new Object[] { descriptor.getName(), primkey }));
}
} else {
result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable3", "primkey [ {0} ] is not java.lang.String for bean [ {1} ]", new Object[] { primkey, descriptor.getName() }));
}
} catch (NullPointerException e) {
result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable2", "Primkey field not defined for [ {0} ] bean.", new Object[] { descriptor.getName() }));
}
} else {
result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable1", "Expected [ {0} ] managed persistence, but [ {1} ] bean has [ {2} ] managed persistence", new Object[] { EjbEntityDescriptor.CONTAINER_PERSISTENCE, descriptor.getName(), persistence }));
}
} else {
result.addNaDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.notApplicable(smh.getLocalString(getClass().getName() + ".notApplicable", "{0} expected \n {1} bean, but called with {2} bean", new Object[] { getClass(), "Entity", "Session" }));
}
return result;
}
use of org.glassfish.deployment.common.Descriptor in project Payara by payara.
the class PersistenceFieldsElement method check.
/**
* Container-managed fields test.
* If the enterprise bean is a Entity Bean w/Container managed persistence
* the Bean provider must specify container managed fields in the
* "persistent-fields" element.
*
* @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;
}
logger.log(Level.FINE, getClass().getName() + ".debug1", new Object[] { persistentType });
// RULE: Entity w/Container managed persistence bean provider must
// specify container managed fields in the persistent-fields
// element
Set persistentFields = ((EjbCMPEntityDescriptor) descriptor).getPersistenceDescriptor().getCMPFields();
Iterator iterator = persistentFields.iterator();
// check class to see if fields actually exist
try {
VerifierTestContext context = getVerifierContext();
ClassLoader jcl = context.getClassLoader();
Class c = Class.forName(descriptor.getEjbClassName(), false, getVerifierContext().getClassLoader());
Descriptor persistentField;
Field field;
boolean oneFailed = false;
while (iterator.hasNext()) {
persistentField = (Descriptor) iterator.next();
try {
field = c.getField(persistentField.getName());
result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.passed(smh.getLocalString(getClass().getName() + ".passed", "[ {0} ] field found in [ {1} ]", new Object[] { ((Descriptor) persistentField).getName(), descriptor.getEjbClassName() }));
} catch (NoSuchFieldException e) {
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failedException1", "Error: NoSuchFieldException: [ {0} ] not found in [ {1} ]", new Object[] { ((Descriptor) persistentField).getName(), descriptor.getEjbClassName() }));
if (!oneFailed) {
oneFailed = true;
}
} catch (SecurityException e) {
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failedException2", "Error: SecurityException: [ {0} ] not found in [ {1} ]", new Object[] { ((Descriptor) persistentField).getName(), descriptor.getEjbClassName() }));
if (!oneFailed) {
oneFailed = true;
}
}
}
if (oneFailed) {
result.setStatus(Result.FAILED);
} else {
result.setStatus(Result.PASSED);
}
} catch (ClassNotFoundException e) {
Verifier.debug(e);
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failedException3", "Error: Fields don't exist or are not loadable within bean [ {0} ]", new Object[] { descriptor.getName() }));
}
} else if (EjbEntityDescriptor.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 }));
} else {
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.failed(smh.getLocalString(getClass().getName() + ".failed", "Error: [ {0} ] is not valid persistentType within bean [ {1} ]", new Object[] { persistentType, descriptor.getName() }));
}
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;
}
}
use of org.glassfish.deployment.common.Descriptor in project Payara by payara.
the class CmpFields method runIndividualCmpFieldTest.
/**
* run an individual verifier test of a declated cmp field of the class
*
* @param entity the descriptor for the entity bean containing the cmp-field
* @param f the descriptor for the declared cmp field
* @param c the class owning the cmp field
* @parma r the result object to use to put the test results in
*
* @return true if the test passed
*/
protected boolean runIndividualCmpFieldTest(Descriptor entity, Descriptor persistentField, Class c, Result result) {
ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
String cmpFieldName = persistentField.getName();
String getMethodName = "get" + Character.toUpperCase(cmpFieldName.charAt(0)) + cmpFieldName.substring(1);
Method getMethod = getMethod(c, getMethodName, null);
Class fieldType;
if (getMethod != null) {
boolean run = false;
// get the return type for the setMethod
fieldType = getMethod.getReturnType();
EjbBundleDescriptorImpl bundle = ((EjbDescriptor) entity).getEjbBundleDescriptor();
if (!RmiIIOPUtils.isValidRmiIDLPrimitiveType(fieldType) && !EjbUtils.isValidSerializableType(fieldType)) {
// it must be a reference to a bean's home or local interface
if (!isValidInterface(fieldType, bundle.getEjbs(), MethodDescriptor.EJB_REMOTE, result)) {
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.addErrorDetails(smh.getLocalString(getClass().getName() + ".failed", "Error : Invalid type assigned for container managed field [ {0} ] in bean [ {1} ]", new Object[] { ((Descriptor) persistentField).getName(), entity.getName() }));
return false;
}
if (!isValidInterface(fieldType, bundle.getEjbs(), MethodDescriptor.EJB_LOCAL, result)) {
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.addErrorDetails(smh.getLocalString(getClass().getName() + ".failed", "Error : Invalid type assigned for container managed field [ {0} ] in bean [ {1} ]", new Object[] { ((Descriptor) persistentField).getName(), entity.getName() }));
return false;
}
}
result.addGoodDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.addGoodDetails(smh.getLocalString(getClass().getName() + ".passed", "Valid type assigned for container managed field [ {0} ] in bean [ {1} ]", new Object[] { ((Descriptor) persistentField).getName(), entity.getName() }));
run = true;
return run;
} else {
result.addErrorDetails(smh.getLocalString("tests.componentNameConstructor", "For [ {0} ]", new Object[] { compName.toString() }));
result.addErrorDetails(smh.getLocalString("com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.CMPTest.isAccessorDeclared.failed2", "Error : Cannot find accessor [ {0} ] method for [ {1} ] field ", new Object[] { getMethodName, persistentField.getName() }));
}
return false;
}
use of org.glassfish.deployment.common.Descriptor in project Payara by payara.
the class CmpFieldTest method check.
/**
* Container-managed persistent fields test, iterates over all declared
* cmp fields and invoke the runIndividualCmpFieldTest nethod
*
* @param descriptor the Enterprise Java Bean deployment descriptor
*
* @return <code>Result</code> the results for this assertion
*/
public Result check(EjbCMPEntityDescriptor descriptor) {
Result result = getInitializedResult();
ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
Class c = loadEjbClass(descriptor, result);
if (c != null) {
Descriptor persistentField;
boolean oneFailed = false;
Set persistentFields = descriptor.getPersistenceDescriptor().getCMPFields();
Iterator iterator = persistentFields.iterator();
if (iterator.hasNext()) {
while (iterator.hasNext()) {
persistentField = (Descriptor) iterator.next();
boolean status = runIndividualCmpFieldTest(descriptor, persistentField, c, result);
if (!status)
oneFailed = true;
}
if (oneFailed) {
result.setStatus(Result.FAILED);
} else {
result.setStatus(Result.PASSED);
}
} else {
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.CmpFieldTest.notApplicable", "Not Applicable : The EJB has no CMP fields declared", new Object[] {}));
}
}
return result;
}
use of org.glassfish.deployment.common.Descriptor in project Payara by payara.
the class ApplicationValidator method validateResourceDescriptor.
/**
* Method to read complete application and all defined descriptor for given app. Method is used to identify
* scope and validation for all defined jndi names at different namespace.
* @param application
* @return
*/
public boolean validateResourceDescriptor(Application application) {
/*
* Below final String is the prefix which I am appending with each module
* name to avoid duplicates. In ejblite case application name, ejb bundle
* name and web bundle name always returns the same name if not specified.
* So my validation fails so to avoid the same appending difference prefix
* with each module name.
*
* For two ejb-jar.xml in two different modules as part of the ear, they
* must have unique module names (this is per spec requirement), so the
* module scoped resources just needs to be unique within their modules. So
* in that case all bundle name must be unique so appending extra string is
* not fail anything.
*
* It is used for internal reference only.
*/
final String APP_LEVEL = "AppLevel:";
final String EJBBUNDLE_LEVEL = "EBDLevel:";
final String EJB_LEVEL = "EJBLevel:";
final String APPCLIENTBUNDLE_LEVEL = "ACDevel:";
final String APPCLIENT_LEVEL = "ACLevel:";
final String WEBBUNDLE_LEVEL = "WBDLevel:";
Set<EnvironmentProperty> environmentProperties = application.getEnvironmentProperties();
for (EnvironmentProperty environmentProperty : environmentProperties) {
String jndiName = environmentProperty.getName();
if (environmentProperty.hasLookupName()) {
jndiName = environmentProperty.getLookupName();
} else if (environmentProperty.getMappedName().length() > 0) {
jndiName = environmentProperty.getMappedName();
}
if (jndiName.startsWith(JNDI_COMP) || jndiName.startsWith(JNDI_MODULE)) {
inValidJndiName = jndiName;
return false;
}
}
// Reads resource definition descriptor at application level
CommonResourceBundleDescriptor commonResourceBundleDescriptor = (CommonResourceBundleDescriptor) application;
Vector appLevel = new Vector();
if (commonResourceBundleDescriptor != null) {
Set<ResourceDescriptor> resourceDescriptors = commonResourceBundleDescriptor.getAllResourcesDescriptors();
if (findExistingDescriptors(resourceDescriptors, APP_LEVEL + commonResourceBundleDescriptor.getName())) {
return false;
}
appLevel.add(APP_LEVEL + commonResourceBundleDescriptor.getName());
validNameSpaceDetails.put(APP_KEYS, appLevel);
}
// Reads resource definition descriptor at application-client level
Set<ApplicationClientDescriptor> appClientDescs = application.getBundleDescriptors(ApplicationClientDescriptor.class);
Vector appClientLevel = new Vector();
for (ApplicationClientDescriptor acd : appClientDescs) {
Set<ResourceDescriptor> resourceDescriptors = acd.getAllResourcesDescriptors(ApplicationClientDescriptor.class);
if (findExistingDescriptors(resourceDescriptors, APPCLIENTBUNDLE_LEVEL + acd.getName())) {
return false;
}
appClientLevel.add(APPCLIENTBUNDLE_LEVEL + acd.getName());
}
validNameSpaceDetails.put(APPCLIENT_KEYS, appClientLevel);
// Reads resource definition descriptor at connector level
Set<ConnectorDescriptor> connectorDescs = application.getBundleDescriptors(ConnectorDescriptor.class);
Vector cdLevel = new Vector();
for (ConnectorDescriptor cd : connectorDescs) {
Set<ResourceDescriptor> resourceDescriptors = cd.getAllResourcesDescriptors(ApplicationClientDescriptor.class);
if (findExistingDescriptors(resourceDescriptors, APPCLIENT_LEVEL + cd.getName())) {
return false;
}
cdLevel.add(APPCLIENT_LEVEL + cd.getName());
}
validNameSpaceDetails.put(CONNECTOR_KEYS, cdLevel);
// Reads resource definition descriptor at ejb-bundle level
Set<EjbBundleDescriptor> ejbBundleDescs = application.getBundleDescriptors(EjbBundleDescriptor.class);
Vector ebdLevel = new Vector();
Vector edLevel = new Vector();
for (EjbBundleDescriptor ebd : ejbBundleDescs) {
Set<ResourceDescriptor> resourceDescriptors = ebd.getAllResourcesDescriptors();
if (findExistingDescriptors(resourceDescriptors, EJBBUNDLE_LEVEL + ebd.getName())) {
return false;
}
ebdLevel.add(EJBBUNDLE_LEVEL + ebd.getName());
// Reads resource definition descriptor at ejb level
Set<EjbDescriptor> ejbDescriptors = (Set<EjbDescriptor>) ebd.getEjbs();
for (Iterator itr = ejbDescriptors.iterator(); itr.hasNext(); ) {
EjbDescriptor ejbDescriptor = (EjbDescriptor) itr.next();
resourceDescriptors = ejbDescriptor.getAllResourcesDescriptors();
if (findExistingDescriptors(resourceDescriptors, EJB_LEVEL + ebd.getName() + "#" + ejbDescriptor.getName())) {
return false;
}
edLevel.add(EJB_LEVEL + ebd.getName() + "#" + ejbDescriptor.getName());
}
}
validNameSpaceDetails.put(EJBBUNDLE_KEYS, ebdLevel);
validNameSpaceDetails.put(EJB_KEYS, edLevel);
// Reads resource definition descriptor at web-bundle level
Set<WebBundleDescriptor> webBundleDescs = application.getBundleDescriptors(WebBundleDescriptor.class);
Vector wbdLevel = new Vector();
for (WebBundleDescriptor wbd : webBundleDescs) {
Set<ResourceDescriptor> resourceDescriptors = wbd.getAllResourcesDescriptors();
if (findExistingDescriptors(resourceDescriptors, WEBBUNDLE_LEVEL + wbd.getName())) {
return false;
}
wbdLevel.add(WEBBUNDLE_LEVEL + wbd.getName());
}
validNameSpaceDetails.put(WEBBUNDLE_KEYS, wbdLevel);
for (CommonResourceValidator rv : allResourceDescriptors.values()) {
Descriptor desc = rv.getDescriptor();
if (desc instanceof AbstractConnectorResourceDescriptor) {
AbstractConnectorResourceDescriptor acrd = (AbstractConnectorResourceDescriptor) desc;
if (acrd.getResourceAdapter() == null) {
continue;
}
int poundIndex = acrd.getResourceAdapter().indexOf("#");
if (poundIndex == 0) {
// the resource adapter name is of the format "#xxx", it is an
// embedded resource adapter
acrd.setResourceAdapter(application.getName() + acrd.getResourceAdapter());
} else if (poundIndex < 0) {
// the resource adapter name do not contains # symbol, it is a
// standalone resource adapter
} else if (poundIndex > 0) {
// the resource adapter name is of the format "xx#xxx", this is an
// invalid name
deplLogger.log(Level.SEVERE, RESOURCE_ADAPTER_NAME_INVALID, new Object[] { application.getAppName(), acrd.getName(), acrd.getResourceAdapter() });
return false;
}
}
}
// or not
if (allUniqueResource) {
return compareDescriptors();
}
return allUniqueResource;
}
Aggregations