Search in sources :

Example 16 with EjbDeployment

use of org.apache.openejb.jee.oejb3.EjbDeployment in project tomee by apache.

the class AutoConfig method resolveDestinationLinks.

/**
 * Set resource id in all message-destination-refs and MDBs that are using message destination links.
 */
private void resolveDestinationLinks(final AppModule appModule) throws OpenEJBException {
    // build up a link resolver
    final LinkResolver<MessageDestination> destinationResolver = new LinkResolver<MessageDestination>();
    for (final EjbModule ejbModule : appModule.getEjbModules()) {
        final AssemblyDescriptor assembly = ejbModule.getEjbJar().getAssemblyDescriptor();
        if (assembly != null) {
            for (final MessageDestination destination : assembly.getMessageDestination()) {
                destinationResolver.add(ejbModule.getModuleUri(), destination.getMessageDestinationName(), destination);
            }
        }
    }
    for (final ClientModule clientModule : appModule.getClientModules()) {
        for (final MessageDestination destination : clientModule.getApplicationClient().getMessageDestination()) {
            destinationResolver.add(appModule.getModuleUri(), destination.getMessageDestinationName(), destination);
        }
    }
    for (final WebModule webModule : appModule.getWebModules()) {
        for (final MessageDestination destination : webModule.getWebApp().getMessageDestination()) {
            destinationResolver.add(appModule.getModuleUri(), destination.getMessageDestinationName(), destination);
        }
    }
    // remember the type of each destination so we can use it to fillin MDBs that don't declare destination type
    final Map<MessageDestination, String> destinationTypes = new HashMap<MessageDestination, String>();
    // if MessageDestination does not have a mapped name assigned, give it the destination from the MDB
    for (final EjbModule ejbModule : appModule.getEjbModules()) {
        final AssemblyDescriptor assembly = ejbModule.getEjbJar().getAssemblyDescriptor();
        if (assembly == null) {
            continue;
        }
        final URI moduleUri = ejbModule.getModuleUri();
        final OpenejbJar openejbJar = ejbModule.getOpenejbJar();
        for (final EnterpriseBean bean : ejbModule.getEjbJar().getEnterpriseBeans()) {
            // MDB destination is deploymentId if none set
            if (bean instanceof MessageDrivenBean) {
                final MessageDrivenBean mdb = (MessageDrivenBean) bean;
                final EjbDeployment ejbDeployment = openejbJar.getDeploymentsByEjbName().get(bean.getEjbName());
                if (ejbDeployment == null) {
                    throw new OpenEJBException("No ejb deployment found for ejb " + bean.getEjbName());
                }
                // skip destination refs without a destination link
                final String link = mdb.getMessageDestinationLink();
                if (link == null || link.length() == 0) {
                    continue;
                }
                // resolve the destination... if we don't find one it is a configuration bug
                final MessageDestination destination = destinationResolver.resolveLink(link, moduleUri);
                if (destination == null) {
                    throw new OpenEJBException("Message destination " + link + " for message driven bean " + mdb.getEjbName() + " not found");
                }
                // get the destinationId is the mapped name
                String destinationId = destination.getMappedName();
                if (destinationId == null) {
                    // if we don't have a mapped name use the destination of the mdb
                    final Properties properties = mdb.getActivationConfig().toProperties();
                    destinationId = properties.getProperty("destination");
                    destination.setMappedName(destinationId);
                }
                if (mdb.getMessageDestinationType() != null && !destinationTypes.containsKey(destination)) {
                    destinationTypes.put(destination, mdb.getMessageDestinationType());
                }
                // destination identifier
                ResourceLink resourceLink = ejbDeployment.getResourceLink("openejb/destination");
                if (resourceLink == null) {
                    resourceLink = new ResourceLink();
                    resourceLink.setResRefName("openejb/destination");
                    ejbDeployment.addResourceLink(resourceLink);
                }
                resourceLink.setResId(destinationId);
            }
        }
    }
    // resolve all message destination refs with links and assign a ref id to the reference
    for (final EjbModule ejbModule : appModule.getEjbModules()) {
        final AssemblyDescriptor assembly = ejbModule.getEjbJar().getAssemblyDescriptor();
        if (assembly == null) {
            continue;
        }
        final URI moduleUri = ejbModule.getModuleUri();
        final OpenejbJar openejbJar = ejbModule.getOpenejbJar();
        for (final EnterpriseBean bean : ejbModule.getEjbJar().getEnterpriseBeans()) {
            final EjbDeployment ejbDeployment = openejbJar.getDeploymentsByEjbName().get(bean.getEjbName());
            if (ejbDeployment == null) {
                throw new OpenEJBException("No ejb deployment found for ejb " + bean.getEjbName());
            }
            for (final MessageDestinationRef ref : bean.getMessageDestinationRef()) {
                // skip destination refs with a resource link already assigned
                if (ref.getMappedName() == null && ejbDeployment.getResourceLink(ref.getName()) == null) {
                    final String destinationId = resolveDestinationId(ref, moduleUri, destinationResolver, destinationTypes);
                    if (destinationId != null) {
                        // build the link and add it
                        final ResourceLink resourceLink = new ResourceLink();
                        resourceLink.setResId(destinationId);
                        resourceLink.setResRefName(ref.getName());
                        ejbDeployment.addResourceLink(resourceLink);
                    }
                }
            }
        }
    }
    for (final ClientModule clientModule : appModule.getClientModules()) {
        final URI moduleUri = clientModule.getModuleUri();
        for (final MessageDestinationRef ref : clientModule.getApplicationClient().getMessageDestinationRef()) {
            final String destinationId = resolveDestinationId(ref, moduleUri, destinationResolver, destinationTypes);
            if (destinationId != null) {
                // for client modules we put the destinationId in the mapped name
                ref.setMappedName(destinationId);
            }
        }
    }
    for (final WebModule webModule : appModule.getWebModules()) {
        final URI moduleUri = URLs.uri(webModule.getModuleId());
        for (final MessageDestinationRef ref : webModule.getWebApp().getMessageDestinationRef()) {
            final String destinationId = resolveDestinationId(ref, moduleUri, destinationResolver, destinationTypes);
            if (destinationId != null) {
                // for web modules we put the destinationId in the mapped name
                ref.setMappedName(destinationId);
            }
        }
    }
    // the info from the destination (which got filled in from the references)
    for (final EjbModule ejbModule : appModule.getEjbModules()) {
        final AssemblyDescriptor assembly = ejbModule.getEjbJar().getAssemblyDescriptor();
        if (assembly == null) {
            continue;
        }
        final URI moduleUri = URLs.uri(ejbModule.getModuleId());
        final OpenejbJar openejbJar = ejbModule.getOpenejbJar();
        for (final EnterpriseBean bean : ejbModule.getEjbJar().getEnterpriseBeans()) {
            // MDB destination is deploymentId if none set
            if (bean instanceof MessageDrivenBean) {
                final MessageDrivenBean mdb = (MessageDrivenBean) bean;
                if (!isJms(mdb)) {
                    continue;
                }
                final EjbDeployment ejbDeployment = openejbJar.getDeploymentsByEjbName().get(bean.getEjbName());
                if (ejbDeployment == null) {
                    throw new OpenEJBException("No ejb deployment found for ejb " + bean.getEjbName());
                }
                // if destination type is already set in, continue
                String destinationType = mdb.getMessageDestinationType();
                if (destinationType != null) {
                    continue;
                }
                final String link = mdb.getMessageDestinationLink();
                if (link != null && link.length() != 0) {
                    // resolve the destination... if we don't find one it is a configuration bug
                    final MessageDestination destination = destinationResolver.resolveLink(link, moduleUri);
                    if (destination == null) {
                        throw new OpenEJBException("Message destination " + link + " for message driven bean " + mdb.getEjbName() + " not found");
                    }
                    destinationType = destinationTypes.get(destination);
                }
                if (destinationType == null) {
                    // couldn't determine type... we'll have to guess
                    // if destination name contains the string "queue" or "topic" we use that
                    final Properties properties = mdb.getActivationConfig().toProperties();
                    final String destination = properties.getProperty("destination").toLowerCase();
                    if (destination.contains("queue")) {
                        destinationType = Queue.class.getName();
                    } else if (destination.contains("topic")) {
                        destinationType = Topic.class.getName();
                    } else {
                        // Queue is the default
                        destinationType = Queue.class.getName();
                    }
                    logger.info("Auto-configuring a message driven bean " + ejbDeployment.getDeploymentId() + " destination " + properties.getProperty("destination") + " to be destinationType " + destinationType);
                }
                if (destinationType != null) {
                    mdb.getActivationConfig().addProperty("destinationType", destinationType);
                    mdb.setMessageDestinationType(destinationType);
                    // topics need a clientId and subscriptionName
                    if ("javax.jms.Topic".equals(destinationType)) {
                        final Properties properties = mdb.getActivationConfig().toProperties();
                        if (!properties.containsKey("clientId")) {
                            mdb.getActivationConfig().addProperty("clientId", ejbDeployment.getDeploymentId());
                        }
                        if (!properties.containsKey("subscriptionName")) {
                            mdb.getActivationConfig().addProperty("subscriptionName", ejbDeployment.getDeploymentId() + "_subscription");
                        }
                    }
                }
            }
        }
    }
}
Also used : OpenEJBException(org.apache.openejb.OpenEJBException) MessageDestination(org.apache.openejb.jee.MessageDestination) EnterpriseBean(org.apache.openejb.jee.EnterpriseBean) HashMap(java.util.HashMap) Properties(java.util.Properties) SuperProperties(org.apache.openejb.util.SuperProperties) URI(java.net.URI) MessageDestinationRef(org.apache.openejb.jee.MessageDestinationRef) OpenejbJar(org.apache.openejb.jee.oejb3.OpenejbJar) LinkResolver(org.apache.openejb.util.LinkResolver) MessageDrivenBean(org.apache.openejb.jee.MessageDrivenBean) ResourceLink(org.apache.openejb.jee.oejb3.ResourceLink) EjbDeployment(org.apache.openejb.jee.oejb3.EjbDeployment) AssemblyDescriptor(org.apache.openejb.jee.AssemblyDescriptor) Queue(javax.jms.Queue)

Example 17 with EjbDeployment

use of org.apache.openejb.jee.oejb3.EjbDeployment in project tomee by apache.

the class AutoConfig method processResourceRef.

private void processResourceRef(final ResourceRef ref, final EjbDeployment ejbDeployment, final AppResources appResources, final EjbModule ejbModule) throws OpenEJBException {
    // skip destinations with lookup name
    if (ref.getLookupName() != null) {
        return;
    }
    // skip destinations with a global jndi name
    final String mappedName = ref.getMappedName() == null ? "" : ref.getMappedName();
    if (mappedName.startsWith("jndi:")) {
        return;
    }
    final String refName = ref.getName();
    final String refType = getType(ref, ejbModule.getClassLoader());
    // skip references such as URLs which are automatically handled by the server
    if (ignoredReferenceTypes.contains(refType)) {
        final ResourceInfo resourceInfo = configFactory.getResourceInfo(refName.replace("java:", "").replace("comp/env/", ""));
        if (resourceInfo != null) {
            ref.setMappedName("jndi:" + (resourceInfo.id.startsWith("java:") ? resourceInfo.id : "openejb:Resource/" + resourceInfo.id));
        }
        return;
    }
    try {
        final Class<?> clazz = ejbModule.getClassLoader().loadClass(refType);
        if (clazz.isAnnotationPresent(ManagedBean.class)) {
            return;
        }
    } catch (final Throwable t) {
    // no-op
    }
    try {
        ResourceLink link = ejbDeployment.getResourceLink(refName);
        if (link == null) {
            String id = mappedName.length() == 0 ? ref.getName() : mappedName;
            if (id.startsWith("java:")) {
                id = id.substring("java:".length());
            }
            if (id.startsWith("/")) {
                id = id.substring(1);
            }
            try {
                final AppModule appModule = ejbModule.getAppModule();
                if (appModule != null) {
                    final String newId = findResourceId(appModule.getModuleId() + '/' + id.replace("java:", "").replaceAll("^comp/env/", ""), refType, new Properties(), appResources);
                    if (newId != null) {
                        // app scoped resources, try to find it without creating it first
                        id = getResourceId(ejbModule.getModuleId(), newId, refType, appResources);
                    } else {
                        id = getResourceId(ejbDeployment.getDeploymentId(), id, refType, appResources);
                    }
                } else {
                    id = getResourceId(ejbDeployment.getDeploymentId(), id, refType, appResources);
                }
            } catch (final OpenEJBException e) {
                // changing the message to be explicit
                throw new OpenEJBException("Can't find resource for " + ref.getOrigin() + ". (" + e.getMessage() + ")", e.getCause());
            }
            logger.info("Auto-linking resource-ref '" + refName + "' in bean " + ejbDeployment.getDeploymentId() + " to Resource(id=" + id + ")");
            link = new ResourceLink();
            link.setResId(id);
            link.setResRefName(refName);
            ejbDeployment.addResourceLink(link);
        } else {
            final String id = getResourceId(ejbDeployment.getDeploymentId(), link.getResId(), refType, appResources);
            link.setResId(id);
            link.setResRefName(refName);
        }
    } catch (final OpenEJBException ex) {
        if (!(ref instanceof ContextRef)) {
            throw ex;
        }
    }
}
Also used : ResourceInfo(org.apache.openejb.assembler.classic.ResourceInfo) OpenEJBException(org.apache.openejb.OpenEJBException) ResourceLink(org.apache.openejb.jee.oejb3.ResourceLink) PersistenceContextRef(org.apache.openejb.jee.PersistenceContextRef) Properties(java.util.Properties) SuperProperties(org.apache.openejb.util.SuperProperties)

Example 18 with EjbDeployment

use of org.apache.openejb.jee.oejb3.EjbDeployment in project tomee by apache.

the class AutoConfig method deploy.

private void deploy(final EjbModule ejbModule, final AppResources appResources) throws OpenEJBException {
    final OpenejbJar openejbJar;
    if (ejbModule.getOpenejbJar() != null) {
        openejbJar = ejbModule.getOpenejbJar();
    } else {
        openejbJar = new OpenejbJar();
        ejbModule.setOpenejbJar(openejbJar);
    }
    final Map<String, EjbDeployment> deployments = openejbJar.getDeploymentsByEjbName();
    for (final EnterpriseBean bean : ejbModule.getEjbJar().getEnterpriseBeans()) {
        final EjbDeployment ejbDeployment = deployments.get(bean.getEjbName());
        if (ejbDeployment == null) {
            throw new OpenEJBException("No ejb deployment found for ejb " + bean.getEjbName());
        }
        final String beanType = getType(bean);
        final Class<? extends ContainerInfo> containerInfoType = ConfigurationFactory.getContainerInfoType(beanType);
        logger.debug("Bean type of bean {0} is {1}", bean.getEjbName(), beanType);
        if (ejbDeployment.getContainerId() == null && !skipMdb(bean)) {
            logger.debug("Container for bean {0} is not set, looking for a suitable container", bean.getEjbName());
            String containerId = getUsableContainer(containerInfoType, bean, appResources);
            if (containerId == null) {
                logger.debug("Suitable container for bean {0} not found, creating one", bean.getEjbName());
                containerId = createContainer(containerInfoType, ejbDeployment, bean);
            }
            logger.debug("Setting container ID {0} for bean {1}", containerId, bean.getEjbName());
            ejbDeployment.setContainerId(containerId);
        }
        logger.debug("Container ID for bean {0} is {1}", bean.getEjbName(), ejbDeployment.getContainerId());
        // create the container if it doesn't exist
        final List<String> containerIds = configFactory.getContainerIds();
        final Collection<ContainerInfo> containerInfos = appResources.getContainerInfos();
        for (final ContainerInfo containerInfo : containerInfos) {
            containerIds.add(containerInfo.id);
        }
        if (!containerIds.contains(ejbDeployment.getContainerId()) && !skipMdb(bean)) {
            logger.debug("Desired container {0} not found. Containers available: {1}. Creating a new container.", ejbDeployment.getContainerId(), Join.join(", ", containerIds));
            createContainer(containerInfoType, ejbDeployment, bean);
        }
        // Resource reference
        for (final ResourceRef ref : bean.getResourceRef()) {
            processResourceRef(ref, ejbDeployment, appResources, ejbModule);
        }
        // Resource env reference
        for (final JndiReference ref : bean.getResourceEnvRef()) {
            processResourceEnvRef(ref, ejbDeployment, appResources, ejbModule.getClassLoader());
        }
        // Message destination reference
        for (final MessageDestinationRef ref : bean.getMessageDestinationRef()) {
            processResourceEnvRef(ref, ejbDeployment, appResources, ejbModule.getClassLoader());
        }
        // mdb message destination id
        if (autoCreateResources && bean instanceof MessageDrivenBean) {
            final MessageDrivenBean mdb = (MessageDrivenBean) bean;
            final ResourceLink resourceLink = ejbDeployment.getResourceLink("openejb/destination");
            if (resourceLink != null) {
                try {
                    final String destinationId = getResourceEnvId(bean.getEjbName(), resourceLink.getResId(), mdb.getMessageDestinationType(), appResources);
                    resourceLink.setResId(destinationId);
                } catch (final OpenEJBException e) {
                    // The MDB doesn't need the auto configured "openejb/destination" env entry
                    ejbDeployment.removeResourceLink("openejb/destination");
                }
            }
        }
    }
}
Also used : OpenEJBException(org.apache.openejb.OpenEJBException) EnterpriseBean(org.apache.openejb.jee.EnterpriseBean) MessageDestinationRef(org.apache.openejb.jee.MessageDestinationRef) OpenejbJar(org.apache.openejb.jee.oejb3.OpenejbJar) JndiReference(org.apache.openejb.jee.JndiReference) MessageDrivenBean(org.apache.openejb.jee.MessageDrivenBean) ResourceLink(org.apache.openejb.jee.oejb3.ResourceLink) ContainerInfo(org.apache.openejb.assembler.classic.ContainerInfo) MdbContainerInfo(org.apache.openejb.assembler.classic.MdbContainerInfo) EjbDeployment(org.apache.openejb.jee.oejb3.EjbDeployment) ResourceRef(org.apache.openejb.jee.ResourceRef)

Example 19 with EjbDeployment

use of org.apache.openejb.jee.oejb3.EjbDeployment in project tomee by apache.

the class BeanProperties method deploy.

@Override
public AppModule deploy(final AppModule appModule) throws OpenEJBException {
    final Properties base = new Properties();
    base.putAll(SystemInstance.get().getProperties());
    base.putAll(appModule.getProperties());
    for (final EjbModule module : appModule.getEjbModules()) {
        final Properties overrides = new SuperProperties().caseInsensitive(true);
        overrides.putAll(base);
        overrides.putAll(module.getProperties());
        if (module.getOpenejbJar() == null) {
            module.setOpenejbJar(new OpenejbJar());
        }
        final OpenejbJar openejbJar = module.getOpenejbJar();
        final Map<String, EjbDeployment> deploymentMap = openejbJar.getDeploymentsByEjbName();
        for (final EnterpriseBean bean : module.getEjbJar().getEnterpriseBeans()) {
            final SuperProperties properties = new SuperProperties().caseInsensitive(true);
            properties.putAll(globalProperties);
            final String additionalKey = bean.getEjbName();
            if (additionalProperties.containsKey(additionalKey)) {
                for (final Map.Entry<Object, Object> entry : additionalProperties.get(additionalKey).entrySet()) {
                    properties.put(entry.getKey().toString(), entry.getValue().toString());
                }
            }
            final EjbDeployment deployment = deploymentMap.get(bean.getEjbName());
            if (deployment != null) {
                properties.putAll(deployment.getProperties());
                deployment.getProperties().clear();
            }
            final String id = bean.getEjbName() + ".";
            for (final Map.Entry<Object, Object> entry : overrides.entrySet()) {
                final String key = entry.getKey().toString();
                if (key.startsWith(id)) {
                    final String property = key.substring(id.length());
                    if (properties.containsKey(property)) {
                        log.debug("Overriding ejb " + bean.getEjbName() + " property " + property + "=" + entry.getValue());
                    } else {
                        log.debug("Adding ejb " + bean.getEjbName() + " property " + property + "=" + entry.getValue());
                    }
                    properties.put(property, entry.getValue());
                }
            }
            if (properties.size() > 0) {
                if (deployment == null) {
                    final EjbDeployment ejbDeployment = openejbJar.addEjbDeployment(bean);
                    ejbDeployment.getProperties().putAll(properties);
                } else {
                    deployment.getProperties().putAll(properties);
                }
            }
        }
    }
    // cleanup
    additionalProperties.clear();
    globalProperties.clear();
    return appModule;
}
Also used : OpenejbJar(org.apache.openejb.jee.oejb3.OpenejbJar) EnterpriseBean(org.apache.openejb.jee.EnterpriseBean) EjbDeployment(org.apache.openejb.jee.oejb3.EjbDeployment) Properties(java.util.Properties) SuperProperties(org.apache.openejb.util.SuperProperties) Map(java.util.Map) HashMap(java.util.HashMap) SuperProperties(org.apache.openejb.util.SuperProperties)

Example 20 with EjbDeployment

use of org.apache.openejb.jee.oejb3.EjbDeployment in project tomee by apache.

the class CmpJpaConversion method processEntityBean.

/**
 * Generate the CMP mapping data for an individual
 * EntityBean.
 *
 * @param ejbModule      The module containing the bean.
 * @param entityMappings The accumulated set of entity mappings.
 * @param bean           The been we're generating the mapping for.
 */
private void processEntityBean(final EjbModule ejbModule, final EntityMappings entityMappings, final EntityBean bean) {
    // try to add a new persistence-context-ref for cmp
    if (!addPersistenceContextRef(bean)) {
        // which means it has a mapping, so skip this bean
        return;
    }
    // get the real bean class
    final Class ejbClass = loadClass(ejbModule.getClassLoader(), bean.getEjbClass());
    // and generate a name for the subclass that will be generated and handed to the JPA
    // engine as the managed class.
    final String jpaEntityClassName = CmpUtil.getCmpImplClassName(bean.getAbstractSchemaName(), ejbClass.getName());
    // We don't use this mapping directly, instead we pull entries from it
    // the reason being is that we intend to support mappings that aren't
    // exactly correct.  i.e. users should be able to write mappings completely
    // ignorant of the fact that we subclass.  The fact that we subclass means
    // these user supplied mappings might need to be adjusted as the jpa orm.xml
    // file is extremely subclass/supperclass aware and mappings specified in it
    // need to be spot on.
    final EntityMappings userMappings = getUserEntityMappings(ejbModule);
    // chain of the bean looking for any that have user defined mappings.
    for (Class clazz = ejbClass; clazz != null; clazz = clazz.getSuperclass()) {
        final MappedSuperclass mappedSuperclass = removeMappedSuperclass(userMappings, clazz.getName());
        // that the mapping is correct.  Copy it from their mappings to ours
        if (mappedSuperclass != null) {
            entityMappings.getMappedSuperclass().add(mappedSuperclass);
        }
    }
    // Look for an existing mapping using the openejb generated subclass name
    Entity entity = removeEntity(userMappings, jpaEntityClassName);
    // because we are going to ignore all other xml metadata.
    if (entity != null) {
        // XmlMetadataComplete is an OpenEJB specific flag that
        // tells all other legacy descriptor converters to keep
        // their hands off.
        entity.setXmlMetadataComplete(true);
        entityMappings.getEntity().add(entity);
        return;
    }
    if (entity == null) {
        entity = new Entity(jpaEntityClassName);
    }
    // have to check for null everywhere.
    if (entity.getAttributes() == null) {
        entity.setAttributes(new Attributes());
    }
    // add the entity
    entityMappings.getEntity().add(entity);
    // OVERWRITE: description: contains the name of the entity bean
    entity.setDescription(ejbModule.getModuleId() + "#" + bean.getEjbName());
    // PRESERVE has queries: name: the name of the entity in queries
    final String entityName = bean.getAbstractSchemaName();
    entity.setName(entityName);
    entity.setEjbName(bean.getEjbName());
    final ClassLoader classLoader = ejbModule.getClassLoader();
    final Collection<MappedSuperclass> mappedSuperclasses;
    if (bean.getCmpVersion() == CmpVersion.CMP2) {
        // perform the 2.x class mapping.  This really just identifies the primary key and
        // other cmp fields that will be generated for the concrete class and identify them
        // to JPA.
        mappedSuperclasses = mapClass2x(entity, bean, classLoader);
    } else {
        // map the cmp class, but if we are using a mapped super class,
        // generate attribute-override instead of id and basic
        mappedSuperclasses = mapClass1x(bean.getEjbClass(), entity, bean, classLoader);
    }
    // configuration. f
    if (mappedSuperclasses != null) {
        // that will get passed to the JPA engine.
        for (final MappedSuperclass mappedSuperclass : mappedSuperclasses) {
            entityMappings.getMappedSuperclass().add(mappedSuperclass);
        }
    }
    // process queries
    for (final Query query : bean.getQuery()) {
        final NamedQuery namedQuery = new NamedQuery();
        final QueryMethod queryMethod = query.getQueryMethod();
        // todo deployment id could change in one of the later conversions... use entity name instead, but we need to save it off
        final StringBuilder name = new StringBuilder();
        name.append(entityName).append(".").append(queryMethod.getMethodName());
        if (queryMethod.getMethodParams() != null && !queryMethod.getMethodParams().getMethodParam().isEmpty()) {
            name.append('(');
            boolean first = true;
            for (final String methodParam : queryMethod.getMethodParams().getMethodParam()) {
                if (!first) {
                    name.append(",");
                }
                name.append(methodParam);
                first = false;
            }
            name.append(')');
        }
        namedQuery.setName(name.toString());
        namedQuery.setQuery(query.getEjbQl());
        entity.getNamedQuery().add(namedQuery);
    }
    // todo: there should be a common interface between ejb query object and openejb query object
    final OpenejbJar openejbJar = ejbModule.getOpenejbJar();
    final EjbDeployment ejbDeployment = openejbJar.getDeploymentsByEjbName().get(bean.getEjbName());
    if (ejbDeployment != null) {
        for (final org.apache.openejb.jee.oejb3.Query query : ejbDeployment.getQuery()) {
            final NamedQuery namedQuery = new NamedQuery();
            final org.apache.openejb.jee.oejb3.QueryMethod queryMethod = query.getQueryMethod();
            // todo deployment id could change in one of the later conversions... use entity name instead, but we need to save it off
            final StringBuilder name = new StringBuilder();
            name.append(entityName).append(".").append(queryMethod.getMethodName());
            if (queryMethod.getMethodParams() != null && !queryMethod.getMethodParams().getMethodParam().isEmpty()) {
                name.append('(');
                boolean first = true;
                for (final String methodParam : queryMethod.getMethodParams().getMethodParam()) {
                    if (!first) {
                        name.append(",");
                    }
                    name.append(methodParam);
                    first = false;
                }
                name.append(')');
            }
            namedQuery.setName(name.toString());
            namedQuery.setQuery(query.getObjectQl());
            entity.getNamedQuery().add(namedQuery);
        }
    }
}
Also used : Entity(org.apache.openejb.jee.jpa.Entity) Query(org.apache.openejb.jee.Query) NamedQuery(org.apache.openejb.jee.jpa.NamedQuery) QueryMethod(org.apache.openejb.jee.QueryMethod) Attributes(org.apache.openejb.jee.jpa.Attributes) OpenejbJar(org.apache.openejb.jee.oejb3.OpenejbJar) MappedSuperclass(org.apache.openejb.jee.jpa.MappedSuperclass) EntityMappings(org.apache.openejb.jee.jpa.EntityMappings) IdClass(org.apache.openejb.jee.jpa.IdClass) EjbDeployment(org.apache.openejb.jee.oejb3.EjbDeployment) NamedQuery(org.apache.openejb.jee.jpa.NamedQuery)

Aggregations

EjbDeployment (org.apache.openejb.jee.oejb3.EjbDeployment)46 OpenejbJar (org.apache.openejb.jee.oejb3.OpenejbJar)35 EjbJar (org.apache.openejb.jee.EjbJar)27 EnterpriseBean (org.apache.openejb.jee.EnterpriseBean)16 EjbModule (org.apache.openejb.config.EjbModule)15 Properties (java.util.Properties)14 OpenEJBException (org.apache.openejb.OpenEJBException)10 ResourceLink (org.apache.openejb.jee.oejb3.ResourceLink)9 Assembler (org.apache.openejb.assembler.classic.Assembler)8 StatelessBean (org.apache.openejb.jee.StatelessBean)8 HashMap (java.util.HashMap)7 EjbJarInfo (org.apache.openejb.assembler.classic.EjbJarInfo)7 InitialContext (javax.naming.InitialContext)6 ConfigurationFactory (org.apache.openejb.config.ConfigurationFactory)6 ManagedBean (org.apache.openejb.jee.ManagedBean)6 MessageDrivenBean (org.apache.openejb.jee.MessageDrivenBean)6 SessionBean (org.apache.openejb.jee.SessionBean)6 Map (java.util.Map)5 SingletonBean (org.apache.openejb.jee.SingletonBean)5 ContainerSystem (org.apache.openejb.spi.ContainerSystem)5