diff --git a/source/deployment/deployment-peer/pom.xml b/source/deployment/deployment-peer/pom.xml index 7d94202b..d52dd8e9 100644 --- a/source/deployment/deployment-peer/pom.xml +++ b/source/deployment/deployment-peer/pom.xml @@ -25,11 +25,11 @@ runtime-modular-booter ${project.version} - + com.jd.blockchain storage-composite diff --git a/source/deployment/deployment-peer/src/main/resources/assembly.xml b/source/deployment/deployment-peer/src/main/resources/assembly.xml index 634cd8f6..881c0aef 100644 --- a/source/deployment/deployment-peer/src/main/resources/assembly.xml +++ b/source/deployment/deployment-peer/src/main/resources/assembly.xml @@ -39,6 +39,18 @@ com.jd.blockchain:deployment-peer + + false + true + manager + + com.jd.blockchain:manager-booter + com.jd.blockchain:manager-model + com.jd.blockchain:manager-service + com.jd.blockchain:manager-web + com.jd.blockchain:ump-explorer + + false true @@ -53,11 +65,11 @@ com.jd.blockchain:runtime-modular-booter com.jd.blockchain:peer com.jd.blockchain:deployment-peer - com.jd.blockchain:ump-booter + com.jd.blockchain:manager-booter + com.jd.blockchain:manager-model + com.jd.blockchain:manager-service + com.jd.blockchain:manager-web com.jd.blockchain:ump-explorer - com.jd.blockchain:ump-model - com.jd.blockchain:ump-service - com.jd.blockchain:ump-web diff --git a/source/deployment/deployment-peer/src/main/resources/scripts/manager-stop.sh b/source/deployment/deployment-peer/src/main/resources/scripts/manager-shutdown.sh similarity index 51% rename from source/deployment/deployment-peer/src/main/resources/scripts/manager-stop.sh rename to source/deployment/deployment-peer/src/main/resources/scripts/manager-shutdown.sh index b7155c88..e5f6b292 100644 --- a/source/deployment/deployment-peer/src/main/resources/scripts/manager-stop.sh +++ b/source/deployment/deployment-peer/src/main/resources/scripts/manager-shutdown.sh @@ -4,13 +4,13 @@ BOOT_HOME=$(cd `dirname $0`;cd ../; pwd) #获取进程PID -PID=`ps -ef | grep $BOOT_HOME/ext/ump-booter | grep -v grep | awk '{print $2}'` +PID=`ps -ef | grep $BOOT_HOME/manager/manager-booter | grep -v grep | awk '{print $2}'` #通过Kill命令将进程杀死 if [ -z "$PID" ]; then - echo "Unable to find UMP PID. stop aborted." + echo "Unable to find JDChain Manager PID. stop aborted." else echo "Start to kill PID = $PID ..." kill -9 $PID - echo "Unified Management Platform has been stopped ..." + echo "JDChain Manager has been stopped ..." fi \ No newline at end of file diff --git a/source/deployment/deployment-peer/src/main/resources/scripts/manager-start.sh b/source/deployment/deployment-peer/src/main/resources/scripts/manager-start.sh deleted file mode 100644 index 6c1f44af..00000000 --- a/source/deployment/deployment-peer/src/main/resources/scripts/manager-start.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -HOME=$(cd `dirname $0`;cd ../; pwd) -UMP=$(ls $HOME/ext | grep ump-booter-) -if [ ! -n "UMP" ]; then - echo "Unified Management Platform Is Null !!!" -else - nohup java -jar -server -Djump.log=$HOME $HOME/ext/$UMP -p 8000 $* >$HOME/bin/jump.out 2>&1 & -fi \ No newline at end of file diff --git a/source/deployment/deployment-peer/src/main/resources/scripts/manager-startup.sh b/source/deployment/deployment-peer/src/main/resources/scripts/manager-startup.sh new file mode 100644 index 00000000..8336e219 --- /dev/null +++ b/source/deployment/deployment-peer/src/main/resources/scripts/manager-startup.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +HOME=$(cd `dirname $0`;cd ../; pwd) +UMP=$(ls $HOME/manager | grep manager-booter-) +if [ ! -n "UMP" ]; then + echo "JDChain Manager Is Null !!!" +else + nohup java -jar -server -Djump.log=$HOME $HOME/manager/$UMP -home $HOME -p 8000 $* >$HOME/bin/jump.out 2>&1 & +fi \ No newline at end of file diff --git a/source/manager/manager-booter/pom.xml b/source/manager/manager-booter/pom.xml index 263dac1d..2217ad3f 100644 --- a/source/manager/manager-booter/pom.xml +++ b/source/manager/manager-booter/pom.xml @@ -82,6 +82,34 @@ + + + org.apache.maven.plugins + maven-jar-plugin + + + src/main/resources/META-INF/MANIFEST.MF + + com.jd.blockchain.ump.UmpBooter + false + false + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + true + + + + + + diff --git a/source/manager/manager-booter/src/main/java/com/jd/blockchain/ump/UmpBooter.java b/source/manager/manager-booter/src/main/java/com/jd/blockchain/ump/UmpBooter.java index 2db451fb..746f5bff 100644 --- a/source/manager/manager-booter/src/main/java/com/jd/blockchain/ump/UmpBooter.java +++ b/source/manager/manager-booter/src/main/java/com/jd/blockchain/ump/UmpBooter.java @@ -1,11 +1,15 @@ package com.jd.blockchain.ump; import com.jd.blockchain.ump.web.RetrievalConfigListener; +import com.jd.blockchain.ump.web.UmpConfiguration; import org.springframework.boot.SpringApplication; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; import java.util.ArrayList; import java.util.List; import java.util.Properties; @@ -13,11 +17,13 @@ import java.util.Properties; public class UmpBooter { + private static final String ARG_HOME = "-home"; + private static final String ARG_PORT = "-p"; 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 = "/config.properties"; private static final String CONFIG_APPLICATION = "BOOT-INF" + File.separator + "classes" + File.separator + "application.properties"; @@ -33,9 +39,20 @@ public class UmpBooter { private static final String CONFIG_PROP_DB_URL_DEFAULT = "rocksdb://#project#/jumpdb"; + private static String HOME_DIR = null; + public static void main(String[] args) { - startServer(server(args)); - System.out.println("Unified Management Platform Server Start SUCCESS !!!"); + try { + // 设置相关参数 + Server server = server(args); + // 加载libs/manager下的jar包 + loadJars(); + // 启动Server + startServer(server); + System.out.println("Unified Management Platform Server Start SUCCESS !!!"); + } catch (Exception e) { + System.err.println(e); + } } private static void startServer(Server server) { @@ -66,9 +83,12 @@ public class UmpBooter { springApplication.run(args); } - private static Server server(String[] args) { + private static Server server(String[] args) throws Exception { Server defaultServer = serverFromConfig(); if (args == null || args.length == 0) { + + // 获取当前Class所在路径 + HOME_DIR = UmpBooter.class.getResource("").toURI().getPath(); return defaultServer; } String host = null; @@ -82,6 +102,8 @@ public class UmpBooter { host = args[i + 1]; } else if (arg.equals(ARG_PORT)) { port = Integer.parseInt(args[i + 1]); + } else if (arg.equals(ARG_HOME)) { + HOME_DIR = args[i + 1]; } } @@ -98,7 +120,7 @@ public class UmpBooter { private static Server serverFromConfig() { try { - InputStream inputStream = UmpBooter.class.getResourceAsStream(File.separator + CONFIG); + InputStream inputStream = UmpBooter.class.getResourceAsStream(CONFIG); if (inputStream == null) { System.err.println("InputStream is NULL !!!"); } @@ -114,6 +136,55 @@ public class UmpBooter { } } + private static void loadJars() { + // 获取两个路径下所有的正确的Jar包 + URL[] libsJars = totalURLs(); + + URLClassLoader libClassLoader = new URLClassLoader(libsJars, UmpBooter.class.getClassLoader()); + + Thread.currentThread().setContextClassLoader(libClassLoader); + } + + public static URL[] totalURLs() { + List totalURLs = new ArrayList<>(); + totalURLs.addAll(libsPathURLs()); + totalURLs.addAll(managerPathURLs()); + URL[] totalURLArray = new URL[totalURLs.size()]; + return totalURLs.toArray(totalURLArray); + } + + public static List libsPathURLs() { + try { + File libsDir = new File(HOME_DIR + File.separator + "libs"); + File[] jars = libsDir.listFiles(f -> f.getName().endsWith(".jar") && f.isFile() && !f.getName().contains("-booter-")); + List libsPathURLs = new ArrayList<>(); + if (jars != null && jars.length > 0) { + for (int i = 0; i < jars.length; i++) { + libsPathURLs.add(jars[i].toURI().toURL()); + } + } + return libsPathURLs; + } catch (MalformedURLException e) { + throw new IllegalStateException(e.getMessage(), e); + } + } + + public static List managerPathURLs() { + try { + File managerDir = new File(HOME_DIR + File.separator + "manager"); + File[] jars = managerDir.listFiles(f -> f.getName().endsWith(".jar") && f.isFile()); + List managerPathURLs = new ArrayList<>(); + if (jars != null && jars.length > 0) { + for (int i = 0; i < jars.length; i++) { + managerPathURLs.add(jars[i].toURI().toURL()); + } + } + return managerPathURLs; + } catch (MalformedURLException e) { + throw new IllegalStateException(e.getMessage(), e); + } + } + private static class Server { private String host; @@ -143,5 +214,13 @@ public class UmpBooter { public void setPort(int port) { this.port = port; } + + public String getDbUrl() { + return dbUrl; + } + + public void setDbUrl(String dbUrl) { + this.dbUrl = dbUrl; + } } } diff --git a/source/manager/manager-booter/src/main/resources/META-INF/MANIFEST.MF b/source/manager/manager-booter/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 00000000..b08cf0d7 --- /dev/null +++ b/source/manager/manager-booter/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,10 @@ +Manifest-Version: 1.0 +Created-By: 1.8.0 +Built-By: shaozhuguang@jd.com +Extension-Name: JDChain +Specification-Title: JDChain +Specification-Vendor: JD Software Foundation +Implementation-Vendor: JD Software Foundation +Implementation-URL: http://ledger.jd.com +Build-Jdk: 1.8.0 + diff --git a/source/manager/manager-booter/src/main/resources/scripts/jump-start.sh b/source/manager/manager-booter/src/main/resources/scripts/jump-start.sh deleted file mode 100644 index a31a5b28..00000000 --- a/source/manager/manager-booter/src/main/resources/scripts/jump-start.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -HOME=$(cd `dirname $0`;cd ../; pwd) -UMP=$(ls $HOME/ext | grep ump-booter-) -if [ ! -n "UMP" ]; then - echo "Unified Management Platform Is Null !!!" -else - nohup java -jar -server -Djump.log=$HOME $HOME/ext/$UMP $* >$HOME/bin/jump.out 2>&1 & -fi \ No newline at end of file diff --git a/source/manager/manager-booter/src/main/resources/scripts/jump-stop.sh b/source/manager/manager-booter/src/main/resources/scripts/jump-stop.sh deleted file mode 100644 index b7155c88..00000000 --- a/source/manager/manager-booter/src/main/resources/scripts/jump-stop.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -#启动Home路径 -BOOT_HOME=$(cd `dirname $0`;cd ../; pwd) - -#获取进程PID -PID=`ps -ef | grep $BOOT_HOME/ext/ump-booter | grep -v grep | awk '{print $2}'` - -#通过Kill命令将进程杀死 -if [ -z "$PID" ]; then - echo "Unable to find UMP PID. stop aborted." -else - echo "Start to kill PID = $PID ..." - kill -9 $PID - echo "Unified Management Platform has been stopped ..." -fi \ No newline at end of file diff --git a/source/manager/manager-model/src/main/java/com/jd/blockchain/ump/model/PartiNode.java b/source/manager/manager-model/src/main/java/com/jd/blockchain/ump/model/PartiNode.java index f5e6b988..574f1ee2 100644 --- a/source/manager/manager-model/src/main/java/com/jd/blockchain/ump/model/PartiNode.java +++ b/source/manager/manager-model/src/main/java/com/jd/blockchain/ump/model/PartiNode.java @@ -25,7 +25,9 @@ public class PartiNode { configCharList.add(formatConfig(UmpConstant.PARTINODE_PUBKEY_FORMAT, pubKey)); - configCharList.addAll(partiRoleConfigs); + if (partiRoleConfigs != null && !partiRoleConfigs.isEmpty()) { + configCharList.addAll(partiRoleConfigs); + } configCharList.add(formatConfig(UmpConstant.PARTINODE_INIT_HOST_FORMAT, initHost)); diff --git a/source/manager/manager-model/src/main/java/com/jd/blockchain/ump/model/config/LedgerInitConfig.java b/source/manager/manager-model/src/main/java/com/jd/blockchain/ump/model/config/LedgerInitConfig.java index 02298315..476ff1e3 100644 --- a/source/manager/manager-model/src/main/java/com/jd/blockchain/ump/model/config/LedgerInitConfig.java +++ b/source/manager/manager-model/src/main/java/com/jd/blockchain/ump/model/config/LedgerInitConfig.java @@ -61,7 +61,9 @@ public class LedgerInitConfig { configChars.add(toConfigChars(UmpConstant.PARTINODE_COUNT, partiNodes.size())); - configChars.addAll(securityConfigs); + if (securityConfigs != null && !securityConfigs.isEmpty()) { + configChars.addAll(securityConfigs); + } for (PartiNode partiNode : partiNodes) { configChars.addAll(partiNode.toConfigChars(this.partiRolesConfigs)); diff --git a/source/manager/manager-service/src/main/java/com/jd/blockchain/ump/service/SecurityServiceHandler.java b/source/manager/manager-service/src/main/java/com/jd/blockchain/ump/service/SecurityServiceHandler.java index a662a073..57d5fd82 100644 --- a/source/manager/manager-service/src/main/java/com/jd/blockchain/ump/service/SecurityServiceHandler.java +++ b/source/manager/manager-service/src/main/java/com/jd/blockchain/ump/service/SecurityServiceHandler.java @@ -1,6 +1,8 @@ package com.jd.blockchain.ump.service; import com.jd.blockchain.ump.model.UmpConstant; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import java.io.File; @@ -12,6 +14,8 @@ import java.util.Properties; @Service public class SecurityServiceHandler implements SecurityService { + private static final Logger LOGGER = LoggerFactory.getLogger(SecurityServiceHandler.class); + static final String SECURITY_FILE = "security.config"; private List securityConfigs = new ArrayList<>(); @@ -34,6 +38,7 @@ public class SecurityServiceHandler implements SecurityService { @Override public void init() { + try { // 读取配置文件中的内容 InputStream currentFileInputStream = SecurityServiceHandler.class.getResourceAsStream( @@ -78,7 +83,8 @@ public class SecurityServiceHandler implements SecurityService { participantRoleConfigs.add(propBuild(UmpConstant.SECURITY_PARTI_ROLES_POLICY, partiRolesPolicyValue)); } else { - throw new IllegalStateException("Can not find Properties from security.config"); + // 打印日志即可 + LOGGER.error("Can not find Properties from {}", SECURITY_FILE); } } diff --git a/source/manager/manager-service/src/main/resources/security.config b/source/manager/manager-service/src/main/resources/security.config index 4796e551..c90e730c 100644 --- a/source/manager/manager-service/src/main/resources/security.config +++ b/source/manager/manager-service/src/main/resources/security.config @@ -1,4 +1,4 @@ -security.roles=DEFAULT, ADMIN, MANAGER, GUEST +#security.roles=DEFAULT, ADMIN, MANAGER, GUEST security.role.DEFAULT.ledger-privileges=REGISTER_USER, REGISTER_DATA_ACCOUNT diff --git a/source/manager/manager-booter/src/main/java/com/jd/blockchain/ump/UmpConfiguration.java b/source/manager/manager-web/src/main/java/com/jd/blockchain/ump/web/UmpConfiguration.java similarity index 91% rename from source/manager/manager-booter/src/main/java/com/jd/blockchain/ump/UmpConfiguration.java rename to source/manager/manager-web/src/main/java/com/jd/blockchain/ump/web/UmpConfiguration.java index f1e86f12..42bf8285 100644 --- a/source/manager/manager-booter/src/main/java/com/jd/blockchain/ump/UmpConfiguration.java +++ b/source/manager/manager-web/src/main/java/com/jd/blockchain/ump/web/UmpConfiguration.java @@ -1,4 +1,4 @@ -package com.jd.blockchain.ump; +package com.jd.blockchain.ump.web; import org.springframework.boot.autoconfigure.SpringBootApplication;