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

📄 qfactory.java

📁 POS is a Java&#174 platform-based, mission-critical, ISO-8583 based financial transaction library/fr
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * 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;import java.io.File;import java.io.FileInputStream;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.net.MalformedURLException;import java.util.Collection;import java.util.Iterator;import java.util.List;import java.util.MissingResourceException;import java.util.Properties;import java.util.ResourceBundle;import javax.management.Attribute;import javax.management.AttributeList;import javax.management.AttributeNotFoundException;import javax.management.InstanceAlreadyExistsException;import javax.management.InstanceNotFoundException;import javax.management.InvalidAttributeValueException;import javax.management.MBeanException;import javax.management.MBeanRegistrationException;import javax.management.MBeanServer;import javax.management.MalformedObjectNameException;import javax.management.NotCompliantMBeanException;import javax.management.ObjectInstance;import javax.management.ObjectName;import javax.management.ReflectionException;import org.jdom.Element;import org.jpos.core.Configurable;import org.jpos.core.Configuration;import org.jpos.core.ConfigurationException;import org.jpos.core.SimpleConfiguration;import org.jpos.core.XmlConfigurable;import org.jpos.util.LogSource;import org.jpos.util.Logger;/** * @author <a href="mailto:taherkordy@dpi2.dpi.net.ir">Alireza Taherkordi</a> * @author <a href="mailto:apr@cs.com.uy">Alejandro P. Revilla</a> * @version $Revision: 2594 $ $Date: 2008-01-22 14:41:31 -0200 (Tue, 22 Jan 2008) $ */public class QFactory {    ObjectName loaderName;    Q2 q2;    ResourceBundle classMapping;    public QFactory (ObjectName loaderName, Q2 q2) {        super ();        this.loaderName = loaderName;        this.q2  = q2;        classMapping = ResourceBundle.getBundle(this.getClass().getName());    }    public Object instantiate (Q2 server, Element e)         throws ReflectionException,               MBeanException,               InstanceNotFoundException    {        String clazz  = e.getAttributeValue ("class");        if (clazz == null) {            try {                clazz = classMapping.getString (e.getName());            } catch (MissingResourceException ex) {                // no class attribute, no mapping                // let MBeanServer do the yelling            }        }        MBeanServer mserver = server.getMBeanServer();        getExtraPath (server.getLoader (), e);        return mserver.instantiate (clazz, loaderName);    }    public ObjectInstance createQBean (Q2 server, Element e, Object obj)         throws ClassNotFoundException,                InstantiationException,               IllegalAccessException,               MalformedObjectNameException,               MalformedURLException,               InstanceAlreadyExistsException,               MBeanRegistrationException,               InstanceNotFoundException,               MBeanException,               NotCompliantMBeanException,               InvalidAttributeValueException,               ReflectionException,               ConfigurationException    {        String name   = e.getAttributeValue ("name");        if (name == null)            name = e.getName ();        ObjectName objectName = new ObjectName (Q2.QBEAN_NAME + name);        MBeanServer mserver = server.getMBeanServer();        if(mserver.isRegistered(objectName)) {            throw new InstanceAlreadyExistsException (name+" has already been deployed in another file.");        }        ObjectInstance instance = mserver.registerMBean (            obj, objectName         );        try {            setAttribute (mserver, objectName, "Name", name);            String logger = e.getAttributeValue ("logger");            if (logger != null)                setAttribute (mserver, objectName, "Logger", logger);            setAttribute (mserver, objectName, "Server", server);            setAttribute (mserver, objectName, "Persist", e);            configureQBean(mserver,objectName,e);            setConfiguration (obj, e);  // handle legacy (QSP v1) Configurables             if (obj instanceof QBean)                 mserver.invoke (objectName, "init",  null, null);        }        catch (ConfigurationException ce) {            mserver.unregisterMBean(objectName);            throw ce;        }        return instance;    }    public Q2 getQ2() {        return q2;    }    public void getExtraPath (QClassLoader loader, Element e) {        Element classpathElement = e.getChild ("classpath");        if (classpathElement != null) {            try {                loader = loader.scan (true);    // force a new classloader            } catch (Throwable t) {                getQ2().getLog().error(t);            }            Iterator iter = classpathElement.getChildren ("url").iterator();            while (iter.hasNext ()) {                Element u = (Element) iter.next ();                try {                    loader.addURL (u.getTextTrim ());                } catch (MalformedURLException ex) {                    q2.getLog().warn (u.getTextTrim(), ex);                }            }        }    }    public void setAttribute         (MBeanServer server, ObjectName objectName,          String attribute, Object value)        throws InstanceNotFoundException,               MBeanException,               InvalidAttributeValueException,               ReflectionException    {        try {            server.setAttribute (                objectName, new Attribute (attribute, value)            );        } catch (AttributeNotFoundException ex) {            // okay to fail        }    }    public void startQBean (Q2 server, ObjectName objectName)        throws ClassNotFoundException,                InstantiationException,               IllegalAccessException,               MalformedObjectNameException,               MalformedURLException,               InstanceAlreadyExistsException,               MBeanRegistrationException,               InstanceNotFoundException,               MBeanException,               NotCompliantMBeanException,               InvalidAttributeValueException,               ReflectionException    {        MBeanServer mserver = server.getMBeanServer();        mserver.invoke (objectName, "start",  null, null);    }    public void destroyQBean (Q2 server, ObjectName objectName, Object obj)        throws ClassNotFoundException,                InstantiationException,               IllegalAccessException,               MalformedObjectNameException,               MalformedURLException,               InstanceAlreadyExistsException,               MBeanRegistrationException,               InstanceNotFoundException,               MBeanException,               NotCompliantMBeanException,               InvalidAttributeValueException,               ReflectionException    {        MBeanServer mserver = server.getMBeanServer();        if (obj instanceof QBean) {            mserver.invoke (objectName, "stop",  null, null);            mserver.invoke (objectName, "destroy",  null, null);        }        if (objectName != null)            mserver.unregisterMBean (objectName);

⌨️ 快捷键说明

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