Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
18 changed files
with
804 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,4 +5,5 @@ | |
/.idea | ||
/.DS_Store | ||
*.iml | ||
/bin/ | ||
/bin/ | ||
/jaslinkModuleDebug/.mvn/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
target/ | ||
!.mvn/wrapper/maven-wrapper.jar | ||
|
||
### STS ### | ||
.apt_generated | ||
.classpath | ||
.factorypath | ||
.project | ||
.settings | ||
.springBeans | ||
.sts4-cache | ||
|
||
### IntelliJ IDEA ### | ||
.idea | ||
*.iws | ||
*.iml | ||
*.ipr | ||
|
||
### NetBeans ### | ||
nbproject/private/ | ||
build/ | ||
nbbuild/ | ||
dist/ | ||
nbdist/ | ||
.nb-gradle/ |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.3/apache-maven-3.5.3-bin.zip |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
@startuml | ||
skinparam backgroundColor #EEEBDC | ||
skinparam handwritten true | ||
|
||
skinparam sequence { | ||
ArrowColor DeepSkyBlue | ||
ActorBorderColor DeepSkyBlue | ||
LifeLineBorderColor blue | ||
LifeLineBackgroundColor #A9DCDF | ||
|
||
ParticipantBorderColor DeepSkyBlue | ||
ParticipantBackgroundColor DodgerBlue | ||
ParticipantFontName Impact | ||
ParticipantFontSize 17 | ||
ParticipantFontColor #A9DCDF | ||
|
||
ActorBackgroundColor aqua | ||
ActorFontColor DeepSkyBlue | ||
ActorFontSize 17 | ||
ActorFontName Aapex | ||
} | ||
|
||
participant "AbstractModuleRefreshScheduler" as scheduler | ||
participant "ModuleLoaderImpl" as loader | ||
participant "ModuleManagerImpl" as moduleManager | ||
participant "SpringModule" as module | ||
participant "ConfigurableApplicationContext" as context | ||
|
||
-> scheduler: 1.定时调度触发 | ||
activate scheduler | ||
|
||
scheduler -> scheduler: 2.执行refreshModuleConfigs(),刷新模块配置 | ||
note left | ||
1.查找状态为ENABLED的ModuleConfig | ||
2.提取当前配置中的Module名称和对应版本 | ||
3.提取当前内存正在运行模块集合中的Module名称和对应版本 | ||
4.对比找出配置和内存运行模块配置不同的模块名称和对应版本 | ||
5.对新增的模块进行加载 | ||
6.对版本有更新的模块进行加载 | ||
7.移除多余模块 | ||
end note | ||
scheduler -> scheduler:3.执行putModules()方法,配置新增或者变更的模块 | ||
activate scheduler | ||
scheduler -> loader: 4.调用moduleLoader.load(),加载模块 | ||
activate scheduler | ||
activate loader | ||
loader -> loader: 5.执行loadModuleApplication()方法,加载模块上下文配置 | ||
note left | ||
1.获取当前线程ClassLoader | ||
2.创建JarsLink自定义的ModuleClassLoader | ||
3.将当前线程上下文类加载器设置成自定义的ModuleClassLoader | ||
4.配置ModuleApplicationContext信息 | ||
5.还原当前线程的ClassLoader | ||
|
||
end note | ||
loader --> scheduler:6.返回加载完成的Module对象 | ||
deactivate loader | ||
scheduler -> moduleManager:7.调用moduleManager.register()方法,注册新模块 | ||
activate moduleManager | ||
moduleManager ->moduleManager:8.把新模块以(模块名:模块对象)放入运行时Module集合存储 | ||
activate moduleManager | ||
moduleManager -->scheduler:9.返回module对象 | ||
deactivate moduleManager | ||
deactivate moduleManager | ||
deactivate scheduler | ||
scheduler -> scheduler:10.执行destroyQuietly()方法,开始销毁旧模块 | ||
activate scheduler | ||
scheduler->module:11.调用module.destroy()方法销毁模块 | ||
deactivate scheduler | ||
activate module | ||
module -> module:12.执行closeQuietly()方法 | ||
activate module | ||
module -> context:13.调用applicationContext.close()方法,关闭spring上下文 | ||
deactivate module | ||
activate context | ||
context-->module:14.响应请求 | ||
deactivate context | ||
activate module | ||
module -> module:15.执行clear()方法,清理类加载器 | ||
module -->scheduler:16.响应请求 | ||
deactivate module | ||
activate scheduler | ||
scheduler-> scheduler:17.执行removeModules()方法,移除并卸载模块 | ||
activate scheduler | ||
scheduler->moduleManager:18.调用moduleManager.remove()方法,移除并卸载模块 | ||
deactivate scheduler | ||
activate moduleManager | ||
moduleManager->moduleManager:19.执行modules.remove()方法,将当前模块从运行时模块集合modules移除 | ||
activate moduleManager | ||
moduleManager --> scheduler:20.响应请求 | ||
deactivate moduleManager | ||
@enduml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,225 @@ | ||
#!/bin/sh | ||
# ---------------------------------------------------------------------------- | ||
# Licensed to the Apache Software Foundation (ASF) under one | ||
# or more contributor license agreements. See the NOTICE file | ||
# distributed with this work for additional information | ||
# regarding copyright ownership. The ASF licenses this file | ||
# to you under the Apache License, Version 2.0 (the | ||
# "License"); you may not use this file except in compliance | ||
# with the License. You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, | ||
# software distributed under the License is distributed on an | ||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
# KIND, either express or implied. See the License for the | ||
# specific language governing permissions and limitations | ||
# under the License. | ||
# ---------------------------------------------------------------------------- | ||
|
||
# ---------------------------------------------------------------------------- | ||
# Maven2 Start Up Batch script | ||
# | ||
# Required ENV vars: | ||
# ------------------ | ||
# JAVA_HOME - location of a JDK home dir | ||
# | ||
# Optional ENV vars | ||
# ----------------- | ||
# M2_HOME - location of maven2's installed home dir | ||
# MAVEN_OPTS - parameters passed to the Java VM when running Maven | ||
# e.g. to debug Maven itself, use | ||
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 | ||
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files | ||
# ---------------------------------------------------------------------------- | ||
|
||
if [ -z "$MAVEN_SKIP_RC" ] ; then | ||
|
||
if [ -f /etc/mavenrc ] ; then | ||
. /etc/mavenrc | ||
fi | ||
|
||
if [ -f "$HOME/.mavenrc" ] ; then | ||
. "$HOME/.mavenrc" | ||
fi | ||
|
||
fi | ||
|
||
# OS specific support. $var _must_ be set to either true or false. | ||
cygwin=false; | ||
darwin=false; | ||
mingw=false | ||
case "`uname`" in | ||
CYGWIN*) cygwin=true ;; | ||
MINGW*) mingw=true;; | ||
Darwin*) darwin=true | ||
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home | ||
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html | ||
if [ -z "$JAVA_HOME" ]; then | ||
if [ -x "/usr/libexec/java_home" ]; then | ||
export JAVA_HOME="`/usr/libexec/java_home`" | ||
else | ||
export JAVA_HOME="/Library/Java/Home" | ||
fi | ||
fi | ||
;; | ||
esac | ||
|
||
if [ -z "$JAVA_HOME" ] ; then | ||
if [ -r /etc/gentoo-release ] ; then | ||
JAVA_HOME=`java-config --jre-home` | ||
fi | ||
fi | ||
|
||
if [ -z "$M2_HOME" ] ; then | ||
## resolve links - $0 may be a link to maven's home | ||
PRG="$0" | ||
|
||
# need this for relative symlinks | ||
while [ -h "$PRG" ] ; do | ||
ls=`ls -ld "$PRG"` | ||
link=`expr "$ls" : '.*-> \(.*\)$'` | ||
if expr "$link" : '/.*' > /dev/null; then | ||
PRG="$link" | ||
else | ||
PRG="`dirname "$PRG"`/$link" | ||
fi | ||
done | ||
|
||
saveddir=`pwd` | ||
|
||
M2_HOME=`dirname "$PRG"`/.. | ||
|
||
# make it fully qualified | ||
M2_HOME=`cd "$M2_HOME" && pwd` | ||
|
||
cd "$saveddir" | ||
# echo Using m2 at $M2_HOME | ||
fi | ||
|
||
# For Cygwin, ensure paths are in UNIX format before anything is touched | ||
if $cygwin ; then | ||
[ -n "$M2_HOME" ] && | ||
M2_HOME=`cygpath --unix "$M2_HOME"` | ||
[ -n "$JAVA_HOME" ] && | ||
JAVA_HOME=`cygpath --unix "$JAVA_HOME"` | ||
[ -n "$CLASSPATH" ] && | ||
CLASSPATH=`cygpath --path --unix "$CLASSPATH"` | ||
fi | ||
|
||
# For Migwn, ensure paths are in UNIX format before anything is touched | ||
if $mingw ; then | ||
[ -n "$M2_HOME" ] && | ||
M2_HOME="`(cd "$M2_HOME"; pwd)`" | ||
[ -n "$JAVA_HOME" ] && | ||
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" | ||
# TODO classpath? | ||
fi | ||
|
||
if [ -z "$JAVA_HOME" ]; then | ||
javaExecutable="`which javac`" | ||
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then | ||
# readlink(1) is not available as standard on Solaris 10. | ||
readLink=`which readlink` | ||
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then | ||
if $darwin ; then | ||
javaHome="`dirname \"$javaExecutable\"`" | ||
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" | ||
else | ||
javaExecutable="`readlink -f \"$javaExecutable\"`" | ||
fi | ||
javaHome="`dirname \"$javaExecutable\"`" | ||
javaHome=`expr "$javaHome" : '\(.*\)/bin'` | ||
JAVA_HOME="$javaHome" | ||
export JAVA_HOME | ||
fi | ||
fi | ||
fi | ||
|
||
if [ -z "$JAVACMD" ] ; then | ||
if [ -n "$JAVA_HOME" ] ; then | ||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | ||
# IBM's JDK on AIX uses strange locations for the executables | ||
JAVACMD="$JAVA_HOME/jre/sh/java" | ||
else | ||
JAVACMD="$JAVA_HOME/bin/java" | ||
fi | ||
else | ||
JAVACMD="`which java`" | ||
fi | ||
fi | ||
|
||
if [ ! -x "$JAVACMD" ] ; then | ||
echo "Error: JAVA_HOME is not defined correctly." >&2 | ||
echo " We cannot execute $JAVACMD" >&2 | ||
exit 1 | ||
fi | ||
|
||
if [ -z "$JAVA_HOME" ] ; then | ||
echo "Warning: JAVA_HOME environment variable is not set." | ||
fi | ||
|
||
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher | ||
|
||
# traverses directory structure from process work directory to filesystem root | ||
# first directory with .mvn subdirectory is considered project base directory | ||
find_maven_basedir() { | ||
|
||
if [ -z "$1" ] | ||
then | ||
echo "Path not specified to find_maven_basedir" | ||
return 1 | ||
fi | ||
|
||
basedir="$1" | ||
wdir="$1" | ||
while [ "$wdir" != '/' ] ; do | ||
if [ -d "$wdir"/.mvn ] ; then | ||
basedir=$wdir | ||
break | ||
fi | ||
# workaround for JBEAP-8937 (on Solaris 10/Sparc) | ||
if [ -d "${wdir}" ]; then | ||
wdir=`cd "$wdir/.."; pwd` | ||
fi | ||
# end of workaround | ||
done | ||
echo "${basedir}" | ||
} | ||
|
||
# concatenates all lines of a file | ||
concat_lines() { | ||
if [ -f "$1" ]; then | ||
echo "$(tr -s '\n' ' ' < "$1")" | ||
fi | ||
} | ||
|
||
BASE_DIR=`find_maven_basedir "$(pwd)"` | ||
if [ -z "$BASE_DIR" ]; then | ||
exit 1; | ||
fi | ||
|
||
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} | ||
echo $MAVEN_PROJECTBASEDIR | ||
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" | ||
|
||
# For Cygwin, switch paths to Windows format before running java | ||
if $cygwin; then | ||
[ -n "$M2_HOME" ] && | ||
M2_HOME=`cygpath --path --windows "$M2_HOME"` | ||
[ -n "$JAVA_HOME" ] && | ||
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` | ||
[ -n "$CLASSPATH" ] && | ||
CLASSPATH=`cygpath --path --windows "$CLASSPATH"` | ||
[ -n "$MAVEN_PROJECTBASEDIR" ] && | ||
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` | ||
fi | ||
|
||
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain | ||
|
||
exec "$JAVACMD" \ | ||
$MAVEN_OPTS \ | ||
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ | ||
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ | ||
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" |
Oops, something went wrong.