persistencefactory.java

来自「JGRoups源码」· Java 代码 · 共 202 行

JAVA
202
字号
package org.jgroups.persistence;/** * @author Mandar Shinde * This class is the factory to get access to any DB based or file based * implementation. None of the implementations should expose directly * to user for migration purposes */import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.jgroups.util.Util;import java.io.FileInputStream;import java.io.IOException;import java.lang.reflect.Constructor;import java.util.Properties;public class PersistenceFactory{    protected final static Log log=LogFactory.getLog(PersistenceFactory.class);    /**     * Default private constructor// does nothing     */    private PersistenceFactory()    {    }    /**     * Singular public method to get access to any of the Persistence     * Manager implementations. It is important to known at this point     * that properties determine the implementation of the Persistence     * Manager, there is no direct interface which gives access to      * either DB implemented ot FILE implemented storage API.     * @return PersistenceFactory;     */    public static PersistenceFactory getInstance() {        log.error(" getting factory instance ");        if (_factory == null)            _factory = new PersistenceFactory();        return _factory;    }    /**     * Register a custom persistence manager as opposed to the     * {@link FilePersistenceManager} or {@link DBPersistenceManager}.     */     public synchronized void registerManager(PersistenceManager manager)    {        _manager = manager;    }    /**     * Reads the default properties and creates a persistencemanager     * The default properties are picked up from the $USER_HOME or      * from the classpath. Default properties are represented by     * "persist.properties"     * @return PersistenceManager     * @exception Exception;     */     public synchronized PersistenceManager createManager() throws Exception {        // will return null if not initialized        // uses default properties        if (_manager == null)        {            if (checkDB())                _manager = createManagerDB(propPath);            else                _manager = createManagerFile(propPath);        }        return _manager;    }    /**     * Duplicated signature to create PersistenceManager to allow user to     * provide property path.      * @param filePath complete pathname to get the properties     * @return PersistenceManager;     * @exception Exception;     */    public synchronized PersistenceManager createManager (String filePath) throws Exception     {        if (_manager == null)        {            if (checkDB(filePath))                _manager = createManagerDB(filePath);            else                _manager = createManagerFile(filePath);        }        return _manager;    }    /**     * Internal creator of DB persistence manager, the outside user accesses only     * the PersistenceManager interface API     */    private PersistenceManager createManagerDB(String filePath) throws Exception    {            if(log.isInfoEnabled()) log.info("Calling db persist from factory: " + filePath);        if (_manager == null)            _manager = new DBPersistenceManager(filePath);        return _manager;    }// end of DB persistence    /**     * creates instance of file based persistency manager     * @return PersistenceManager     */    private PersistenceManager createManagerFile(String filePath)    {            if(log.isInfoEnabled()) log.info("Creating file manager: " + filePath);        Properties props;        try        {            if (_manager == null)            {                props=readProps(filePath);                String classname=props.getProperty(filePersistMgr);                if(classname != null)                {                    Class cl=Util.loadClass(classname, this.getClass());                    Constructor ctor=cl.getConstructor(new Class[]{String.class});                    _manager=(PersistenceManager)ctor.newInstance(new Object[]{filePath});                }                else                {                    _manager = new FilePersistenceManager(filePath);                }            }            return _manager;        }        catch (Throwable t)        {            t.printStackTrace();            return null;        }    }// end of file persistence        /**     * checks the default properties for DB/File flag     * @return boolean;     * @exception Exception;     */    private boolean checkDB() throws Exception    {        Properties props=readProps(propPath);        String persist = props.getProperty(persistProp);        if ("DB".equals(persist))            return true;        return false;    }    /**     * checks the provided properties for DB/File flag     * @return boolean;     */    private boolean checkDB(String filePath) throws Exception    {        Properties props=readProps(filePath);        String persist = props.getProperty(persistProp);        if ("DB".equals(persist))            return true;        return false;    }    Properties readProps(String fileName) throws IOException    {        Properties props;        FileInputStream _stream = new FileInputStream(fileName);        props=new Properties();        props.load(_stream);        return props;    }    private static volatile PersistenceManager _manager = null;    private static volatile PersistenceFactory _factory = null;       /* Please set this according to configuration */    final static String propPath = "persist.properties";    final static String persistProp = "persist";    /** The class that implements a file-based PersistenceManager */    final static String filePersistMgr="filePersistMgr";}

⌨️ 快捷键说明

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