diff --git a/source/manager/ump-booter/src/main/java/com/jd/blockchain/ump/UmpBooter.java b/source/manager/ump-booter/src/main/java/com/jd/blockchain/ump/UmpBooter.java index 4bf8d7ae..a492386b 100644 --- a/source/manager/ump-booter/src/main/java/com/jd/blockchain/ump/UmpBooter.java +++ b/source/manager/ump-booter/src/main/java/com/jd/blockchain/ump/UmpBooter.java @@ -1,8 +1,10 @@ package com.jd.blockchain.ump; +import com.jd.blockchain.ump.web.RetrievalConfigListener; import org.springframework.boot.SpringApplication; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; @@ -16,6 +18,7 @@ public class UmpBooter { private static final String ARG_HOST = "-h"; private static final String CONFIG = "BOOT-INF" + File.separator + "classes" + File.separator + "config.properties"; + private static final String CONFIG_APPLICATION = "BOOT-INF" + File.separator + "classes" + File.separator + "application.properties"; private static final String CONFIG_PROP_HOST = "server.host"; @@ -44,7 +47,22 @@ public class UmpBooter { String[] args = argList.toArray(new String[argList.size()]); // 启动服务器; - SpringApplication.run(UmpConfiguration.class, args); +// SpringApplication.run(UmpConfiguration.class, args); + InputStream inputStream = UmpBooter.class.getResourceAsStream(File.separator + CONFIG_APPLICATION); + if (inputStream == null) { + System.err.println("InputStream is NULL !!!"); + } + Properties props = new Properties(); + try { + props.load(inputStream); + } catch (IOException e) { + e.printStackTrace(); + } + + // 启动服务器; + SpringApplication springApplication = new SpringApplication(UmpConfiguration.class); + springApplication.addListeners(new RetrievalConfigListener(props)); + springApplication.run(args); } private static Server server(String[] args) { diff --git a/source/manager/ump-booter/src/main/resources/application.properties b/source/manager/ump-booter/src/main/resources/application.properties index b5ef6943..a0ba8881 100644 --- a/source/manager/ump-booter/src/main/resources/application.properties +++ b/source/manager/ump-booter/src/main/resources/application.properties @@ -2,4 +2,7 @@ server.tomcat.uri-encoding=utf-8 spring.mvc.favicon.enabled=false -logging.config=classpath:log4j2-jump.xml \ No newline at end of file +logging.config=classpath:log4j2-jump.xml + +retrieval.schemaUrl=http://192.168.151.39:8082 +retrieval.taskUrl=http://192.168.151.39:10005 \ No newline at end of file diff --git a/source/manager/ump-booter/src/main/resources/config.properties b/source/manager/ump-booter/src/main/resources/config.properties index deaf015e..fb166ba2 100644 --- a/source/manager/ump-booter/src/main/resources/config.properties +++ b/source/manager/ump-booter/src/main/resources/config.properties @@ -5,4 +5,7 @@ server.host=0.0.0.0 server.port=8080 # 本地数据库存储位置 -db.url=rocksdb://#project#/jumpdb \ No newline at end of file +db.url=rocksdb://#project#/jumpdb + +schema.retrieval.url=http://192.168.151.39:8082 +task.retrieval.url=http://192.168.151.39:10005 \ No newline at end of file diff --git a/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/ApiResult.java b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/ApiResult.java new file mode 100644 index 00000000..4632bc04 --- /dev/null +++ b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/ApiResult.java @@ -0,0 +1,73 @@ +package com.jd.blockchain.ump.model; + +/** + * @author zhaogw + * date 2019/7/10 15:31 + */ +public class ApiResult { + /** + * 错误码,对应{@link ErrorCode},表示一种错误类型 + * 如果是成功,则code为1 + */ + private int code; + /** + * 具体解释 + */ + private String message; + /** + * 返回的结果包装在value中,value可以是单个对象 + */ + private Object value; + + public ApiResult (){ } + + public ApiResult (Object obj){ + this.value = obj; + } + + public ApiResult (int code, String message){ + this.code = code; + this.message = message; + } + + public ApiResult(ErrorCode errorCode){ + this.code = errorCode.getCode(); + this.message = errorCode.getMsg(); + } + + public ApiResult(ErrorCode errorCode, Object obj){ + this.code = errorCode.getCode(); + this.message = errorCode.getMsg(); + this.value = obj; + } + + public ApiResult (int code, String message, Object value){ + this.code = code; + this.message = message; + this.value = value; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Object getValue() { + return value; + } + + public void setValue(Object value) { + this.value = value; + } +} diff --git a/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/ErrorCode.java b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/ErrorCode.java new file mode 100644 index 00000000..1e0031d6 --- /dev/null +++ b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/ErrorCode.java @@ -0,0 +1,33 @@ +package com.jd.blockchain.ump.model; + +/** + * @author zhaogw + * date 2019/7/10 15:32 + */ +public enum ErrorCode { + SUCCESS(1,"成功"), + NO_PERMISSION(2,"权限不足"), + SERVER_ERROR(3,"服务器异常"), + AUTH_ERROR(4,"认证失败"), + PARAMS_ERROR(5,"参数错误"), + JSON_PARSE_ERROR(6,"Json解析错误"), + ILLEAGAL_STRING(7,"非法字符串"), + GEN_KEY_INPUT_LACK(8,"缺少必要的输入参数:name/randomSeed/basePath/password"), + UNKNOW_ERROR(10000,"未知错误"); + + private int code; + private String msg; + + ErrorCode(int code,String msg){ + this.code = code; + this.msg = msg; + } + + public int getCode() { + return code; + } + + public String getMsg() { + return msg; + } +} diff --git a/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/UmpConstant.java b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/UmpConstant.java index 5f383e02..f6903306 100644 --- a/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/UmpConstant.java +++ b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/UmpConstant.java @@ -101,4 +101,17 @@ public class UmpConstant { public static final String PATH_LOCAL_CONFIG = PATH_CONFIG_INIT + File.separator + "local.conf"; public static final String PATH_LEDGER_INIT_CONFIG = PATH_CONFIG_INIT + File.separator + "ledger.init"; + + public static final String PEER_HOST_IP = "peerHostIp"; + public static final String INIT_PORT = "iPort"; + public static final String CONSENSUS_PORT = "cPort"; + public static final String DELIMETER_QUESTION = "?"; //逗号分隔符; + public static final String LEDGER_LIST = "ledger_list"; //the key that save all the ledger hash in the rocksdb; + public static final int MEMORY_MAP_MAX_COUNT=10000; + public static final int MEMORY_MAP_REMOVE_COUNT=50; + public static final String ALL_LEDGER="all_ledger"; + public static final String DELIMETER_MINUS = "-"; + public static final String SCHEMA_PREFIX = "schema_"; + public static final String SCHEMA_RETRIEVAL_URL = "retrieval.schemaUrl"; + public static final String TASK_RETRIEVAL_URL = "retrieval.taskUrl"; } diff --git a/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/DataAccountSchema.java b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/DataAccountSchema.java new file mode 100644 index 00000000..a2b43d70 --- /dev/null +++ b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/DataAccountSchema.java @@ -0,0 +1,47 @@ +package com.jd.blockchain.ump.model.penetrate; + +import java.util.List; + +/** + * 数据账户信息 + * @author zhaogw + * date 2019/7/26 14:49 + */ +public class DataAccountSchema { + private String ledgerHash; + private String dataAccount; + private String memo; + private List fieldSchemaList; + + public String getLedgerHash() { + return ledgerHash; + } + + public void setLedgerHash(String ledgerHash) { + this.ledgerHash = ledgerHash; + } + + public String getDataAccount() { + return dataAccount; + } + + public void setDataAccount(String dataAccount) { + this.dataAccount = dataAccount; + } + + public String getMemo() { + return memo; + } + + public void setMemo(String memo) { + this.memo = memo; + } + + public List getFieldSchemaList() { + return fieldSchemaList; + } + + public void setFieldSchemaList(List fieldSchemaList) { + this.fieldSchemaList = fieldSchemaList; + } +} diff --git a/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/FieldSchema.java b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/FieldSchema.java new file mode 100644 index 00000000..40605128 --- /dev/null +++ b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/FieldSchema.java @@ -0,0 +1,46 @@ +package com.jd.blockchain.ump.model.penetrate; + +/** + * ump中记录的字段信息; + * @author zhaogw + * date 2019/7/26 14:50 + */ +public class FieldSchema { + private String code; + private String fieldType; + private boolean isPrimary; + //备注; + private String memo; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getFieldType() { + return fieldType; + } + + public void setFieldType(String fieldType) { + this.fieldType = fieldType; + } + + public boolean isPrimary() { + return isPrimary; + } + + public void setPrimary(boolean primary) { + isPrimary = primary; + } + + public String getMemo() { + return memo; + } + + public void setMemo(String memo) { + this.memo = memo; + } +} diff --git a/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/LeaderDomain.java b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/LeaderDomain.java new file mode 100644 index 00000000..cfb5ed58 --- /dev/null +++ b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/LeaderDomain.java @@ -0,0 +1,79 @@ +package com.jd.blockchain.ump.model.penetrate; + +import com.alibaba.fastjson.annotation.JSONField; + +import java.util.List; + +/** + * mediator's domain; + * @author zhaogw + * date 2019/7/2 18:02 + */ +public class LeaderDomain { + + @JSONField(name="host") + private String host; + + @JSONField(name="port") + private String port; + + @JSONField(name="createTime") + private String createTime; + + @JSONField(name="ledgerSeed") + private String ledgerSeed; + + @JSONField(name="peerDomainList") + private List peerDomainList; + + @JSONField(name="ledgerHash") + private String ledgerHash; + + public List getPeerDomainList() { + return peerDomainList; + } + + public void setPeerDomainList(List peerDomainList) { + this.peerDomainList = peerDomainList; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getLedgerSeed() { + return ledgerSeed; + } + + public void setLedgerSeed(String ledgerSeed) { + this.ledgerSeed = ledgerSeed; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getPort() { + return port; + } + + public void setPort(String port) { + this.port = port; + } + + public String getLedgerHash() { + return ledgerHash; + } + + public void setLedgerHash(String ledgerHash) { + this.ledgerHash = ledgerHash; + } +} diff --git a/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/PeerDomain.java b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/PeerDomain.java new file mode 100644 index 00000000..96379e15 --- /dev/null +++ b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/PeerDomain.java @@ -0,0 +1,177 @@ +package com.jd.blockchain.ump.model.penetrate; + +import com.alibaba.fastjson.annotation.JSONField; + +/** + * @author zhaogw + * date 2019/7/2 10:10 + */ +public class PeerDomain { + @JSONField(name="peerId") + private int peerId; + + private String basePath; + + @JSONField(name="peerName") + private String peerName; + + @JSONField(name="host") + private String host; + + private String serverPort; + + @JSONField(name="initPort") + private String initPort; + + @JSONField(name="consensusPort") + private String consensusPort; + + @JSONField(name="visitPort") + private String visitPort; + + @JSONField(name="mediatorUrl") + private String mediatorUrl; + + private String dbUri; + + private boolean gatewayBindPeer; + + //the random String from front input by mouse device; + private String randomSeed; + + @JSONField(name="peerPubKey") + private String peerPubKey; + + private String peerPrivKey; + + private String peerRawPasswd; + private String peerPasswd; + + public int getPeerId() { + return peerId; + } + + public void setPeerId(int peerId) { + this.peerId = peerId; + } + + public String getBasePath() { + return basePath; + } + + public void setBasePath(String basePath) { + this.basePath = basePath; + } + + public String getPeerName() { + return peerName; + } + + public void setPeerName(String peerName) { + this.peerName = peerName; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getServerPort() { + return serverPort; + } + + public void setServerPort(String serverPort) { + this.serverPort = serverPort; + } + + public String getInitPort() { + return initPort; + } + + public void setInitPort(String initPort) { + this.initPort = initPort; + } + + public String getConsensusPort() { + return consensusPort; + } + + public void setConsensusPort(String consensusPort) { + this.consensusPort = consensusPort; + } + + public String getVisitPort() { + return visitPort; + } + + public void setVisitPort(String visitPort) { + this.visitPort = visitPort; + } + + public String getMediatorUrl() { + return mediatorUrl; + } + + public void setMediatorUrl(String mediatorUrl) { + this.mediatorUrl = mediatorUrl; + } + + public String getDbUri() { + return dbUri; + } + + public void setDbUri(String dbUri) { + this.dbUri = dbUri; + } + + public boolean isGatewayBindPeer() { + return gatewayBindPeer; + } + + public void setGatewayBindPeer(boolean gatewayBindPeer) { + this.gatewayBindPeer = gatewayBindPeer; + } + + public String getRandomSeed() { + return randomSeed; + } + + public void setRandomSeed(String randomSeed) { + this.randomSeed = randomSeed; + } + + public String getPeerPubKey() { + return peerPubKey; + } + + public void setPeerPubKey(String peerPubKey) { + this.peerPubKey = peerPubKey; + } + + public String getPeerPrivKey() { + return peerPrivKey; + } + + public void setPeerPrivKey(String peerPrivKey) { + this.peerPrivKey = peerPrivKey; + } + + public String getPeerRawPasswd() { + return peerRawPasswd; + } + + public void setPeerRawPasswd(String peerRawPasswd) { + this.peerRawPasswd = peerRawPasswd; + } + + public String getPeerPasswd() { + return peerPasswd; + } + + public void setPeerPasswd(String peerPasswd) { + this.peerPasswd = peerPasswd; + } +} diff --git a/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/SchemaDomain.java b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/SchemaDomain.java new file mode 100644 index 00000000..2e9d986c --- /dev/null +++ b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/SchemaDomain.java @@ -0,0 +1,90 @@ +package com.jd.blockchain.ump.model.penetrate; + +import com.alibaba.fastjson.annotation.JSONField; +import com.jd.blockchain.ump.model.UmpConstant; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * @author zhaogw + * date 2019/7/19 11:33 + */ +public class SchemaDomain { + + @JSONField(serialize = false) + private String schemaId; + + @JSONField(serialize = false) + private String schemaAllId; + + @JSONField(name="ledger") + private String ledgerHash; + + @JSONField(name="associate_account") + private String dataAccount; + + @JSONField(serialize = false) + private List fieldSchemaList; + + private String content; + + public String getSchemaId() { + return schemaId; + } + + public void setSchemaId(String schemaId) { + this.schemaId = schemaId; + } + + public String getLedgerHash() { + return ledgerHash; + } + + public void setLedgerHash(String ledgerHash) { + this.ledgerHash = ledgerHash; + } + + public String getDataAccount() { + return dataAccount; + } + + public void setDataAccount(String dataAccount) { + this.dataAccount = dataAccount; + } + + public String getContent() { + if(CollectionUtils.isEmpty(fieldSchemaList)){ + throw new IllegalStateException("content is empty! you must choose the field first!"); + } + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append("type "+this.schemaId).append("{").append(" "); + for(FieldSchema fieldSchema : fieldSchemaList){ + if(fieldSchema.isPrimary()){ + stringBuffer.append(fieldSchema.getCode()+"(isPrimaryKey: Boolean = true):"+fieldSchema.getFieldType()).append(" "); + }else { + stringBuffer.append(fieldSchema.getCode()+":"+fieldSchema.getFieldType()).append(" "); + } + } + stringBuffer.append("}"); + return stringBuffer.toString(); + } + + public void setContent(String content) { + this.content = content; + } + + public List getFieldSchemaList() { + return fieldSchemaList; + } + + public void setFieldSchemaList(List fieldSchemaList) { + this.fieldSchemaList = fieldSchemaList; + } + + public String getSchemaAllId() { + this.schemaAllId = schemaId+ UmpConstant.DELIMETER_MINUS+ledgerHash.substring(0,6)+ + UmpConstant.DELIMETER_MINUS+ dataAccount.substring(0,6); + return schemaAllId; + } +} diff --git a/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/store/MemQueue.java b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/store/MemQueue.java new file mode 100644 index 00000000..315b6ba5 --- /dev/null +++ b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/store/MemQueue.java @@ -0,0 +1,70 @@ +package com.jd.blockchain.ump.model.penetrate.store; + +import com.jd.blockchain.ump.model.UmpConstant; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + +/** + * 通过枚举的方式来实现内存队列;避免大并发时引起的不必要的多次实例化; + * + * @author zhaoguangwei + * + */ +public enum MemQueue { + instance; + private BlockingQueue queue = null; + + private MemQueue() { + queue = new LinkedBlockingQueue(); + } + + /** + * 记录放入内存队列; + * @param key + * @return + */ + public boolean put(String key) { + boolean rtn = false; + try { + while (queue.size() >= UmpConstant.MEMORY_MAP_MAX_COUNT) { + queue.remove(); + } + queue.add(key); + rtn = true; + } catch (Exception e) { + e.printStackTrace(); + } + return rtn; + } + + /** + * 从内存队列取出一条记录; + * + * @return + */ + public String get() { + String record = null; + try { + record = queue.take(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return record; + } + + /** + * 内存队列清除; + */ + public void clear() { + queue.clear(); + } + + /** + * 获得记录数; + * + * @return + */ + public int size() { + return queue.size(); + } +} diff --git a/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/store/MemStore.java b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/store/MemStore.java new file mode 100644 index 00000000..99d2a06c --- /dev/null +++ b/source/manager/ump-model/src/main/java/com/jd/blockchain/ump/model/penetrate/store/MemStore.java @@ -0,0 +1,49 @@ +package com.jd.blockchain.ump.model.penetrate.store; + +import com.jd.blockchain.ump.model.UmpConstant; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import static com.jd.blockchain.ump.model.UmpConstant.MEMORY_MAP_MAX_COUNT; +import static com.jd.blockchain.ump.model.UmpConstant.MEMORY_MAP_REMOVE_COUNT; + +/** + * @author zhaogw + * date 2019/7/17 17:10 + */ +public enum MemStore { + instance; + + private Map records = null; + + MemStore(){ + records = new ConcurrentHashMap(); + } + + public Object get(String key){ + return records.get(key); + } + + public Object remove(String key){ + return records.remove(key); + } + + public boolean put(String key, Object obj){ + boolean rtn = false; + MemQueue.instance.put(key); + if(records.size()>MEMORY_MAP_MAX_COUNT){ + //clear 50 records; + for(int i=0; i< MEMORY_MAP_REMOVE_COUNT; i++){ + String _key = MemQueue.instance.get(); + if(_key.equals(UmpConstant.ALL_LEDGER)){ + //don't remove the all_ledger; + continue; + } + records.remove(_key); + } + } + records.put(key,obj); + return true; + } +} diff --git a/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/DataAccountUmpService.java b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/DataAccountUmpService.java new file mode 100644 index 00000000..7d42cb47 --- /dev/null +++ b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/DataAccountUmpService.java @@ -0,0 +1,26 @@ +/** + * Copyright: Copyright 2016-2020 JD.COM All Right Reserved + * FileName: com.jd.blockchain.gateway.service.DataRetrievalService + * Author: shaozhuguang + * Department: 区块链研发部 + * Date: 2019/1/15 下午3:08 + * Description: + */ +package com.jd.blockchain.ump.service; + +import com.jd.blockchain.ump.model.penetrate.DataAccountSchema; + +/** + * data account ump store; + */ +public interface DataAccountUmpService { + /** + * 整体新增dataAccountSchema,单独某个field不会更新;如果原先库中有记录,则更新为最新内容; + * @param dataAccountSchema + */ + boolean addDataAccountSchema(DataAccountSchema dataAccountSchema); + + DataAccountSchema deleteDataAcccountSchema(String ledgerHash, String dataAccount); + + DataAccountSchema findDataAccountSchema(String ledgerHash, String dataAccount); +} \ No newline at end of file diff --git a/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/DataAccountUmpServiceImpl.java b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/DataAccountUmpServiceImpl.java new file mode 100644 index 00000000..1be066c0 --- /dev/null +++ b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/DataAccountUmpServiceImpl.java @@ -0,0 +1,31 @@ +package com.jd.blockchain.ump.service; + +import com.jd.blockchain.ump.model.penetrate.DataAccountSchema; +import com.jd.blockchain.ump.model.penetrate.store.MemStore; +import org.springframework.stereotype.Service; + +import static com.jd.blockchain.ump.model.UmpConstant.SCHEMA_PREFIX; +import static com.jd.blockchain.utils.BaseConstant.DELIMETER_UNDERLINE; + +/** + * @author zhaogw + * date 2019/7/26 15:14 + */ +@Service +public class DataAccountUmpServiceImpl implements DataAccountUmpService { + @Override + public boolean addDataAccountSchema(DataAccountSchema dataAccountSchema) { + return MemStore.instance.put(SCHEMA_PREFIX+dataAccountSchema.getLedgerHash()+ + DELIMETER_UNDERLINE+dataAccountSchema.getDataAccount(),dataAccountSchema); + } + + @Override + public DataAccountSchema deleteDataAcccountSchema(String ledgerHash, String dataAccount) { + return (DataAccountSchema)MemStore.instance.remove(SCHEMA_PREFIX+ledgerHash+ DELIMETER_UNDERLINE+dataAccount); + } + + @Override + public DataAccountSchema findDataAccountSchema(String ledgerHash, String dataAccount) { + return (DataAccountSchema)MemStore.instance.get(SCHEMA_PREFIX+ledgerHash+ DELIMETER_UNDERLINE+dataAccount); + } +} diff --git a/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/DataRetrievalService.java b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/DataRetrievalService.java new file mode 100644 index 00000000..8a335872 --- /dev/null +++ b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/DataRetrievalService.java @@ -0,0 +1,28 @@ +/** + * Copyright: Copyright 2016-2020 JD.COM All Right Reserved + * FileName: com.jd.blockchain.gateway.service.DataRetrievalService + * Author: shaozhuguang + * Department: 区块链研发部 + * Date: 2019/1/15 下午3:08 + * Description: + */ +package com.jd.blockchain.ump.service; + +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +/** + * + * @author shaozhuguang + * @create 2019/1/15 + * @since 1.0.0 + */ + +public interface DataRetrievalService { + + String retrieval(String url) throws Exception; + String retrievalPost(String url, JSONObject jsonObject) throws Exception; + String retrievalPost(String url, String queryString) throws Exception; + String delete(String url) throws Exception; +} \ No newline at end of file diff --git a/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/DataRetrievalServiceHandler.java b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/DataRetrievalServiceHandler.java new file mode 100644 index 00000000..55e05470 --- /dev/null +++ b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/DataRetrievalServiceHandler.java @@ -0,0 +1,45 @@ +/** + * Copyright: Copyright 2016-2020 JD.COM All Right Reserved + * FileName: com.jd.blockchain.gateway.service.DeepQueryServiceImpl + * Author: shaozhuguang + * Department: 区块链研发部 + * Date: 2019/1/15 下午3:09 + * Description: + */ +package com.jd.blockchain.ump.service; + +import com.alibaba.fastjson.JSONObject; +import com.jd.blockchain.ump.util.HttpClientPool; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * + * @author shaozhuguang + * @create 2019/1/15 + * @since 1.0.0 + */ +@Component +public class DataRetrievalServiceHandler implements DataRetrievalService { + + @Override + public String retrieval(String url) throws Exception { + return HttpClientPool.get(url); + } + + @Override + public String retrievalPost(String url, JSONObject jsonObject) throws Exception { + return HttpClientPool.jsonPost(url,jsonObject.toJSONString()); + } + + @Override + public String delete(String url) throws Exception { + return HttpClientPool.delete(url); + } + + @Override + public String retrievalPost(String url, String queryString) throws Exception { + return HttpClientPool.jsonPost(url,queryString); + } +} \ No newline at end of file diff --git a/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/UmpStoreService.java b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/UmpStoreService.java new file mode 100644 index 00000000..658a6017 --- /dev/null +++ b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/UmpStoreService.java @@ -0,0 +1,51 @@ +/** + * Copyright: Copyright 2016-2020 JD.COM All Right Reserved + * FileName: com.jd.blockchain.gateway.service.DataRetrievalService + * Author: shaozhuguang + * Department: 区块链研发部 + * Date: 2019/1/15 下午3:08 + * Description: + */ +package com.jd.blockchain.ump.service; + +import com.jd.blockchain.ump.model.penetrate.LeaderDomain; + +import java.util.List; + +/** + * data store; + */ +public interface UmpStoreService { + /** + * get ledger info by ledgerHash; + * @param ledgerHash + * @return + */ + LeaderDomain findLedgerInfo(String ledgerHash); + + /** + * get all ledgers; + * @return + */ + List findAllLedgers(); + + /** + * get all states by seed; + * @param seed + * @return + */ + List findStates(String seed); + + /** + * get value by key; + * @param key + * @return + */ + Object findRecord(String key); + + void saveLedgerInfo(LeaderDomain leaderDomain); + + void saveRecord(String key, Object obj); + + void saveState4Seed(String key, String state); +} \ No newline at end of file diff --git a/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/UmpStoreServiceImpl.java b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/UmpStoreServiceImpl.java new file mode 100644 index 00000000..a601765f --- /dev/null +++ b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/service/UmpStoreServiceImpl.java @@ -0,0 +1,76 @@ +/** + * Copyright: Copyright 2016-2020 JD.COM All Right Reserved + * FileName: com.jd.blockchain.gateway.service.DataRetrievalService + * Author: shaozhuguang + * Department: 区块链研发部 + * Date: 2019/1/15 下午3:08 + * Description: + */ +package com.jd.blockchain.ump.service; + +import com.jd.blockchain.ump.model.UmpConstant; +import com.jd.blockchain.ump.model.penetrate.LeaderDomain; +import com.jd.blockchain.ump.model.penetrate.store.MemStore; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * data store; + */ +@Service +public class UmpStoreServiceImpl implements UmpStoreService{ + @Override + public LeaderDomain findLedgerInfo(String ledgerHash) { + return (LeaderDomain) MemStore.instance.get(ledgerHash); + } + + @Override + public List findAllLedgers() { + return (List)MemStore.instance.get(UmpConstant.ALL_LEDGER); + } + + @Override + public List findStates(String seed) { + return (List)MemStore.instance.get(seed); + } + + @Override + public Object findRecord(String key) { + return MemStore.instance.get(key); + } + + @Override + public void saveLedgerInfo(LeaderDomain leaderDomain) { + MemStore.instance.put(leaderDomain.getLedgerHash(),leaderDomain); + //also put it into ALL_LEDGER; + Object obj = MemStore.instance.get(UmpConstant.ALL_LEDGER); + List leaderDomains = null; + if(obj == null){ + leaderDomains = new ArrayList<>(); + }else { + leaderDomains = (List)obj; + } + leaderDomains.add(leaderDomain); + MemStore.instance.put(UmpConstant.ALL_LEDGER,leaderDomains); + } + + @Override + public void saveRecord(String key, Object obj) { + MemStore.instance.put(key,obj); + } + + @Override + public void saveState4Seed(String key, String state) { + Object obj = MemStore.instance.get(key); + List states = null; + if(obj == null){ + states = new ArrayList<>(); + }else { + states = (List)obj; + } + states.add(state); + MemStore.instance.put(key,states); + } +} \ No newline at end of file diff --git a/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/util/HttpClientPool.java b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/util/HttpClientPool.java index dd575d0d..d3ee0541 100644 --- a/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/util/HttpClientPool.java +++ b/source/manager/ump-service/src/main/java/com/jd/blockchain/ump/util/HttpClientPool.java @@ -8,14 +8,13 @@ */ package com.jd.blockchain.ump.util; +import com.alibaba.fastjson.JSONObject; import org.apache.http.*; +import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpRequestRetryHandler; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.client.methods.*; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; @@ -29,14 +28,14 @@ import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicNameValuePair; +import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import javax.net.ssl.SSLException; import javax.net.ssl.SSLHandshakeException; -import java.io.IOException; -import java.io.InterruptedIOException; -import java.io.UnsupportedEncodingException; +import java.io.*; import java.net.UnknownHostException; import java.nio.charset.Charset; import java.util.ArrayList; @@ -286,4 +285,19 @@ public class HttpClientPool { EntityUtils.consume(entity); return result; } + + public static String delete(String url) throws IOException { + HttpDelete httpDelete = new HttpDelete(url); + config(httpDelete); + try (CloseableHttpResponse response = httpDelete(url, httpDelete)) { + return parseResponse(response); + } + } + + private static CloseableHttpResponse httpDelete(String url, HttpDelete httpDelete) throws IOException { + return getHttpClient(url) + .execute(httpDelete, HttpClientContext.create()); + } + + } \ No newline at end of file diff --git a/source/manager/ump-web/src/main/java/com/jd/blockchain/ump/controller/RetrievalController.java b/source/manager/ump-web/src/main/java/com/jd/blockchain/ump/controller/RetrievalController.java new file mode 100644 index 00000000..b903e5c1 --- /dev/null +++ b/source/manager/ump-web/src/main/java/com/jd/blockchain/ump/controller/RetrievalController.java @@ -0,0 +1,270 @@ +package com.jd.blockchain.ump.controller; + +import com.alibaba.fastjson.JSONObject; +import com.jd.blockchain.ump.model.ApiResult; +import com.jd.blockchain.ump.model.ErrorCode; +import com.jd.blockchain.ump.model.UmpConstant; +import com.jd.blockchain.ump.model.penetrate.DataAccountSchema; +import com.jd.blockchain.ump.model.penetrate.SchemaDomain; +import com.jd.blockchain.ump.service.DataAccountUmpService; +import com.jd.blockchain.ump.service.DataRetrievalService; +import com.jd.blockchain.ump.web.RetrievalConfig; +import com.jd.blockchain.utils.ConsoleUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; + +/** + * @Author zhaogw + * date 2019/07/18 17:01 + */ +@RestController +@RequestMapping(path = "/schema") +public class RetrievalController { + private static final Log log = LogFactory.getLog(RetrievalController.class); + + @Autowired + private DataRetrievalService dataRetrievalService; + + @Autowired + private DataAccountUmpService dataAccountUmpService; + + + /** + * add schema by web; + * @param request + * @return + */ + @RequestMapping(method = RequestMethod.POST, value = "") + public Object addSchema4Web(HttpServletRequest request, @RequestBody SchemaDomain schemaDomain) { + String result; + if (RetrievalConfig.getSchemaUrl() == null || RetrievalConfig.getSchemaUrl().length() <= 0) { + result = "{'message':'OK','data':'" + "schema.retrieval.url is empty" + "'}"; + } else { + String queryParams = request.getQueryString() == null ? "": request.getQueryString(); + String fullQueryUrl = new StringBuffer(RetrievalConfig.getSchemaUrl()) + .append(request.getRequestURI()) + .append(UmpConstant.DELIMETER_QUESTION) + .append(queryParams) + .toString(); + try { + + result = dataRetrievalService.retrievalPost(fullQueryUrl,JSONObject.toJSONString(schemaDomain)); + ConsoleUtils.info("request = {%s} \r\n result = {%s} \r\n", fullQueryUrl, result); + } catch (Exception e) { + result = "{'message':'error','data':'" + e.getMessage() + "'}"; + } + } + return JSONObject.parse(result); + } + + /** + * add schema; + * @param request + * @return + */ +// @RequestMapping(method = RequestMethod.POST, value = "") + @Deprecated + public Object addSchema(HttpServletRequest request,@RequestBody JSONObject jsonObject) { + String result; + if (RetrievalConfig.getSchemaUrl() == null || RetrievalConfig.getSchemaUrl().length() <= 0) { + result = "{'message':'OK','data':'" + "schema.retrieval.url is empty" + "'}"; + } else { + String queryParams = request.getQueryString() == null ? "": request.getQueryString(); + String fullQueryUrl = new StringBuffer(RetrievalConfig.getSchemaUrl()) + .append(request.getRequestURI()) + .append(UmpConstant.DELIMETER_QUESTION) + .append(queryParams) + .toString(); + try { + result = dataRetrievalService.retrievalPost(fullQueryUrl,jsonObject); + ConsoleUtils.info("request = {%s} \r\n result = {%s} \r\n", fullQueryUrl, result); + } catch (Exception e) { + result = "{'message':'error','data':'" + e.getMessage() + "'}"; + } + } + return JSONObject.parse(result); + } + + /** + * list schema; + * @param request + * @return + */ + @RequestMapping(method = RequestMethod.GET, value = "/list") + public Object listSchema(HttpServletRequest request) { + String result; + if (RetrievalConfig.getSchemaUrl() == null || RetrievalConfig.getSchemaUrl().length() <= 0) { + result = "{'message':'OK','data':'" + "schema.retrieval.url is empty" + "'}"; + } else { + String queryParams = request.getQueryString() == null ? "": request.getQueryString(); + String fullQueryUrl = new StringBuffer(RetrievalConfig.getSchemaUrl()) + .append(request.getRequestURI()) + .append(UmpConstant.DELIMETER_QUESTION) + .append(queryParams) + .toString(); + try { + result = dataRetrievalService.retrieval(fullQueryUrl); + ConsoleUtils.info("request = {%s} \r\n result = {%s} \r\n", fullQueryUrl, result); + } catch (Exception e) { + result = "{'message':'error','data':'" + e.getMessage() + "'}"; + } + } + return JSONObject.parse(result); + } + + /** + * delete schema; + * @param request + * @return + */ + @RequestMapping(method = RequestMethod.DELETE, value = "/{schemaId}") + public Object deleteSchema(HttpServletRequest request) { + String result; + if (RetrievalConfig.getSchemaUrl() == null || RetrievalConfig.getSchemaUrl().length() <= 0) { + result = "{'message':'OK','data':'" + "schema.retrieval.url is empty" + "'}"; + } else { + String queryParams = request.getQueryString() == null ? "": request.getQueryString(); + String fullQueryUrl = new StringBuffer(RetrievalConfig.getSchemaUrl()) + .append(request.getRequestURI()) + .append(UmpConstant.DELIMETER_QUESTION) + .append(queryParams) + .toString(); + try { + result = dataRetrievalService.delete(fullQueryUrl); + ConsoleUtils.info("request = {%s} \r\n result = {%s} \r\n", fullQueryUrl, result); + } catch (Exception e) { + result = "{'message':'error','data':'" + e.getMessage() + "'}"; + } + } + return JSONObject.parse(result); + } + + /** + * start schema; + * @param request + * @return + */ + @RequestMapping(method = RequestMethod.GET, value = "/start/{schemaId}") + public Object startSchema(HttpServletRequest request) { + String result; + if (RetrievalConfig.getSchemaUrl()==null || RetrievalConfig.getSchemaUrl().length() <= 0) { + result = "{'message':'OK','data':'" + "schema.retrieval.url is empty" + "'}"; + } else { + String queryParams = request.getQueryString() == null ? "": request.getQueryString(); + String fullQueryUrl = new StringBuffer(RetrievalConfig.getSchemaUrl()) + .append(request.getRequestURI()) + .append(UmpConstant.DELIMETER_QUESTION) + .append(queryParams) + .toString(); + try { + result = dataRetrievalService.retrieval(fullQueryUrl); + ConsoleUtils.info("request = {%s} \r\n result = {%s} \r\n", fullQueryUrl, result); + } catch (Exception e) { + result = "{'message':'error','data':'" + e.getMessage() + "'}"; + } + } + return JSONObject.parse(result); + } + + /** + * stop schema; + * @param request + * @return + */ + @RequestMapping(method = RequestMethod.GET, value = "/stop/{schemaId}") + public Object stopSchema(HttpServletRequest request) { + String result; + if (RetrievalConfig.getSchemaUrl() == null || RetrievalConfig.getSchemaUrl().length() <= 0) { + result = "{'message':'OK','data':'" + "schema.retrieval.url is empty" + "'}"; + } else { + String queryParams = request.getQueryString() == null ? "": request.getQueryString(); + String fullQueryUrl = new StringBuffer(RetrievalConfig.getSchemaUrl()) + .append(request.getRequestURI()) + .append(UmpConstant.DELIMETER_QUESTION) + .append(queryParams) + .toString(); + try { + result = dataRetrievalService.retrieval(fullQueryUrl); + ConsoleUtils.info("request = {%s} \r\n result = {%s} \r\n", fullQueryUrl, result); + } catch (Exception e) { + result = "{'message':'error','data':'" + e.getMessage() + "'}"; + } + } + return JSONObject.parse(result); + } + + /** + * querysql; + * @param request + * @return + */ + @RequestMapping(method = RequestMethod.POST, value = "/querysql") + public Object queryBySql(HttpServletRequest request,@RequestBody String queryString) { + String result; + if (RetrievalConfig.getSchemaUrl() == null || RetrievalConfig.getSchemaUrl().length() <= 0) { + result = "{'message':'OK','data':'" + "schema.retrieval.url is empty" + "'}"; + } else { + String queryParams = request.getQueryString() == null ? "": request.getQueryString(); + String fullQueryUrl = new StringBuffer(RetrievalConfig.getSchemaUrl()) + .append(request.getRequestURI()) + .append(UmpConstant.DELIMETER_QUESTION) + .append(queryParams) + .toString(); + try { + result = dataRetrievalService.retrievalPost(fullQueryUrl,queryString); + ConsoleUtils.info("request = {%s} \r\n result = {%s} \r\n", fullQueryUrl, result); + } catch (Exception e) { + result = "{'message':'error','data':'" + e.getMessage() + "'}"; + } + } + return JSONObject.parse(result); + } + + /** + * add dataAccountSchema; + * @return + */ + @RequestMapping(method = RequestMethod.POST, value = "/addDataAccountSchema") + public ApiResult addDataAccountSchema( @RequestBody DataAccountSchema dataAccountSchema) { + try { + dataAccountUmpService.addDataAccountSchema(dataAccountSchema); + return new ApiResult(ErrorCode.SUCCESS); + } catch (Exception e) { + return new ApiResult(ErrorCode.SERVER_ERROR,e.getMessage()); + } + } + + /** + * delete dataAccountSchema; + * @return + */ + @RequestMapping(method = RequestMethod.GET, value = "/delDataAccountSchema/ledger/{ledgerHash}/account/{dataAccount}") + public ApiResult deleteDataAccountSchema(@PathVariable(name = "ledgerHash") String ledgerHash, + @PathVariable(name = "dataAccount") String dataAccount) { + try { + DataAccountSchema dataAccountSchema = dataAccountUmpService.deleteDataAcccountSchema(ledgerHash, dataAccount); + return new ApiResult(ErrorCode.SUCCESS,dataAccountSchema); + } catch (Exception e) { + return new ApiResult(ErrorCode.SERVER_ERROR,e.getMessage()); + } + } + + /** + * find dataAccountSchema; + * @return + */ + @RequestMapping(method = RequestMethod.GET, value = "/findDataAccountSchema/ledger/{ledgerHash}/account/{dataAccount}") + public ApiResult findDataAccountSchema(@PathVariable(name = "ledgerHash") String ledgerHash, + @PathVariable(name = "dataAccount") String dataAccount) { + try { + DataAccountSchema dataAccountSchema = dataAccountUmpService.findDataAccountSchema(ledgerHash, dataAccount); + return new ApiResult(ErrorCode.SUCCESS,dataAccountSchema); + } catch (Exception e) { + return new ApiResult(ErrorCode.SERVER_ERROR,e.getMessage()); + } + } +} \ No newline at end of file diff --git a/source/manager/ump-web/src/main/java/com/jd/blockchain/ump/controller/TaskRetrievalController.java b/source/manager/ump-web/src/main/java/com/jd/blockchain/ump/controller/TaskRetrievalController.java new file mode 100644 index 00000000..d1262c0b --- /dev/null +++ b/source/manager/ump-web/src/main/java/com/jd/blockchain/ump/controller/TaskRetrievalController.java @@ -0,0 +1,59 @@ +package com.jd.blockchain.ump.controller; + +import com.alibaba.fastjson.JSONObject; +import com.jd.blockchain.ump.model.UmpConstant; +import com.jd.blockchain.ump.service.DataRetrievalService; +import com.jd.blockchain.ump.web.RetrievalConfig; +import com.jd.blockchain.utils.ConsoleUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +/** + * @Author zhaogw + * date 2019/07/18 17:01 + */ +@RestController +@RequestMapping(path = "/tasks") +public class TaskRetrievalController { + private static final Log log = LogFactory.getLog(TaskRetrievalController.class); + +// @Value("${task.retrieval.url}") +// private String taskRetrievalUrl; + + @Autowired + private DataRetrievalService dataRetrievalService; + + /** + * get the nums of all tasks; + * @param request + * @return + */ + @RequestMapping(method = RequestMethod.GET, value = "") + public Object listSchema(HttpServletRequest request) { + String result; + if (RetrievalConfig.getTaskUrl() == null || RetrievalConfig.getTaskUrl().length() <= 0) { + result = "{'message':'OK','data':'" + "schema.retrieval.url is empty" + "'}"; + } else { + String queryParams = request.getQueryString() == null ? "": request.getQueryString(); + String fullQueryUrl = new StringBuffer(RetrievalConfig.getTaskUrl()) + .append(request.getRequestURI()) + .append(UmpConstant.DELIMETER_QUESTION) + .append(queryParams) + .toString(); + try { + result = dataRetrievalService.retrieval(fullQueryUrl); + ConsoleUtils.info("request = {%s} \r\n result = {%s} \r\n", fullQueryUrl, result); + } catch (Exception e) { + result = "{'message':'error','data':'" + e.getMessage() + "'}"; + } + } + return JSONObject.parse(result); + } + +} \ No newline at end of file diff --git a/source/manager/ump-web/src/main/java/com/jd/blockchain/ump/web/RetrievalConfig.java b/source/manager/ump-web/src/main/java/com/jd/blockchain/ump/web/RetrievalConfig.java new file mode 100644 index 00000000..36897c17 --- /dev/null +++ b/source/manager/ump-web/src/main/java/com/jd/blockchain/ump/web/RetrievalConfig.java @@ -0,0 +1,62 @@ +package com.jd.blockchain.ump.web; + +import org.springframework.beans.BeansException; +import org.springframework.core.io.support.PropertiesLoaderUtils; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import static com.jd.blockchain.ump.model.UmpConstant.SCHEMA_RETRIEVAL_URL; +import static com.jd.blockchain.ump.model.UmpConstant.TASK_RETRIEVAL_URL; + +public class RetrievalConfig { + + private static Map propertiesMap = new HashMap<>(); + + private String schemaUrl; + private String taskUrl; + + public static void processProperties(Properties props) throws BeansException { + propertiesMap = new HashMap(); + for (Object key : props.keySet()) { + String keyStr = key.toString(); + try { + // PropertiesLoaderUtils的默认编码是ISO-8859-1,在这里转码一下 + propertiesMap.put(keyStr, new String(props.getProperty(keyStr).getBytes("ISO-8859-1"), "utf-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (java.lang.Exception e) { + e.printStackTrace(); + } + } + } + + public static void loadAllProperties(String propertyFileName) { + try { + Properties properties = PropertiesLoaderUtils.loadAllProperties(propertyFileName); + processProperties(properties); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static String getProperty(String name) { + return propertiesMap.get(name).toString(); + } + + public static Map getAllProperty() { + return propertiesMap; + } + + public static String getSchemaUrl() { + return propertiesMap.get(SCHEMA_RETRIEVAL_URL); + } + + public static String getTaskUrl() { + return propertiesMap.get(TASK_RETRIEVAL_URL); + } + +} diff --git a/source/manager/ump-web/src/main/java/com/jd/blockchain/ump/web/RetrievalConfigListener.java b/source/manager/ump-web/src/main/java/com/jd/blockchain/ump/web/RetrievalConfigListener.java new file mode 100644 index 00000000..7ab9a75e --- /dev/null +++ b/source/manager/ump-web/src/main/java/com/jd/blockchain/ump/web/RetrievalConfigListener.java @@ -0,0 +1,20 @@ +package com.jd.blockchain.ump.web; + + +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; + +import java.util.Properties; + +public class RetrievalConfigListener implements ApplicationListener { + private Properties props; + + public RetrievalConfigListener(Properties props){ + this.props = props; + } + + @Override + public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { + RetrievalConfig.processProperties(props); + } +}