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

📄 spacelet.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.q2.qbean;import java.io.FileNotFoundException;import java.io.IOException;import java.util.Iterator;import org.jdom.Element;import org.jpos.core.ConfigurationException;import org.jpos.q2.QBeanSupport;import org.jpos.space.Space;import org.jpos.space.SpaceError;import org.jpos.space.SpaceFactory;import org.jpos.util.NameRegistrar;import bsh.EvalError;import bsh.Interpreter;public class SpaceLet extends QBeanSupport implements Space {    Space sp;    String uri;    String outScript, outSource;    String pushScript, pushSource;    String inScript, inSource;    String rdScript, rdSource;    public void initService() throws ConfigurationException {        Element config = getPersist ();        grabSpace (config.getChild ("space"));        initSpace (config.getChild ("init"));        String name = getName();        if ("spacelet".equals (name))            name = "default";        uri = "spacelet:" + name;        Element e = config.getChild ("out");        outScript = getScript (e);        if (e != null)            outSource = e.getAttributeValue ("source");        e = config.getChild ("push");        pushScript = getScript (e);        if (e != null)            pushSource = e.getAttributeValue ("source");        e = config.getChild ("in");        inScript = getScript (e);        if (e != null)            inSource = e.getAttributeValue ("source");        e = config.getChild ("rd");        rdScript = getScript (e);        if (e != null)            rdSource = e.getAttributeValue ("source");    }    public void startService() {        NameRegistrar.register (uri, this);        Iterator iter = getPersist().getChildren("run").iterator();        while (iter.hasNext ())             launch ((Element) iter.next ());    }    public void stopService() {        NameRegistrar.unregister (uri);    }    public void out (Object key, Object value) {        try {            Interpreter bsh = initInterpreter (key, value);            synchronized (sp) {                if (!eval (bsh, outScript, outSource))                    sp.out (key, value);            }        } catch (Throwable t) {            throw new SpaceError (t);        }    }    public void out (Object key, Object value, long timeout) {        try {            Interpreter bsh = initInterpreter (key, value, timeout);            synchronized (sp) {                if (!eval (bsh, outScript, outSource))                    sp.out (key, value, timeout);            }        } catch (Throwable t) {            throw new SpaceError (t);        }    }    public void push (Object key, Object value) {        try {            Interpreter bsh = initInterpreter (key, value);            synchronized (sp) {                if (!eval (bsh, pushScript, pushSource))                    sp.out (key, value);            }        } catch (Throwable t) {            throw new SpaceError (t);        }    }    public void push (Object key, Object value, long timeout) {        try {            Interpreter bsh = initInterpreter (key, value, timeout);            synchronized (sp) {                if (!eval (bsh, pushScript, pushSource))                    sp.out (key, value, timeout);            }        } catch (Throwable t) {            throw new SpaceError (t);        }    }    public Object in  (Object key) {        try {            Interpreter bsh = initInterpreter (key);            synchronized (sp) {                if (eval (bsh, inScript, inSource)) {                    return bsh.get ("value");                } else {                    return sp.in (key);                }            }        } catch (Throwable t) {            throw new SpaceError (t);        }    }    public Object rd  (Object key) {        try {            Interpreter bsh = initInterpreter (key);            synchronized (sp) {                if (eval (bsh, rdScript, rdSource)) {                    return bsh.get ("value");                } else {                    return sp.rd (key);                }            }        } catch (Throwable t) {            throw new SpaceError (t);        }    }    public Object in  (Object key, long timeout) {        try {            Interpreter bsh = initInterpreter (key, timeout);            synchronized (sp) {                if (eval (bsh, inScript, inSource)) {                    return bsh.get ("value");                } else {                    return sp.in (key, timeout);                }            }        } catch (Throwable t) {            throw new SpaceError (t);        }    }    public Object rd  (Object key, long timeout) {        try {            Interpreter bsh = initInterpreter (key, timeout);            synchronized (sp) {                if (eval (bsh, rdScript, rdSource)) {                    return bsh.get ("value");                } else {                    return sp.rd (key, timeout);                }            }        } catch (Throwable t) {            throw new SpaceError (t);        }    }    public Object inp (Object key) {        try {            Interpreter bsh = initInterpreter (key);            bsh.set ("probe", true);            synchronized (sp) {                if (eval (bsh, inScript, inSource)) {                    return bsh.get ("value");                } else {                    return sp.inp (key);                }            }        } catch (Throwable t) {            throw new SpaceError (t);        }    }    public Object rdp (Object key) {        try {            Interpreter bsh = initInterpreter (key);            bsh.set ("probe", true);            synchronized (sp) {                if (eval (bsh, rdScript, rdSource)) {                    return bsh.get ("value");                } else {                    return sp.rdp (key);                }            }        } catch (Throwable t) {            throw new SpaceError (t);        }    }    private void grabSpace (Element e) {        sp = SpaceFactory.getSpace (e != null ? e.getText() : "");    }    private String getScript (Element e) {        return (e == null) ? null : e.getText();    }    private void launch (Element e) {        // final Interpreter bsh = initInterpreter ();        final String script = e.getText();        final String source = e.getAttributeValue ("source");        new Thread ("SpaceLet-launch") {            public void run () {                try {                    eval (initInterpreter(), script, source);                } catch (Throwable t) {                    getLog().warn (t);                }            }        }.start ();    }    private void initSpace (Element e) throws ConfigurationException {        if (e == null)            return;        try {            eval (                initInterpreter(),                 e.getText(),                 e.getAttributeValue ("source")            );        } catch (Throwable t) {            throw new ConfigurationException (t);        }    }    private Interpreter initInterpreter () throws EvalError {        Interpreter bsh = new Interpreter ();        bsh.set ("sp", sp);        bsh.set ("spacelet", this);         bsh.set ("log", getLog());        return bsh;    }    private Interpreter initInterpreter (Object key) throws EvalError {        Interpreter bsh = initInterpreter ();        bsh.set ("key", key);        return bsh;    }    private Interpreter initInterpreter (Object key, Object value)         throws EvalError    {        Interpreter bsh = initInterpreter (key);        bsh.set ("value", value);        return bsh;    }    private Interpreter initInterpreter         (Object key, Object value, long timeout)         throws EvalError     {        Interpreter bsh = initInterpreter (key, value);        bsh.set ("timeout", timeout);        return bsh;    }    private Interpreter initInterpreter (Object key, long timeout)         throws EvalError    {        Interpreter bsh = initInterpreter (key);        bsh.set ("timeout", timeout);        return bsh;    }    private boolean eval (Interpreter bsh, String script, String source)        throws EvalError, FileNotFoundException, IOException    {        boolean rc = false;        if (script != null) {            Object retValue = bsh.eval (script);            if (source != null)                retValue = bsh.source (source);            if (retValue instanceof Boolean) {                rc = ((Boolean)retValue).booleanValue ();            }        }        return rc;    }}

⌨️ 快捷键说明

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