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

📄 bshtransactionparticipant.java

📁 POS is a Java&#174 platform-based, mission-critical, ISO-8583 based financial transaction library/fr
💻 JAVA
字号:
/* * jPOS Project [http://jpos.org] * Copyright (C) 2000-2008 Alejandro P. Revilla * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program.  If not, see <http://www.gnu.org/licenses/>. */package org.jpos.bsh;import java.io.FileNotFoundException;import java.io.IOException;import java.io.Serializable;import java.util.HashMap;import java.util.Map;import org.jdom.Element;import org.jpos.core.ConfigurationException;import org.jpos.core.XmlConfigurable;import org.jpos.transaction.AbortParticipant;import org.jpos.transaction.TransactionParticipant;import org.jpos.util.LogEvent;import org.jpos.util.Logger;import org.jpos.util.SimpleLogSource;import bsh.EvalError;/** A TransactionParticipant which磗 prepare, commit and abort methods can be  *  specified through beanshell scripts. <BR> * *  To indicate what code to execute for any of the methods just add an element  *  named 'prepare', 'commit' or 'abort' contained in that of the participant. <BR> * *  See BSHMethod for details on the syntax of these elemets. The value to return  *  in the prepare method should be stored in the script variable named "result". *  None of these tags are mandatory. <BR> * *  You can subclass BSHTransactionParticipant and override the default...  *  methods. That way you can provide default behaviour for a participant and  *  override it at deploy time through scripts.  *  * @see BSHMethod * @author  AMarques */public class BSHTransactionParticipant extends SimpleLogSource     implements TransactionParticipant, AbortParticipant, XmlConfigurable {        protected BSHMethod prepareMethod;    protected BSHMethod prepareForAbortMethod;    protected BSHMethod commitMethod;    protected BSHMethod abortMethod;    boolean trace;        /** Creates a new instance of BSHTransactionParticipant */    public BSHTransactionParticipant() {        super();    }        public void abort(long id, java.io.Serializable context) {        LogEvent ev = new LogEvent(this, "abort");        if (abortMethod != null) {            try {                executeMethod(abortMethod, id, context, ev, "");            } catch (Exception ex) {                ev.addMessage(ex);            }        } else {            defaultAbort(id, context, ev);        }        if (trace)            Logger.log(ev);    }        protected void defaultAbort(long id, Serializable context, LogEvent ev) {}        public void commit(long id, java.io.Serializable context) {        LogEvent ev = new LogEvent(this, "commit");        if (commitMethod != null) {            try {                executeMethod(commitMethod, id, context, ev, "");            } catch (Exception ex) {                ev.addMessage(ex);            }        } else {            defaultCommit(id, context, ev);        }        if (trace)            Logger.log(ev);    }        protected void defaultCommit(long id, Serializable context, LogEvent ev) {}        public int prepare(long id, java.io.Serializable context) {        LogEvent ev = new LogEvent(this, "prepare");        int result = ABORTED | READONLY;        if (prepareMethod != null) {            try {                result = ((Integer) executeMethod(prepareMethod, id, context, ev, "result")).intValue();            } catch (Exception ex) {                ev.addMessage(ex);            }        } else {            result = defaultPrepare(id, context, ev);        }        ev.addMessage("result", Integer.toBinaryString(result));        if (trace)            Logger.log(ev);        return result;    }    public int prepareForAbort(long id, java.io.Serializable context) {        LogEvent ev = new LogEvent(this, "prepare-for-abort");        int result = ABORTED | READONLY;        if (prepareForAbortMethod != null) {            try {                result = ((Integer) executeMethod(prepareForAbortMethod, id, context, ev, "result")).intValue();            } catch (Exception ex) {                ev.addMessage(ex);            }        }         ev.addMessage("result", Integer.toBinaryString(result));        if (trace)            Logger.log(ev);        return result;    }        protected int defaultPrepare(long id, Serializable context, LogEvent ev) {        return PREPARED | READONLY;    }        public void setConfiguration(Element e) throws ConfigurationException {	try {            prepareMethod = BSHMethod.createBshMethod(e.getChild("prepare"));            prepareForAbortMethod = BSHMethod.createBshMethod(e.getChild("prepare-for-abort"));            commitMethod = BSHMethod.createBshMethod(e.getChild("commit"));            abortMethod = BSHMethod.createBshMethod(e.getChild("abort"));            trace = "yes".equals (e.getAttributeValue ("trace"));        } catch (Exception ex) {            throw new ConfigurationException(ex.getMessage(), ex);        }    }        protected Object executeMethod(BSHMethod m, long id, Serializable context, LogEvent evt, String resultName)     throws EvalError, FileNotFoundException, IOException {        Map params = new HashMap();        params.put("context", context);        params.put("id", new Long(id));        params.put("evt", evt);        params.put("self", this);        return m.execute(params, resultName);    }}

⌨️ 快捷键说明

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