use of org.apache.openejb.jee.EntityBean$JAXB.readEntityBean in project tomee by apache.
the class InitEjbDeployments method deploy.
private EjbModule deploy(final EjbModule ejbModule, final Map<String, String> contextData, final Set<String> abstractSchemaNames) throws OpenEJBException {
contextData.put("moduleId", ejbModule.getModuleId());
contextData.put("moduleUri", ejbModule.getModuleUri().toString());
final OpenejbJar openejbJar;
if (ejbModule.getOpenejbJar() != null) {
openejbJar = ejbModule.getOpenejbJar();
} else {
openejbJar = new OpenejbJar();
ejbModule.setOpenejbJar(openejbJar);
}
StringTemplate deploymentIdTemplate = this.deploymentIdTemplate;
if (openejbJar.getProperties().containsKey(DEPLOYMENT_ID_FORMAT)) {
final String format = openejbJar.getProperties().getProperty(DEPLOYMENT_ID_FORMAT);
logger.info("Using " + DEPLOYMENT_ID_FORMAT + " '" + format + "'");
deploymentIdTemplate = new StringTemplate(format);
}
for (final EnterpriseBean bean : ejbModule.getEjbJar().getEnterpriseBeans()) {
StringTemplate template = deploymentIdTemplate;
final org.apache.openejb.api.EjbDeployment annotation = getEjbDeploymentAnnotation(ejbModule, bean);
EjbDeployment ejbDeployment = openejbJar.getDeploymentsByEjbName().get(bean.getEjbName());
if (ejbDeployment == null) {
ejbDeployment = new EjbDeployment();
ejbDeployment.setEjbName(bean.getEjbName());
if (annotation != null && isDefined(annotation.id())) {
template = new StringTemplate(annotation.id());
ejbDeployment.setDeploymentId(formatDeploymentId(bean, contextData, template));
} else {
ejbDeployment.setDeploymentId(formatDeploymentId(bean, contextData, template));
if (!(bean instanceof ManagedBean) || !((ManagedBean) bean).isHidden()) {
logger.info("Auto-deploying ejb " + bean.getEjbName() + ": EjbDeployment(deployment-id=" + ejbDeployment.getDeploymentId() + ")");
}
}
openejbJar.getEjbDeployment().add(ejbDeployment);
} else if (ejbDeployment.getDeploymentId() == null) {
if (annotation != null && isDefined(annotation.id())) {
template = new StringTemplate(annotation.id());
ejbDeployment.setDeploymentId(formatDeploymentId(bean, contextData, template));
} else {
ejbDeployment.setDeploymentId(formatDeploymentId(bean, contextData, template));
logger.info("Auto-assigning deployment-id for ejb " + bean.getEjbName() + ": EjbDeployment(deployment-id=" + ejbDeployment.getDeploymentId() + ")");
}
}
if (ejbDeployment.getContainerId() == null && annotation != null && isDefined(annotation.container())) {
ejbDeployment.setContainerId(annotation.container());
}
if (isCmpEntity(bean)) {
final EntityBean entity = (EntityBean) bean;
if (entity.getAbstractSchemaName() == null) {
String abstractSchemaName = bean.getEjbName().trim().replaceAll("[ \\t\\n\\r-]+", "_");
// The AbstractSchemaName must be unique, we should check that it is
if (abstractSchemaNames.contains(abstractSchemaName)) {
int i = 2;
while (abstractSchemaNames.contains(abstractSchemaName + i)) {
i++;
}
abstractSchemaName = abstractSchemaName + i;
}
abstractSchemaNames.add(abstractSchemaName);
entity.setAbstractSchemaName(abstractSchemaName);
}
}
}
return ejbModule;
}
use of org.apache.openejb.jee.EntityBean$JAXB.readEntityBean in project tomee by apache.
the class EjbJarInfoBuilder method buildInfo.
public EjbJarInfo buildInfo(final EjbModule jar) throws OpenEJBException {
deploymentIds.clear();
securityRoles.clear();
final Map<String, EjbDeployment> ejbds = jar.getOpenejbJar().getDeploymentsByEjbName();
final int beansDeployed = jar.getOpenejbJar().getEjbDeploymentCount();
final int beansInEjbJar = jar.getEjbJar().getEnterpriseBeans().length;
if (beansInEjbJar != beansDeployed) {
for (final EnterpriseBean bean : jar.getEjbJar().getEnterpriseBeans()) {
if (!ejbds.containsKey(bean.getEjbName())) {
ConfigUtils.logger.warning("conf.0018", bean.getEjbName(), jar.getJarLocation());
}
}
final String message = messages.format("conf.0008", jar.getJarLocation(), String.valueOf(beansInEjbJar), String.valueOf(beansDeployed));
logger.warning(message);
throw new OpenEJBException(message);
}
final Map<String, EnterpriseBeanInfo> infos = new HashMap<>();
final Map<String, EnterpriseBean> items = new HashMap<>();
final EjbJarInfo ejbJar = new EjbJarInfo();
ejbJar.path = jar.getJarLocation();
ejbJar.moduleUri = jar.getModuleUri();
ejbJar.moduleId = jar.getModuleId();
if (jar.getEjbJar() != null && jar.getEjbJar().getModuleName() != null) {
ejbJar.moduleName = jar.getEjbJar().getModuleName();
} else {
ejbJar.moduleName = jar.getModuleId();
}
ejbJar.watchedResources.addAll(jar.getWatchedResources());
ejbJar.properties.putAll(jar.getProperties());
ejbJar.properties.putAll(jar.getOpenejbJar().getProperties());
for (final EnterpriseBean bean : jar.getEjbJar().getEnterpriseBeans()) {
final EnterpriseBeanInfo beanInfo;
if (bean instanceof SessionBean) {
beanInfo = initSessionBean((SessionBean) bean, ejbJar, ejbds);
} else if (bean instanceof EntityBean) {
beanInfo = initEntityBean((EntityBean) bean, ejbds);
} else if (bean instanceof MessageDrivenBean) {
beanInfo = initMessageBean((MessageDrivenBean) bean, ejbds);
} else {
throw new OpenEJBException("Unknown bean type: " + bean.getClass().getName());
}
ejbJar.enterpriseBeans.add(beanInfo);
if (deploymentIds.contains(beanInfo.ejbDeploymentId)) {
final String message = messages.format("conf.0100", beanInfo.ejbDeploymentId, jar.getJarLocation(), beanInfo.ejbName);
logger.warning(message);
throw new OpenEJBException(message);
}
deploymentIds.add(beanInfo.ejbDeploymentId);
beanInfo.codebase = jar.getJarLocation();
infos.put(beanInfo.ejbName, beanInfo);
items.put(beanInfo.ejbName, bean);
if (bean.getSecurityIdentity() != null) {
beanInfo.runAs = bean.getSecurityIdentity().getRunAs();
final EjbDeployment deployment = ejbds.get(beanInfo.ejbName);
if (deployment != null) {
for (final RoleMapping mapping : deployment.getRoleMapping()) {
if (mapping.getRoleName().equals(beanInfo.runAs)) {
beanInfo.runAsUser = mapping.getPrincipalName();
break;
}
}
}
}
initJndiNames(ejbds, beanInfo);
}
if (jar.getEjbJar().getAssemblyDescriptor() != null) {
initInterceptors(jar, ejbJar);
initSecurityRoles(jar, ejbJar);
initMethodPermissions(jar, ejbds, ejbJar);
initExcludesList(jar, ejbds, ejbJar);
initMethodTransactions(jar, ejbds, ejbJar);
initMethodConcurrency(jar, ejbds, ejbJar);
initApplicationExceptions(jar, ejbJar);
for (final EnterpriseBeanInfo bean : ejbJar.enterpriseBeans) {
resolveRoleLinks(bean, items.get(bean.ejbName));
}
}
if (jar.getEjbJar().getRelationships() != null) {
initRelationships(jar, infos);
}
final Beans beans = jar.getBeans();
if (beans != null) {
ejbJar.beans = new BeansInfo();
ejbJar.beans.version = beans.getVersion();
ejbJar.beans.discoveryMode = beans.getBeanDiscoveryMode();
if (beans.getScan() != null) {
for (final Beans.Scan.Exclude exclude : beans.getScan().getExclude()) {
final ExclusionInfo exclusionInfo = new ExclusionInfo();
for (final Object config : exclude.getIfClassAvailableOrIfClassNotAvailableOrIfSystemProperty()) {
if (Beans.Scan.Exclude.IfAvailableClassCondition.class.isInstance(config)) {
exclusionInfo.availableClasses.add(Beans.Scan.Exclude.ClassCondition.class.cast(config).getName());
} else if (Beans.Scan.Exclude.IfNotAvailableClassCondition.class.isInstance(config)) {
exclusionInfo.notAvailableClasses.add(Beans.Scan.Exclude.ClassCondition.class.cast(config).getName());
} else if (Beans.Scan.Exclude.IfSystemProperty.class.isInstance(config)) {
final Beans.Scan.Exclude.IfSystemProperty systemProperty = Beans.Scan.Exclude.IfSystemProperty.class.cast(config);
if (systemProperty.getValue() == null) {
exclusionInfo.systemPropertiesPresence.add(systemProperty.getName());
} else {
exclusionInfo.systemProperties.put(systemProperty.getName(), systemProperty.getValue());
}
} else {
throw new IllegalArgumentException("Not supported: " + config);
}
}
final BeansInfo.ExclusionEntryInfo exclusionEntryInfo = new BeansInfo.ExclusionEntryInfo();
exclusionEntryInfo.name = exclude.getName();
exclusionEntryInfo.exclusion = exclusionInfo;
ejbJar.beans.excludes.add(exclusionEntryInfo);
}
}
ejbJar.beans.duplicatedAlternativeClasses.addAll(beans.getDuplicatedAlternatives().getClasses());
ejbJar.beans.duplicatedAlternativeStereotypes.addAll(beans.getDuplicatedAlternatives().getStereotypes());
ejbJar.beans.duplicatedInterceptors.addAll(beans.getDuplicatedInterceptors());
ejbJar.beans.duplicatedDecorators.addAll(beans.getDuplicatedDecorators());
ejbJar.beans.startupClasses.addAll(beans.getStartupBeans());
final Map<URL, String> discoveryModeByUrl = new HashMap<>();
final CompositeBeans composite;
final boolean isComposite = CompositeBeans.class.isInstance(beans);
if (isComposite) {
composite = CompositeBeans.class.cast(beans);
discoveryModeByUrl.putAll(composite.getDiscoveryByUrl());
} else {
composite = null;
URL key = DEFAULT_BEANS_XML_KEY;
if (beans.getUri() != null) {
try {
key = new URL(beans.getUri());
} catch (final MalformedURLException e) {
// no-op
}
}
discoveryModeByUrl.put(key, beans.getBeanDiscoveryMode());
}
for (final Map.Entry<URL, List<String>> next : beans.getManagedClasses().entrySet()) {
final URL key = next.getKey();
final BeansInfo.BDAInfo bdaInfo = new BeansInfo.BDAInfo();
bdaInfo.discoveryMode = discoveryModeByUrl.get(key);
merge(composite, key == null ? DEFAULT_BEANS_XML_KEY : key, bdaInfo, next.getValue());
ejbJar.beans.bdas.add(bdaInfo);
}
for (final Map.Entry<URL, List<String>> next : beans.getNotManagedClasses().entrySet()) {
final URL key = next.getKey();
final BeansInfo.BDAInfo bdaInfo = new BeansInfo.BDAInfo();
bdaInfo.discoveryMode = BeanArchiveService.BeanDiscoveryMode.ANNOTATED.name();
merge(composite, key == null ? DEFAULT_BEANS_XML_KEY : key, bdaInfo, next.getValue());
ejbJar.beans.noDescriptorBdas.add(bdaInfo);
}
// app composer case mainly,we should really not use it anywhere else
if (composite == null && ejbJar.beans.bdas.size() == 1) {
final BeansInfo.BDAInfo bda = ejbJar.beans.bdas.iterator().next();
bda.alternatives.addAll(beans.getAlternativeClasses());
bda.interceptors.addAll(beans.getInterceptors());
bda.decorators.addAll(beans.getDecorators());
bda.stereotypeAlternatives.addAll(beans.getAlternativeStereotypes());
}
}
return ejbJar;
}
use of org.apache.openejb.jee.EntityBean$JAXB.readEntityBean in project tomee by apache.
the class SunConversion method mergeEntityMappings.
private void mergeEntityMappings(final Map<String, EntityData> entities, final String moduleId, final EjbJar ejbJar, final OpenejbJar openejbJar, final SunEjbJar sunEjbJar) {
if (openejbJar == null) {
return;
}
if (sunEjbJar == null) {
return;
}
if (sunEjbJar.getEnterpriseBeans() == null) {
return;
}
for (final Ejb ejb : sunEjbJar.getEnterpriseBeans().getEjb()) {
final Cmp cmp = ejb.getCmp();
if (cmp == null) {
// skip non cmp beans
continue;
}
// skip all non-CMP beans
final EnterpriseBean enterpriseBean = ejbJar.getEnterpriseBean(ejb.getEjbName());
if (!(enterpriseBean instanceof EntityBean) || ((EntityBean) enterpriseBean).getPersistenceType() != PersistenceType.CONTAINER) {
continue;
}
final EntityBean bean = (EntityBean) enterpriseBean;
final EntityData entityData = entities.get(moduleId + "#" + ejb.getEjbName());
if (entityData == null) {
// todo warn no such ejb in the ejb-jar.xml
continue;
}
final Collection<String> cmpFields = new ArrayList<>(bean.getCmpField().size());
for (final CmpField cmpField : bean.getCmpField()) {
cmpFields.add(cmpField.getFieldName());
}
final OneOneFinders oneOneFinders = cmp.getOneOneFinders();
if (oneOneFinders != null) {
for (final Finder finder : oneOneFinders.getFinder()) {
final List<List<String>> params = parseQueryParamters(finder.getQueryParams());
final String queryFilter = finder.getQueryFilter();
final String ejbQl = convertToEjbQl(entityData.entity.getName(), cmpFields, finder.getQueryParams(), queryFilter);
final NamedQuery namedQuery = new NamedQuery();
final StringBuilder name = new StringBuilder();
name.append(entityData.entity.getName()).append(".").append(finder.getMethodName());
if (!params.isEmpty()) {
name.append('(');
boolean first = true;
for (final List<String> methodParam : params) {
if (!first) {
name.append(",");
}
name.append(methodParam.get(0));
first = false;
}
name.append(')');
}
namedQuery.setName(name.toString());
namedQuery.setQuery(ejbQl);
entityData.entity.getNamedQuery().add(namedQuery);
}
}
}
}
use of org.apache.openejb.jee.EntityBean$JAXB.readEntityBean in project tomee by apache.
the class EjbJar$JAXB method _write.
public static final void _write(final XoXMLStreamWriter writer, final EjbJar ejbJar, RuntimeContext context) throws Exception {
if (ejbJar == null) {
writer.writeXsiNil();
return;
}
if (context == null) {
context = new RuntimeContext();
}
final String prefix = writer.getUniquePrefix("http://java.sun.com/xml/ns/javaee");
if (EjbJar.class != ejbJar.getClass()) {
context.unexpectedSubclass(writer, ejbJar, EjbJar.class);
return;
}
context.beforeMarshal(ejbJar, LifecycleCallback.NONE);
// ATTRIBUTE: id
final String idRaw = ejbJar.id;
if (idRaw != null) {
String id = null;
try {
id = Adapters.collapsedStringAdapterAdapter.marshal(idRaw);
} catch (final Exception e) {
context.xmlAdapterError(ejbJar, "id", CollapsedStringAdapter.class, String.class, String.class, e);
}
writer.writeAttribute("", "", "id", id);
}
// ATTRIBUTE: metadataComplete
final Boolean metadataComplete = ejbJar.metadataComplete;
if (metadataComplete != null) {
writer.writeAttribute("", "", "metadata-complete", Boolean.toString(metadataComplete));
}
// ATTRIBUTE: version
final String versionRaw = ejbJar.version;
if (versionRaw != null) {
String version = null;
try {
version = Adapters.collapsedStringAdapterAdapter.marshal(versionRaw);
} catch (final Exception e) {
context.xmlAdapterError(ejbJar, "version", CollapsedStringAdapter.class, String.class, String.class, e);
}
writer.writeAttribute("", "", "version", version);
}
// ELEMENT: moduleName
final String moduleNameRaw = ejbJar.moduleName;
String moduleName = null;
try {
moduleName = Adapters.collapsedStringAdapterAdapter.marshal(moduleNameRaw);
} catch (final Exception e) {
context.xmlAdapterError(ejbJar, "moduleName", CollapsedStringAdapter.class, String.class, String.class, e);
}
if (moduleName != null) {
writer.writeStartElement(prefix, "module-name", "http://java.sun.com/xml/ns/javaee");
writer.writeCharacters(moduleName);
writer.writeEndElement();
}
// ELEMENT: descriptions
Text[] descriptions = null;
try {
descriptions = ejbJar.getDescriptions();
} catch (final Exception e) {
context.getterError(ejbJar, "descriptions", EjbJar.class, "getDescriptions", e);
}
if (descriptions != null) {
for (final Text descriptionsItem : descriptions) {
if (descriptionsItem != null) {
writer.writeStartElement(prefix, "description", "http://java.sun.com/xml/ns/javaee");
writeText(writer, descriptionsItem, context);
writer.writeEndElement();
} else {
context.unexpectedNullValue(ejbJar, "descriptions");
}
}
}
// ELEMENT: displayNames
Text[] displayNames = null;
try {
displayNames = ejbJar.getDisplayNames();
} catch (final Exception e) {
context.getterError(ejbJar, "displayNames", EjbJar.class, "getDisplayNames", e);
}
if (displayNames != null) {
for (final Text displayNamesItem : displayNames) {
if (displayNamesItem != null) {
writer.writeStartElement(prefix, "display-name", "http://java.sun.com/xml/ns/javaee");
writeText(writer, displayNamesItem, context);
writer.writeEndElement();
} else {
context.unexpectedNullValue(ejbJar, "displayNames");
}
}
}
// ELEMENT: icon
final LocalCollection<Icon> icon = ejbJar.icon;
if (icon != null) {
for (final Icon iconItem : icon) {
if (iconItem != null) {
writer.writeStartElement(prefix, "icon", "http://java.sun.com/xml/ns/javaee");
writeIcon(writer, iconItem, context);
writer.writeEndElement();
} else {
context.unexpectedNullValue(ejbJar, "icon");
}
}
}
// ELEMENT: enterpriseBeans
EnterpriseBean[] enterpriseBeans = null;
try {
enterpriseBeans = ejbJar.getEnterpriseBeans();
} catch (final Exception e) {
context.getterError(ejbJar, "enterpriseBeans", EjbJar.class, "getEnterpriseBeans", e);
}
writer.writeStartElement(prefix, "enterprise-beans", "http://java.sun.com/xml/ns/javaee");
if (enterpriseBeans != null) {
for (final EnterpriseBean enterpriseBeansItem : enterpriseBeans) {
if (enterpriseBeansItem instanceof org.apache.openejb.jee.EntityBean) {
final org.apache.openejb.jee.EntityBean EntityBean = ((org.apache.openejb.jee.EntityBean) enterpriseBeansItem);
writer.writeStartElement(prefix, "entity", "http://java.sun.com/xml/ns/javaee");
writeEntityBean(writer, EntityBean, context);
writer.writeEndElement();
} else if (enterpriseBeansItem instanceof org.apache.openejb.jee.SessionBean) {
final org.apache.openejb.jee.SessionBean SessionBean = ((org.apache.openejb.jee.SessionBean) enterpriseBeansItem);
writer.writeStartElement(prefix, "session", "http://java.sun.com/xml/ns/javaee");
writeSessionBean(writer, SessionBean, context);
writer.writeEndElement();
} else if (enterpriseBeansItem instanceof org.apache.openejb.jee.MessageDrivenBean) {
final org.apache.openejb.jee.MessageDrivenBean MessageDrivenBean = ((org.apache.openejb.jee.MessageDrivenBean) enterpriseBeansItem);
writer.writeStartElement(prefix, "message-driven", "http://java.sun.com/xml/ns/javaee");
writeMessageDrivenBean(writer, MessageDrivenBean, context);
writer.writeEndElement();
} else if (enterpriseBeansItem == null) {
context.unexpectedNullValue(ejbJar, "enterpriseBeans");
} else {
context.unexpectedElementType(writer, ejbJar, "enterpriseBeans", enterpriseBeansItem, org.apache.openejb.jee.EntityBean.class, org.apache.openejb.jee.SessionBean.class, org.apache.openejb.jee.MessageDrivenBean.class);
}
}
}
writer.writeEndElement();
// ELEMENT: interceptors
final Interceptors interceptors = ejbJar.interceptors;
if (interceptors != null) {
writer.writeStartElement(prefix, "interceptors", "http://java.sun.com/xml/ns/javaee");
writeInterceptors(writer, interceptors, context);
writer.writeEndElement();
}
// ELEMENT: relationships
final Relationships relationships = ejbJar.relationships;
if (relationships != null) {
writer.writeStartElement(prefix, "relationships", "http://java.sun.com/xml/ns/javaee");
writeRelationships(writer, relationships, context);
writer.writeEndElement();
}
// ELEMENT: assemblyDescriptor
final AssemblyDescriptor assemblyDescriptor = ejbJar.assemblyDescriptor;
if (assemblyDescriptor != null) {
writer.writeStartElement(prefix, "assembly-descriptor", "http://java.sun.com/xml/ns/javaee");
writeAssemblyDescriptor(writer, assemblyDescriptor, context);
writer.writeEndElement();
}
// ELEMENT: ejbClientJar
final String ejbClientJarRaw = ejbJar.ejbClientJar;
String ejbClientJar = null;
try {
ejbClientJar = Adapters.collapsedStringAdapterAdapter.marshal(ejbClientJarRaw);
} catch (final Exception e) {
context.xmlAdapterError(ejbJar, "ejbClientJar", CollapsedStringAdapter.class, String.class, String.class, e);
}
if (ejbClientJar != null) {
writer.writeStartElement(prefix, "ejb-client-jar", "http://java.sun.com/xml/ns/javaee");
writer.writeCharacters(ejbClientJar);
writer.writeEndElement();
}
context.afterMarshal(ejbJar, LifecycleCallback.NONE);
}
Aggregations