All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alogic.blob.HybirdBlobManager Maven / Gradle / Ivy

package com.alogic.blob;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.exception.ExceptionUtils;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.anysoft.util.Factory;
import com.anysoft.util.Properties;
import com.anysoft.util.PropertiesConstants;
import com.anysoft.util.XmlElementProperties;
import com.anysoft.util.XmlTools;

/**
 * 混合部署的BlobManager
 * 
 * @author yyduan
 *
 * @version 1.6.11.22 [duanyy 20180314] 
* - 修正HybirdBlobManager的主备规则
* * @version 1.6.13.18 [20200927 duanyy]
* - 增加getFile接口,可以传入更多参数
*/ public class HybirdBlobManager extends BlobManager.Abstract{ /** * 从属的BlobManager */ protected List secondary= new ArrayList(); /** * 主要的BlobManager */ protected BlobManager master = null; /** * 是否从master优先读取 */ protected boolean masterFirst = true; @Override public void configure(Element e, Properties p) { Properties props = new XmlElementProperties(e,p); NodeList nodeList = XmlTools.getNodeListByPath(e, "sink"); Factory f = new Factory(); for (int i = 0 ;i < nodeList.getLength() ; i ++){ Node n = nodeList.item(i); if (n.getNodeType() != Node.ELEMENT_NODE){ continue; } Element elem = (Element)n; try { BlobManager bm = f.newInstance(elem, props, "module"); if (XmlTools.getBoolean(elem, "default", false)){ //标记为default的bm专门用来做写操作 master = bm; }else{ secondary.add(bm); } }catch (Exception ex){ LOG.error("Can not create blob manager with " + XmlTools.node2String(elem)); LOG.error(ExceptionUtils.getStackTrace(ex)); } } configure(props); } @Override public void configure(Properties p){ super.configure(p); masterFirst = PropertiesConstants.getBoolean(p,"masterFirst", masterFirst); } @Override public BlobWriter newFile(String id) { return master != null ? master.newFile(id) : null; } @Override public BlobWriter newFile(String id,Properties ctx) { return master != null ? master.newFile(id,ctx) : null; } @Override public BlobReader getFile(String id) { if (masterFirst){ BlobReader reader = master == null ? null : master.getFile(id); return reader != null ? reader : getFileFromSecondary(id); }else{ BlobReader reader = getFileFromSecondary(id); return reader != null ? reader : master.getFile(id); } } /** * 从备用管理器中获取Reader * @param id 文件id * @return BlobReader */ protected BlobReader getFileFromSecondary(String id){ BlobReader reader = null; for (BlobManager bm:secondary){ reader = bm.getFile(id); if (reader != null){ return reader; } } return null; } protected boolean existFileInSecondary(String id){ boolean exist = false; for (BlobManager bm:secondary){ exist = bm.existFile(id); if (exist){ break; } } return exist; } @Override public boolean existFile(String id) { if (masterFirst){ boolean exist = existFileInSecondary(id); return exist ? exist : master.existFile(id); }else{ boolean exist = master == null ? false : master.existFile(id); return exist ? exist : existFileInSecondary(id); } } @Override public boolean deleteFile(String id) { return master != null ? master.deleteFile(id):false; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy