Search in sources :

Example 16 with GenericConfigException

use of org.apache.ofbiz.base.config.GenericConfigException in project ofbiz-framework by apache.

the class JNDIContextFactory method getInitialContext.

/**
 * Return the initial context according to the entityengine.xml parameters that correspond to the given prefix
 * @return the JNDI initial context
 */
public static InitialContext getInitialContext(String jndiServerName) throws GenericConfigException {
    InitialContext ic = contexts.get(jndiServerName);
    if (ic == null) {
        JNDIConfigUtil.JndiServerInfo jndiServerInfo = JNDIConfigUtil.getJndiServerInfo(jndiServerName);
        if (jndiServerInfo == null) {
            throw new GenericConfigException("ERROR: no jndi-server definition was found with the name " + jndiServerName + " in jndiservers.xml");
        }
        try {
            if (UtilValidate.isEmpty(jndiServerInfo.contextProviderUrl)) {
                ic = new InitialContext();
            } else {
                Hashtable<String, Object> h = new Hashtable<>();
                h.put(Context.INITIAL_CONTEXT_FACTORY, jndiServerInfo.initialContextFactory);
                h.put(Context.PROVIDER_URL, jndiServerInfo.contextProviderUrl);
                if (UtilValidate.isNotEmpty(jndiServerInfo.urlPkgPrefixes)) {
                    h.put(Context.URL_PKG_PREFIXES, jndiServerInfo.urlPkgPrefixes);
                }
                if (UtilValidate.isNotEmpty(jndiServerInfo.securityPrincipal)) {
                    h.put(Context.SECURITY_PRINCIPAL, jndiServerInfo.securityPrincipal);
                }
                if (UtilValidate.isNotEmpty(jndiServerInfo.securityCredentials)) {
                    h.put(Context.SECURITY_CREDENTIALS, jndiServerInfo.securityCredentials);
                }
                ic = new InitialContext(h);
            }
        } catch (Exception e) {
            String errorMsg = "Error getting JNDI initial context for server name " + jndiServerName;
            Debug.logError(e, errorMsg, module);
            throw new GenericConfigException(errorMsg, e);
        }
        ic = contexts.putIfAbsentAndGet(jndiServerName, ic);
    }
    return ic;
}
Also used : GenericConfigException(org.apache.ofbiz.base.config.GenericConfigException) Hashtable(java.util.Hashtable) JNDIConfigUtil(org.apache.ofbiz.base.config.JNDIConfigUtil) InitialContext(javax.naming.InitialContext) GenericConfigException(org.apache.ofbiz.base.config.GenericConfigException)

Example 17 with GenericConfigException

use of org.apache.ofbiz.base.config.GenericConfigException in project ofbiz-framework by apache.

the class ModelGroupReader method getGroupCache.

public Map<String, String> getGroupCache(String delegatorName) {
    if (this.groupCache == null) {
        // don't want to block here
        synchronized (ModelGroupReader.class) {
            // must check if null again as one of the blocked threads can still enter
            if (this.groupCache == null) {
                // now it's safe
                this.groupCache = new HashMap<>();
                this.groupNames = new TreeSet<>();
                UtilTimer utilTimer = new UtilTimer();
                // utilTimer.timerString("[ModelGroupReader.getGroupCache] Before getDocument");
                int i = 0;
                for (ResourceHandler entityGroupResourceHandler : this.entityGroupResourceHandlers) {
                    Document document = null;
                    try {
                        document = entityGroupResourceHandler.getDocument();
                    } catch (GenericConfigException e) {
                        Debug.logError(e, "Error loading entity group model", module);
                    }
                    if (document == null) {
                        this.groupCache = null;
                        return null;
                    }
                    // utilTimer.timerString("[ModelGroupReader.getGroupCache] Before getDocumentElement");
                    Element docElement = document.getDocumentElement();
                    if (docElement == null) {
                        continue;
                    }
                    docElement.normalize();
                    Node curChild = docElement.getFirstChild();
                    if (curChild != null) {
                        utilTimer.timerString("[ModelGroupReader.getGroupCache] Before start of entity loop");
                        do {
                            if (curChild.getNodeType() == Node.ELEMENT_NODE && "entity-group".equals(curChild.getNodeName())) {
                                Element curEntity = (Element) curChild;
                                String entityName = UtilXml.checkEmpty(curEntity.getAttribute("entity")).intern();
                                String groupName = UtilXml.checkEmpty(curEntity.getAttribute("group")).intern();
                                try {
                                    if (null == EntityConfig.getInstance().getDelegator(delegatorName).getGroupDataSource(groupName)) {
                                        Debug.logError("The declared group name " + groupName + " has no corresponding group-map in entityengine.xml: ", module);
                                    }
                                } catch (GenericEntityConfException e) {
                                    Debug.logWarning(e, "Exception thrown while getting group name: ", module);
                                }
                                this.groupNames.add(groupName);
                                this.groupCache.put(entityName, groupName);
                                // utilTimer.timerString("  After entityEntityName -- " + i + " --");
                                i++;
                            }
                        } while ((curChild = curChild.getNextSibling()) != null);
                    } else {
                        Debug.logWarning("[ModelGroupReader.getGroupCache] No child nodes found.", module);
                    }
                }
                utilTimer.timerString("[ModelGroupReader.getGroupCache] FINISHED - Total Entity-Groups: " + i + " FINISHED");
            }
        }
    }
    return this.groupCache;
}
Also used : GenericConfigException(org.apache.ofbiz.base.config.GenericConfigException) GenericEntityConfException(org.apache.ofbiz.entity.GenericEntityConfException) DelegatorElement(org.apache.ofbiz.entity.config.model.DelegatorElement) Element(org.w3c.dom.Element) Node(org.w3c.dom.Node) UtilTimer(org.apache.ofbiz.base.util.UtilTimer) ResourceHandler(org.apache.ofbiz.base.config.ResourceHandler) MainResourceHandler(org.apache.ofbiz.base.config.MainResourceHandler) Document(org.w3c.dom.Document)

Example 18 with GenericConfigException

use of org.apache.ofbiz.base.config.GenericConfigException in project ofbiz-framework by apache.

the class ModelReader method getEntityCache.

public Map<String, ModelEntity> getEntityCache() throws GenericEntityException {
    if (entityCache == null) {
        // don't want to block here
        synchronized (ModelReader.class) {
            // must check if null again as one of the blocked threads can still enter
            if (entityCache == null) {
                // now it's safe
                numEntities = 0;
                numViewEntities = 0;
                numFields = 0;
                numRelations = 0;
                numAutoRelations = 0;
                entityCache = new HashMap<>();
                List<ModelViewEntity> tempViewEntityList = new LinkedList<>();
                List<Element> tempExtendEntityElementList = new LinkedList<>();
                UtilTimer utilTimer = new UtilTimer();
                for (ResourceHandler entityResourceHandler : entityResourceHandlers) {
                    // utilTimer.timerString("Before getDocument in file " + entityFileName);
                    Document document = null;
                    try {
                        document = entityResourceHandler.getDocument();
                    } catch (GenericConfigException e) {
                        throw new GenericEntityConfException("Error getting document from resource handler", e);
                    }
                    if (document == null) {
                        throw new GenericEntityConfException("Could not get document for " + entityResourceHandler.toString());
                    }
                    // utilTimer.timerString("Before getDocumentElement in " +
                    // entityResourceHandler.toString());
                    Element docElement = document.getDocumentElement();
                    if (docElement == null) {
                        return null;
                    }
                    docElement.normalize();
                    Node curChild = docElement.getFirstChild();
                    ModelInfo def = ModelInfo.createFromElements(ModelInfo.DEFAULT, docElement);
                    int i = 0;
                    if (curChild != null) {
                        utilTimer.timerString("Before start of entity loop in " + entityResourceHandler.toString());
                        do {
                            boolean isEntity = "entity".equals(curChild.getNodeName());
                            boolean isViewEntity = "view-entity".equals(curChild.getNodeName());
                            boolean isExtendEntity = "extend-entity".equals(curChild.getNodeName());
                            if ((isEntity || isViewEntity) && curChild.getNodeType() == Node.ELEMENT_NODE) {
                                i++;
                                ModelEntity modelEntity = buildEntity(entityResourceHandler, (Element) curChild, i, def);
                                // put the view entity in a list to get ready for the second pass to populate fields...
                                if (isViewEntity) {
                                    tempViewEntityList.add((ModelViewEntity) modelEntity);
                                } else {
                                    entityCache.put(modelEntity.getEntityName(), modelEntity);
                                }
                            } else if (isExtendEntity && curChild.getNodeType() == Node.ELEMENT_NODE) {
                                tempExtendEntityElementList.add((Element) curChild);
                            }
                        } while ((curChild = curChild.getNextSibling()) != null);
                    } else {
                        Debug.logWarning("No child nodes found.", module);
                    }
                    utilTimer.timerString("Finished " + entityResourceHandler.toString() + " - Total Entities: " + i + " FINISHED");
                }
                // all entity elements in, now go through extend-entity elements and add their stuff
                for (Element extendEntityElement : tempExtendEntityElementList) {
                    String entityName = UtilXml.checkEmpty(extendEntityElement.getAttribute("entity-name"));
                    ModelEntity modelEntity = entityCache.get(entityName);
                    if (modelEntity == null)
                        throw new GenericEntityConfException("Entity to extend does not exist: " + entityName);
                    modelEntity.addExtendEntity(this, extendEntityElement);
                }
                // do a pass on all of the view entities now that all of the entities have loaded and populate the fields
                while (!tempViewEntityList.isEmpty()) {
                    int startSize = tempViewEntityList.size();
                    Iterator<ModelViewEntity> mveIt = tempViewEntityList.iterator();
                    TEMP_VIEW_LOOP: while (mveIt.hasNext()) {
                        ModelViewEntity curViewEntity = mveIt.next();
                        for (ModelViewEntity.ModelMemberEntity mve : curViewEntity.getAllModelMemberEntities()) {
                            if (!entityCache.containsKey(mve.getEntityName())) {
                                continue TEMP_VIEW_LOOP;
                            }
                        }
                        mveIt.remove();
                        curViewEntity.populateFields(this);
                        for (ModelViewEntity.ModelMemberEntity mve : curViewEntity.getAllModelMemberEntities()) {
                            ModelEntity me = entityCache.get(mve.getEntityName());
                            me.addViewEntity(curViewEntity);
                        }
                        entityCache.put(curViewEntity.getEntityName(), curViewEntity);
                    }
                    if (tempViewEntityList.size() == startSize) {
                        // that have some reference problem.
                        break;
                    }
                }
                if (!tempViewEntityList.isEmpty()) {
                    StringBuilder sb = new StringBuilder("View entities reference non-existant members:\n");
                    Set<String> allViews = new HashSet<>();
                    for (ModelViewEntity curViewEntity : tempViewEntityList) {
                        allViews.add(curViewEntity.getEntityName());
                    }
                    for (ModelViewEntity curViewEntity : tempViewEntityList) {
                        Set<String> perViewMissingEntities = new HashSet<>();
                        Iterator<ModelViewEntity.ModelMemberEntity> mmeIt = curViewEntity.getAllModelMemberEntities().iterator();
                        while (mmeIt.hasNext()) {
                            ModelViewEntity.ModelMemberEntity mme = mmeIt.next();
                            String memberEntityName = mme.getEntityName();
                            if (!entityCache.containsKey(memberEntityName)) {
                                // check to see if it is a view
                                if (!allViews.contains(memberEntityName)) {
                                    // not a view, it's a real missing entity
                                    perViewMissingEntities.add(memberEntityName);
                                }
                            }
                        }
                        for (String perViewMissingEntity : perViewMissingEntities) {
                            sb.append("\t[").append(curViewEntity.getEntityName()).append("] missing member entity [").append(perViewMissingEntity).append("]\n");
                        }
                    }
                    throw new GenericEntityConfException(sb.toString());
                }
                // auto-create relationships
                Set<String> orderedMessages = new TreeSet<>();
                for (String curEntityName : new TreeSet<>(this.getEntityNames())) {
                    ModelEntity curModelEntity = this.getModelEntity(curEntityName);
                    if (curModelEntity instanceof ModelViewEntity) {
                    // for view-entities auto-create relationships for all member-entity
                    // relationships that have all corresponding fields in the view-entity
                    } else {
                        // for entities auto-create many relationships for all type one relationships
                        // just in case we add a new relation to the same entity, keep in a separate
                        // list and add them at the end
                        List<ModelRelation> newSameEntityRelations = new LinkedList<>();
                        Iterator<ModelRelation> relationsIter = curModelEntity.getRelationsIterator();
                        while (relationsIter.hasNext()) {
                            ModelRelation modelRelation = relationsIter.next();
                            if (("one".equals(modelRelation.getType()) || "one-nofk".equals(modelRelation.getType())) && !modelRelation.isAutoRelation()) {
                                ModelEntity relatedEnt = null;
                                try {
                                    relatedEnt = this.getModelEntity(modelRelation.getRelEntityName());
                                } catch (GenericModelException e) {
                                    throw new GenericModelException("Error getting related entity [" + modelRelation.getRelEntityName() + "] definition from entity [" + curEntityName + "]", e);
                                }
                                // create the new relationship even if one exists so we can show what we are
                                // looking for in the info message
                                // don't do relationship to the same entity, unless title is "Parent", then do a
                                // "Child" automatically
                                String title = modelRelation.getTitle();
                                if (curModelEntity.getEntityName().equals(relatedEnt.getEntityName()) && "Parent".equals(title)) {
                                    title = "Child";
                                }
                                String description = "";
                                String type = "";
                                String relEntityName = curModelEntity.getEntityName();
                                String fkName = "";
                                ArrayList<ModelKeyMap> keyMaps = new ArrayList<>();
                                boolean isAutoRelation = true;
                                Set<String> curEntityKeyFields = new HashSet<>();
                                for (ModelKeyMap curkm : modelRelation.getKeyMaps()) {
                                    keyMaps.add(new ModelKeyMap(curkm.getRelFieldName(), curkm.getFieldName()));
                                    curEntityKeyFields.add(curkm.getFieldName());
                                }
                                keyMaps.trimToSize();
                                // the complete pk of the relEntity
                                if (curModelEntity.containsAllPkFieldNames(curEntityKeyFields)) {
                                    // always use one-nofk, we don't want auto-fks getting in for these automatic ones
                                    type = "one-nofk";
                                    // to keep it clean, remove any additional keys that aren't part of the PK
                                    List<String> curPkFieldNames = curModelEntity.getPkFieldNames();
                                    Iterator<ModelKeyMap> nrkmIter = keyMaps.iterator();
                                    while (nrkmIter.hasNext()) {
                                        ModelKeyMap nrkm = nrkmIter.next();
                                        String checkField = nrkm.getRelFieldName();
                                        if (!curPkFieldNames.contains(checkField)) {
                                            nrkmIter.remove();
                                        }
                                    }
                                } else {
                                    type = "many";
                                }
                                ModelRelation newRel = ModelRelation.create(relatedEnt, description, type, title, relEntityName, fkName, keyMaps, isAutoRelation);
                                ModelRelation existingRelation = relatedEnt.getRelation(title + curModelEntity.getEntityName());
                                if (existingRelation == null) {
                                    numAutoRelations++;
                                    if (curModelEntity.getEntityName().equals(relatedEnt.getEntityName())) {
                                        newSameEntityRelations.add(newRel);
                                    } else {
                                        relatedEnt.addRelation(newRel);
                                    }
                                } else {
                                    if (newRel.equals(existingRelation)) {
                                        // don't warn if the target title+entity = current title+entity
                                        if (Debug.infoOn() && !(title + curModelEntity.getEntityName()).equals(modelRelation.getTitle() + modelRelation.getRelEntityName())) {
                                            // String errorMsg = "Relation already exists to entity [] with title ["
                                            // + targetTitle + "],from entity []";
                                            String message = "Entity [" + relatedEnt.getPackageName() + ":" + relatedEnt.getEntityName() + "] already has identical relationship to entity [" + curModelEntity.getEntityName() + "] title [" + title + "]; would auto-create: type [" + newRel.getType() + "] and fields [" + newRel.keyMapString(",", "") + "]";
                                            orderedMessages.add(message);
                                        }
                                    } else {
                                        String message = "Existing relationship with the same name, but different specs found from what would be auto-created for Entity [" + relatedEnt.getEntityName() + "] and relationship to entity [" + curModelEntity.getEntityName() + "] title [" + title + "]; would auto-create: type [" + newRel.getType() + "] and fields [" + newRel.keyMapString(",", "") + "]";
                                        if (Debug.verboseOn())
                                            Debug.logVerbose(message, module);
                                    }
                                }
                            }
                        }
                        if (newSameEntityRelations.size() > 0) {
                            for (ModelRelation newRel : newSameEntityRelations) {
                                curModelEntity.addRelation(newRel);
                            }
                        }
                    }
                }
                if (Debug.infoOn()) {
                    for (String message : orderedMessages) {
                        Debug.logInfo(message, module);
                    }
                    Debug.logInfo("Finished loading entities; #Entities=" + numEntities + " #ViewEntities=" + numViewEntities + " #Fields=" + numFields + " #Relationships=" + numRelations + " #AutoRelationships=" + numAutoRelations, module);
                }
            }
        }
    }
    return entityCache;
}
Also used : GenericModelException(org.apache.ofbiz.entity.GenericModelException) GenericEntityConfException(org.apache.ofbiz.entity.GenericEntityConfException) DelegatorElement(org.apache.ofbiz.entity.config.model.DelegatorElement) Element(org.w3c.dom.Element) Node(org.w3c.dom.Node) UtilTimer(org.apache.ofbiz.base.util.UtilTimer) ArrayList(java.util.ArrayList) ResourceHandler(org.apache.ofbiz.base.config.ResourceHandler) MainResourceHandler(org.apache.ofbiz.base.config.MainResourceHandler) Document(org.w3c.dom.Document) EntityModelReader(org.apache.ofbiz.entity.config.model.EntityModelReader) TreeSet(java.util.TreeSet) HashSet(java.util.HashSet) LinkedList(java.util.LinkedList) GenericConfigException(org.apache.ofbiz.base.config.GenericConfigException)

Example 19 with GenericConfigException

use of org.apache.ofbiz.base.config.GenericConfigException in project ofbiz-framework by apache.

the class EntityEcaUtil method getEcaDefinitions.

private static List<EntityEcaRule> getEcaDefinitions(ResourceHandler handler) {
    List<EntityEcaRule> rules = new LinkedList<EntityEcaRule>();
    Element rootElement = null;
    try {
        rootElement = handler.getDocument().getDocumentElement();
    } catch (GenericConfigException e) {
        Debug.logError(e, module);
        return rules;
    }
    for (Element e : UtilXml.childElementList(rootElement, "eca")) {
        rules.add(new EntityEcaRule(e));
    }
    try {
        Debug.logInfo("Loaded [" + rules.size() + "] Entity ECA definitions from " + handler.getFullLocation() + " in loader " + handler.getLoaderName(), module);
    } catch (GenericConfigException e) {
        Debug.logError(e, module);
    }
    return rules;
}
Also used : GenericConfigException(org.apache.ofbiz.base.config.GenericConfigException) Element(org.w3c.dom.Element) DelegatorElement(org.apache.ofbiz.entity.config.model.DelegatorElement) LinkedList(java.util.LinkedList)

Example 20 with GenericConfigException

use of org.apache.ofbiz.base.config.GenericConfigException in project ofbiz-framework by apache.

the class JobManager method schedule.

/**
 * Schedule a job to start at a specific time with specific recurrence info
 *
 * @param jobName
 *            The name of the job
 *@param poolName
 *            The name of the pool to run the service from
 *@param serviceName
 *            The name of the service to invoke
 *@param dataId
 *            The persisted context (RuntimeData.runtimeDataId)
 *@param startTime
 *            The time in milliseconds the service should run
 *@param frequency
 *            The frequency of the recurrence (HOURLY,DAILY,MONTHLY,etc)
 *@param interval
 *            The interval of the frequency recurrence
 *@param count
 *            The number of times to repeat
 *@param endTime
 *            The time in milliseconds the service should expire
 *@param maxRetry
 *            The max number of retries on failure (-1 for no max)
 * @throws IllegalStateException if the Job Manager is shut down.
 */
public void schedule(String jobName, String poolName, String serviceName, String dataId, long startTime, int frequency, int interval, int count, long endTime, int maxRetry) throws JobManagerException {
    assertIsRunning();
    // create the recurrence
    String infoId = null;
    if (frequency > -1 && count != 0) {
        try {
            RecurrenceInfo info = RecurrenceInfo.makeInfo(delegator, startTime, frequency, interval, count);
            infoId = info.primaryKey();
        } catch (RecurrenceInfoException e) {
            throw new JobManagerException(e.getMessage(), e);
        }
    }
    // set the persisted fields
    if (UtilValidate.isEmpty(jobName)) {
        jobName = Long.toString((new Date().getTime()));
    }
    Map<String, Object> jFields = UtilMisc.<String, Object>toMap("jobName", jobName, "runTime", new java.sql.Timestamp(startTime), "serviceName", serviceName, "statusId", "SERVICE_PENDING", "recurrenceInfoId", infoId, "runtimeDataId", dataId);
    // set the pool ID
    if (UtilValidate.isNotEmpty(poolName)) {
        jFields.put("poolId", poolName);
    } else {
        try {
            jFields.put("poolId", ServiceConfigUtil.getServiceEngine().getThreadPool().getSendToPool());
        } catch (GenericConfigException e) {
            throw new JobManagerException(e.getMessage(), e);
        }
    }
    // set the loader name
    jFields.put("loaderName", delegator.getDelegatorName());
    // set the max retry
    jFields.put("maxRetry", Long.valueOf(maxRetry));
    jFields.put("currentRetryCount", Long.valueOf(0));
    // create the value and store
    GenericValue jobV;
    try {
        jobV = delegator.makeValue("JobSandbox", jFields);
        delegator.createSetNextSeqId(jobV);
    } catch (GenericEntityException e) {
        throw new JobManagerException(e.getMessage(), e);
    }
}
Also used : RecurrenceInfoException(org.apache.ofbiz.service.calendar.RecurrenceInfoException) GenericValue(org.apache.ofbiz.entity.GenericValue) GenericConfigException(org.apache.ofbiz.base.config.GenericConfigException) RecurrenceInfo(org.apache.ofbiz.service.calendar.RecurrenceInfo) GenericEntityException(org.apache.ofbiz.entity.GenericEntityException) Timestamp(java.sql.Timestamp) Date(java.util.Date)

Aggregations

GenericConfigException (org.apache.ofbiz.base.config.GenericConfigException)27 Element (org.w3c.dom.Element)9 LinkedList (java.util.LinkedList)7 MainResourceHandler (org.apache.ofbiz.base.config.MainResourceHandler)7 ResourceHandler (org.apache.ofbiz.base.config.ResourceHandler)7 GenericEntityException (org.apache.ofbiz.entity.GenericEntityException)7 GenericValue (org.apache.ofbiz.entity.GenericValue)5 ComponentConfig (org.apache.ofbiz.base.component.ComponentConfig)4 UtilTimer (org.apache.ofbiz.base.util.UtilTimer)4 GenericEntityConfException (org.apache.ofbiz.entity.GenericEntityConfException)4 GenericServiceException (org.apache.ofbiz.service.GenericServiceException)4 Document (org.w3c.dom.Document)4 Calendar (com.ibm.icu.util.Calendar)3 Timestamp (java.sql.Timestamp)3 HashMap (java.util.HashMap)3 DelegatorElement (org.apache.ofbiz.entity.config.model.DelegatorElement)3 IOException (java.io.IOException)2 URL (java.net.URL)2 ArrayList (java.util.ArrayList)2 Locale (java.util.Locale)2