⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sharkserviceengine.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
字号:
/* * $Id: SharkServiceEngine.java 5462 2005-08-05 18:35:48Z jonesde $ * * Copyright (c) 2004 The Open For Business Project - www.ofbiz.org * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */package org.ofbiz.shark.service;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import javax.transaction.Transaction;import org.ofbiz.base.util.StringUtil;import org.ofbiz.base.util.Debug;import org.ofbiz.entity.GenericValue;import org.ofbiz.entity.transaction.TransactionUtil;import org.ofbiz.entity.transaction.GenericTransactionException;import org.ofbiz.service.GenericRequester;import org.ofbiz.service.GenericResultWaiter;import org.ofbiz.service.GenericServiceException;import org.ofbiz.service.ModelService;import org.ofbiz.service.ServiceDispatcher;import org.ofbiz.service.engine.AbstractEngine;import org.ofbiz.shark.container.SharkContainer;import org.ofbiz.shark.requester.SimpleRequester;import org.enhydra.shark.api.client.wfbase.BaseException;import org.enhydra.shark.api.client.wfmodel.*;import org.enhydra.shark.api.client.wfservice.AdminInterface;import org.enhydra.shark.api.client.wfservice.ConnectFailed;import org.enhydra.shark.api.client.wfservice.ExecutionAdministration;import org.enhydra.shark.api.client.wfservice.NotConnected;/** * Shark Service Engine * * @author     <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a> * @version    $Rev: 5462 $ * @since      3.1 */public class SharkServiceEngine extends AbstractEngine {    public static final String module = SharkServiceEngine.class.getName();    public SharkServiceEngine(ServiceDispatcher dispatcher) {        super(dispatcher);    }    /**     * Run the service synchronously and return the result.     *     * @param localName    Name of the LocalDispatcher.     * @param modelService Service model object.     * @param context      Map of name, value pairs composing the context.     * @return Map of name, value pairs composing the result.     * @throws org.ofbiz.service.GenericServiceException     *     */    public Map runSync(String localName, ModelService modelService, Map context) throws GenericServiceException {        GenericResultWaiter waiter = new GenericResultWaiter();        this.runAsync(localName, modelService, context, waiter, false);        return waiter.waitForResult();    }    /**     * Run the service synchronously and IGNORE the result.     *     * @param localName    Name of the LocalDispatcher.     * @param modelService Service model object.     * @param context      Map of name, value pairs composing the context.     * @throws org.ofbiz.service.GenericServiceException     *     */    public void runSyncIgnore(String localName, ModelService modelService, Map context) throws GenericServiceException {        this.runSync(localName, modelService, context);    }    /**     * Run the service asynchronously, passing an instance of GenericRequester that will receive the result.     *     * @param localName    Name of the LocalDispatcher.     * @param modelService Service model object.     * @param context      Map of name, value pairs composing the context.     * @param requester    Object implementing GenericRequester interface which will receive the result.     * @param persist      True for store/run; False for run.     * @throws org.ofbiz.service.GenericServiceException     *     */    public void runAsync(String localName, ModelService modelService, Map context, GenericRequester requester, boolean persist) throws GenericServiceException {        this.runWf(modelService, context, requester);    }    /**     * Run the service asynchronously and IGNORE the result.     *     * @param localName    Name of the LocalDispatcher.     * @param modelService Service model object.     * @param context      Map of name, value pairs composing the context.     * @param persist      True for store/run; False for run.     * @throws org.ofbiz.service.GenericServiceException     *     */    public void runAsync(String localName, ModelService modelService, Map context, boolean persist) throws GenericServiceException {        this.runAsync(localName, modelService, context, new GenericResultWaiter(), persist);    }    private GenericRequester runWf(ModelService model, Map context, GenericRequester waiter) throws GenericServiceException {        GenericValue userLogin = (GenericValue) context.get("userLogin");        if (userLogin == null) {            userLogin = SharkContainer.getAdminUser();        }        AdminInterface admin = SharkContainer.getAdminInterface();        ExecutionAdministration exec = admin.getExecutionAdministration();        boolean beganTrans = false;        boolean hasError = false;        Transaction trans = null;        try {            beganTrans = TransactionUtil.begin();            if (!beganTrans) {                trans = TransactionUtil.suspend();                beganTrans = TransactionUtil.begin();            }            try {                // connect to admin API                try {                    exec.connect(userLogin.getString("userLoginId"), userLogin.getString("currentPassword"), null, null);                } catch (BaseException e) {                    throw new GenericServiceException(e);                } catch (ConnectFailed e) {                    throw new GenericServiceException(e);                }                try {                    // create the requester                    WfRequester req = new SimpleRequester(userLogin, model, waiter);                    WfProcessMgr mgr = null;                    String location = this.getLocation(model);                    String version = null;                    // locate packageId::version                    if (location.indexOf("::") != -1) {                        List splitList = StringUtil.split(location, "::");                        location = (String) splitList.get(0);                        version = (String) splitList.get(1);                    }                    // obtain the process manager                    try {                        if (version == null) {                            mgr = exec.getProcessMgr(location, model.invoke);                        } else {                            mgr = exec.getProcessMgr(location, version, model.invoke);                        }                    } catch (BaseException e) {                        throw new GenericServiceException(e);                    } catch (NotConnected e) {                        throw new GenericServiceException(e);                    }                    // make sure the manager exists                    if (mgr == null) {                        throw new GenericServiceException("Unable to obtain Process Manager for : " + this.getLocation(model) + " / " + model.invoke);                    }                    // create the process instance                    WfProcess proc = null;                    try {                        proc = mgr.create_process(req);                    } catch (BaseException e) {                        throw new GenericServiceException(e);                    } catch (NotEnabled e) {                        throw new GenericServiceException(e);                    } catch (InvalidRequester e) {                        throw new GenericServiceException(e);                    } catch (RequesterRequired e) {                        throw new GenericServiceException(e);                    }                    Map contextSig = null;                    try {                        contextSig = mgr.context_signature();                    } catch (BaseException e) {                        throw new GenericServiceException(e);                    }                    if (contextSig != null) {                        Iterator sigKeys = contextSig.keySet().iterator();                        Map formalParams = new HashMap();                        while (sigKeys.hasNext()) {                            String key = (String) sigKeys.next();                            formalParams.put(key, context.get(key));                        }                        // set the initial WRD                        try {                            proc.set_process_context(formalParams);                        } catch (BaseException e) {                            throw new GenericServiceException(e);                        } catch (InvalidData e) {                            throw new GenericServiceException(e);                        } catch (UpdateNotAllowed e) {                            throw new GenericServiceException(e);                        }                    }                    // start the process                    try {                        proc.start();                    } catch (BaseException e) {                        throw new GenericServiceException(e);                    } catch (CannotStart e) {                        throw new GenericServiceException(e);                    } catch (AlreadyRunning e) {                        throw new GenericServiceException(e);                    }                } catch (GenericServiceException e) {                    throw e;                } finally {                    // disconnect from admin API                    try {                        exec.disconnect();                    } catch (NotConnected e) {                        throw new GenericServiceException(e);                    } catch (BaseException e) {                        throw new GenericServiceException(e);                    }                }            } catch (GenericServiceException e) {                hasError = true;                throw e;            } finally {                if (hasError) {                    try {                        TransactionUtil.rollback(beganTrans, "Transaction rollback from Shark", null);                    } catch (GenericTransactionException e) {                        Debug.logError(e, "Could not rollback transaction", module);                    }                } else {                    try {                        TransactionUtil.commit(beganTrans);                    } catch (GenericTransactionException e) {                        Debug.logError(e, "Could not commit transaction", module);                        throw new GenericServiceException("Commit transaction failed");                    }                }            }        } catch (GenericTransactionException e) {            throw new GenericServiceException(e);        } finally {            if (trans != null) {                try {                    TransactionUtil.resume(trans);                } catch (GenericTransactionException e) {                    throw new GenericServiceException(e);                }            }        }        return waiter;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -