Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
SkyWalking
提交
e05b99a9
S
SkyWalking
项目概览
apache
/
SkyWalking
上一次同步 大约 1 年
通知
302
Star
21345
Fork
6091
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
e05b99a9
编写于
7月 19, 2018
作者:
wu-sheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Restore module management.
上级
de3bc220
变更
26
隐藏空白更改
内联
并排
Showing
26 changed file
with
331 addition
and
162 deletion
+331
-162
oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/ClusterModuleStandaloneProvider.java
...er/plugin/standalone/ClusterModuleStandaloneProvider.java
+5
-0
oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ClusterModuleZookeeperProvider.java
...ster/plugin/zookeeper/ClusterModuleZookeeperProvider.java
+5
-0
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
...apache/skywalking/oap/server/core/CoreModuleProvider.java
+5
-0
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ModuleQuery.java
...pache/skywalking/oap/server/core/cluster/ModuleQuery.java
+2
-1
oap-server/server-library/library-module/pom.xml
oap-server/server-library/library-module/pom.xml
+8
-0
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ApplicationConfiguration.java
...g/oap/server/library/module/ApplicationConfiguration.java
+6
-9
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/BootstrapFlow.java
...e/skywalking/oap/server/library/module/BootstrapFlow.java
+118
-0
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/CycleDependencyException.java
...g/oap/server/library/module/CycleDependencyException.java
+5
-13
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/DuplicateProviderException.java
...oap/server/library/module/DuplicateProviderException.java
+1
-0
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleConfigException.java
...king/oap/server/library/module/ModuleConfigException.java
+0
-4
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleDefine.java
...he/skywalking/oap/server/library/module/ModuleDefine.java
+33
-20
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleManager.java
...e/skywalking/oap/server/library/module/ModuleManager.java
+59
-6
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleNotFoundException.java
...ng/oap/server/library/module/ModuleNotFoundException.java
+1
-0
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleNotFoundRuntimeException.java
...server/library/module/ModuleNotFoundRuntimeException.java
+5
-0
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleProvider.java
.../skywalking/oap/server/library/module/ModuleProvider.java
+9
-4
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/Service.java
.../apache/skywalking/oap/server/library/module/Service.java
+2
-1
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ServiceNotProvidedRuntimeException.java
...er/library/module/ServiceNotProvidedRuntimeException.java
+2
-1
oap-server/server-library/library-module/src/test/java/org/apache/skywalking/oap/server/library/module/BaseModuleA.java
...che/skywalking/oap/server/library/module/BaseModuleA.java
+2
-2
oap-server/server-library/library-module/src/test/java/org/apache/skywalking/oap/server/library/module/BaseModuleB.java
...che/skywalking/oap/server/library/module/BaseModuleB.java
+2
-2
oap-server/server-library/library-module/src/test/java/org/apache/skywalking/oap/server/library/module/ModuleAProvider.java
...skywalking/oap/server/library/module/ModuleAProvider.java
+1
-1
oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/ModuleManagerImpl.java
...ache/skywalking/oap/server/starter/ModuleManagerImpl.java
+0
-75
oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/OAPServerStartUp.java
...pache/skywalking/oap/server/starter/OAPServerStartUp.java
+5
-13
oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java
...ng/oap/server/starter/config/ApplicationConfigLoader.java
+35
-4
oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ConfigFileNotFoundException.java
...ap/server/starter/config/ConfigFileNotFoundException.java
+2
-0
oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ConfigLoader.java
...he/skywalking/oap/server/starter/config/ConfigLoader.java
+1
-0
oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java
...gin/elasticsearch/StorageModuleElasticsearchProvider.java
+17
-6
未找到文件。
oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/ClusterModuleStandaloneProvider.java
浏览文件 @
e05b99a9
...
...
@@ -58,4 +58,9 @@ public class ClusterModuleStandaloneProvider extends ModuleProvider {
@Override
public
void
notifyAfterCompleted
()
{
}
@Override
public
String
[]
requiredModules
()
{
return
new
String
[
0
];
}
}
oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ClusterModuleZookeeperProvider.java
浏览文件 @
e05b99a9
...
...
@@ -83,4 +83,9 @@ public class ClusterModuleZookeeperProvider extends ModuleProvider {
@Override
public
void
notifyAfterCompleted
()
{
}
@Override
public
String
[]
requiredModules
()
{
return
new
String
[
0
];
}
}
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
浏览文件 @
e05b99a9
...
...
@@ -89,4 +89,9 @@ public class CoreModuleProvider extends ModuleProvider {
restServerInstance
.
setContextPath
(
moduleConfig
.
getRestContextPath
());
this
.
getManager
().
find
(
ClusterModule
.
NAME
).
getService
(
ModuleRegister
.
class
).
register
(
CoreModule
.
NAME
,
"rest"
,
restServerInstance
);
}
@Override
public
String
[]
requiredModules
()
{
return
new
String
[
0
];
}
}
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ModuleQuery.java
浏览文件 @
e05b99a9
...
...
@@ -18,9 +18,10 @@
package
org.apache.skywalking.oap.server.core.cluster
;
import
java.util.List
;
import
org.apache.skywalking.oap.server.library.module.Service
;
import
java.util.List
;
/**
* @author peng-yongsheng
*/
...
...
oap-server/server-library/library-module/pom.xml
浏览文件 @
e05b99a9
...
...
@@ -29,4 +29,12 @@
<artifactId>
library-module
</artifactId>
<packaging>
jar
</packaging>
<dependencies>
<dependency>
<groupId>
org.apache.skywalking
</groupId>
<artifactId>
library-util
</artifactId>
<version>
${project.version}
</version>
<scope>
compile
</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ApplicationConfiguration.java
浏览文件 @
e05b99a9
...
...
@@ -16,18 +16,19 @@
*
*/
package
org.apache.skywalking.oap.server.library.module
;
import
java.util.*
;
import
java.util.HashMap
;
import
java.util.Properties
;
/**
* Modul
ar
ization configurations. The {@link ModuleManager} is going to start, lookup, start modules based on this.
* Modulization configurations. The {@link ModuleManager} is going to start, lookup, start modules based on this.
*
* @author wu-sheng, peng-yongsheng
*/
public
class
ApplicationConfiguration
{
private
final
Map
<
String
,
ModuleConfiguration
>
modules
=
new
HashMap
<>();
private
HashMap
<
String
,
ModuleConfiguration
>
modules
=
new
HashMap
<>();
public
String
[]
moduleList
()
{
return
modules
.
keySet
().
toArray
(
new
String
[
0
]);
...
...
@@ -51,7 +52,7 @@ public class ApplicationConfiguration {
* The configurations about a certain module.
*/
public
class
ModuleConfiguration
{
private
final
Map
<
String
,
ProviderConfiguration
>
providers
=
new
HashMap
<>();
private
Hash
Map
<
String
,
ProviderConfiguration
>
providers
=
new
HashMap
<>();
private
ModuleConfiguration
()
{
}
...
...
@@ -64,10 +65,6 @@ public class ApplicationConfiguration {
return
providers
.
containsKey
(
name
);
}
public
String
[]
providerList
()
{
return
providers
.
keySet
().
toArray
(
new
String
[
0
]);
}
public
ModuleConfiguration
addProviderConfiguration
(
String
name
,
Properties
properties
)
{
ProviderConfiguration
newProvider
=
new
ProviderConfiguration
(
properties
);
providers
.
put
(
name
,
newProvider
);
...
...
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/BootstrapFlow.java
0 → 100644
浏览文件 @
e05b99a9
/*
* 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.
*
*/
package
org.apache.skywalking.oap.server.library.module
;
import
org.apache.skywalking.oap.server.library.util.CollectionUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.ArrayList
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author wu-sheng, peng-yongsheng
*/
class
BootstrapFlow
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
BootstrapFlow
.
class
);
private
Map
<
String
,
ModuleDefine
>
loadedModules
;
private
List
<
ModuleProvider
>
startupSequence
;
BootstrapFlow
(
Map
<
String
,
ModuleDefine
>
loadedModules
)
throws
CycleDependencyException
{
this
.
loadedModules
=
loadedModules
;
startupSequence
=
new
LinkedList
<>();
makeSequence
();
}
@SuppressWarnings
(
"unchecked"
)
void
start
(
ModuleManager
moduleManager
)
throws
ModuleNotFoundException
,
ServiceNotProvidedException
,
ModuleStartException
{
for
(
ModuleProvider
provider
:
startupSequence
)
{
String
[]
requiredModules
=
provider
.
requiredModules
();
if
(
requiredModules
!=
null
)
{
for
(
String
module
:
requiredModules
)
{
if
(!
moduleManager
.
has
(
module
))
{
throw
new
ModuleNotFoundException
(
module
+
" is required by "
+
provider
.
getModuleName
()
+
"."
+
provider
.
name
()
+
", but not found."
);
}
}
}
logger
.
info
(
"start the provider {} in {} module."
,
provider
.
name
(),
provider
.
getModuleName
());
provider
.
requiredCheck
(
provider
.
getModule
().
services
());
provider
.
start
();
}
}
void
notifyAfterCompleted
()
throws
ServiceNotProvidedException
{
for
(
ModuleProvider
provider
:
startupSequence
)
{
provider
.
notifyAfterCompleted
();
}
}
private
void
makeSequence
()
throws
CycleDependencyException
{
List
<
ModuleProvider
>
allProviders
=
new
ArrayList
<>();
loadedModules
.
forEach
((
moduleName
,
module
)
->
allProviders
.
addAll
(
module
.
providers
()));
do
{
int
numOfToBeSequenced
=
allProviders
.
size
();
for
(
int
i
=
0
;
i
<
allProviders
.
size
();
i
++)
{
ModuleProvider
provider
=
allProviders
.
get
(
i
);
String
[]
requiredModules
=
provider
.
requiredModules
();
if
(
CollectionUtils
.
isNotEmpty
(
requiredModules
))
{
boolean
isAllRequiredModuleStarted
=
true
;
for
(
String
module
:
requiredModules
)
{
// find module in all ready existed startupSequence
boolean
exist
=
false
;
for
(
ModuleProvider
moduleProvider
:
startupSequence
)
{
if
(
moduleProvider
.
getModuleName
().
equals
(
module
))
{
exist
=
true
;
break
;
}
}
if
(!
exist
)
{
isAllRequiredModuleStarted
=
false
;
break
;
}
}
if
(
isAllRequiredModuleStarted
)
{
startupSequence
.
add
(
provider
);
allProviders
.
remove
(
i
);
i
--;
}
}
else
{
startupSequence
.
add
(
provider
);
allProviders
.
remove
(
i
);
i
--;
}
}
if
(
numOfToBeSequenced
==
allProviders
.
size
())
{
StringBuilder
unSequencedProviders
=
new
StringBuilder
();
allProviders
.
forEach
(
provider
->
unSequencedProviders
.
append
(
provider
.
getModuleName
()).
append
(
"[provider="
).
append
(
provider
.
getClass
().
getName
()).
append
(
"]\n"
));
throw
new
CycleDependencyException
(
"Exist cycle module dependencies in \n"
+
unSequencedProviders
.
substring
(
0
,
unSequencedProviders
.
length
()
-
1
));
}
}
while
(
allProviders
.
size
()
!=
0
);
}
}
oap-server/server-
core/core-cluster/src/main/java/org/apache/skywalking/oap/server/core/cluster/ClusterModule
.java
→
oap-server/server-
library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/CycleDependencyException
.java
浏览文件 @
e05b99a9
...
...
@@ -16,22 +16,14 @@
*
*/
package
org.apache.skywalking.oap.server.core.cluster
;
import
org.apache.skywalking.oap.server.library.module.ModuleDefin
e
;
package
org.apache.skywalking.oap.server.library.modul
e
;
/**
* @author
peng-yong
sheng
* @author
wu-
sheng
*/
public
class
ClusterModule
extends
ModuleDefine
{
public
static
final
String
NAME
=
"cluster"
;
@Override
public
String
name
()
{
return
NAME
;
}
@Override
public
Class
[]
services
()
{
return
new
Class
[]
{
ModuleRegister
.
class
,
ModuleQuery
.
class
};
public
class
CycleDependencyException
extends
RuntimeException
{
public
CycleDependencyException
(
String
message
)
{
super
(
message
);
}
}
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/DuplicateProviderException.java
浏览文件 @
e05b99a9
...
...
@@ -16,6 +16,7 @@
*
*/
package
org.apache.skywalking.oap.server.library.module
;
public
class
DuplicateProviderException
extends
Exception
{
...
...
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleConfigException.java
浏览文件 @
e05b99a9
...
...
@@ -23,10 +23,6 @@ package org.apache.skywalking.oap.server.library.module;
*/
public
class
ModuleConfigException
extends
Exception
{
public
ModuleConfigException
(
String
message
)
{
super
(
message
);
}
public
ModuleConfigException
(
String
message
,
Throwable
cause
)
{
super
(
message
,
cause
);
}
...
...
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleDefine.java
浏览文件 @
e05b99a9
...
...
@@ -18,9 +18,11 @@
package
org.apache.skywalking.oap.server.library.module
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.lang.reflect.Field
;
import
java.util.*
;
import
org.slf4j.*
;
/**
* A module definition.
...
...
@@ -29,9 +31,9 @@ import org.slf4j.*;
*/
public
abstract
class
ModuleDefine
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ModuleDefine
.
class
);
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ModuleDefine
.
class
);
private
ModuleProvider
moduleProvider
;
private
LinkedList
<
ModuleProvider
>
loadedProviders
=
new
LinkedList
<>()
;
/**
* @return the module name
...
...
@@ -50,13 +52,9 @@ public abstract class ModuleDefine {
* @param configuration of this module
* @throws ProviderNotFoundException when even don't find a single one providers.
*/
public
void
prepare
(
ModuleManager
moduleManager
,
void
prepare
(
ModuleManager
moduleManager
,
ApplicationConfiguration
.
ModuleConfiguration
configuration
)
throws
ProviderNotFoundException
,
ServiceNotProvidedException
,
ModuleConfigException
{
ServiceLoader
<
ModuleProvider
>
moduleProviderLoader
=
ServiceLoader
.
load
(
ModuleProvider
.
class
);
if
(
configuration
.
providerList
().
length
!=
1
)
{
throw
new
ModuleConfigException
(
"Just a single provider configuration allowed to open in one module."
);
}
boolean
providerExist
=
false
;
for
(
ModuleProvider
provider
:
moduleProviderLoader
)
{
if
(!
configuration
.
has
(
provider
.
name
()))
{
...
...
@@ -65,13 +63,15 @@ public abstract class ModuleDefine {
providerExist
=
true
;
if
(
provider
.
module
().
equals
(
getClass
()))
{
ModuleProvider
newProvider
;
try
{
module
Provider
=
provider
.
getClass
().
newInstance
();
new
Provider
=
provider
.
getClass
().
newInstance
();
}
catch
(
InstantiationException
|
IllegalAccessException
e
)
{
throw
new
ProviderNotFoundException
(
e
);
}
moduleProvider
.
setManager
(
moduleManager
);
moduleProvider
.
setModule
(
this
);
newProvider
.
setManager
(
moduleManager
);
newProvider
.
setModule
(
this
);
loadedProviders
.
add
(
newProvider
);
}
}
...
...
@@ -79,13 +79,15 @@ public abstract class ModuleDefine {
throw
new
ProviderNotFoundException
(
this
.
name
()
+
" module no provider exists."
);
}
logger
.
info
(
"Prepare the {} provider in {} module."
,
moduleProvider
.
name
(),
this
.
name
());
try
{
copyProperties
(
moduleProvider
.
createConfigBeanIfAbsent
(),
configuration
.
getProviderConfiguration
(
moduleProvider
.
name
()),
this
.
name
(),
moduleProvider
.
name
());
}
catch
(
IllegalAccessException
e
)
{
throw
new
ModuleConfigException
(
this
.
name
()
+
" module config transport to config bean failure."
,
e
);
for
(
ModuleProvider
moduleProvider
:
loadedProviders
)
{
logger
.
info
(
"Prepare the {} provider in {} module."
,
moduleProvider
.
name
(),
this
.
name
());
try
{
copyProperties
(
moduleProvider
.
createConfigBeanIfAbsent
(),
configuration
.
getProviderConfiguration
(
moduleProvider
.
name
()),
this
.
name
(),
moduleProvider
.
name
());
}
catch
(
IllegalAccessException
e
)
{
throw
new
ModuleConfigException
(
this
.
name
()
+
" module config transport to config bean failure."
,
e
);
}
moduleProvider
.
prepare
();
}
moduleProvider
.
prepare
();
}
private
void
copyProperties
(
ModuleConfig
dest
,
Properties
src
,
String
moduleName
,
...
...
@@ -119,14 +121,25 @@ public abstract class ModuleDefine {
throw
new
NoSuchFieldException
();
}
public
final
ModuleProvider
provider
()
{
return
moduleProvider
;
/**
* @return providers of this module
*/
final
List
<
ModuleProvider
>
providers
()
{
return
loadedProviders
;
}
final
ModuleProvider
provider
()
throws
DuplicateProviderException
{
if
(
loadedProviders
.
size
()
>
1
)
{
throw
new
DuplicateProviderException
(
this
.
name
()
+
" module exist "
+
loadedProviders
.
size
()
+
" providers"
);
}
return
loadedProviders
.
getFirst
();
}
public
final
<
T
extends
Service
>
T
getService
(
Class
<
T
>
serviceType
)
throws
ServiceNotProvidedRuntimeException
{
try
{
return
provider
().
getService
(
serviceType
);
}
catch
(
ServiceNotProvidedException
e
)
{
}
catch
(
DuplicateProviderException
|
ServiceNotProvidedException
e
)
{
throw
new
ServiceNotProvidedRuntimeException
(
e
.
getMessage
());
}
}
...
...
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleManager.java
浏览文件 @
e05b99a9
...
...
@@ -18,15 +18,68 @@
package
org.apache.skywalking.oap.server.library.module
;
import
java.util.*
;
/**
* @author peng-yongsheng
* The <code>ModuleManager</code> takes charge of all {@link ModuleDefine}s in collector.
*
* @author wu-sheng, peng-yongsheng
*/
public
interface
ModuleManager
{
public
class
ModuleManager
{
private
boolean
isInPrepareStage
=
true
;
private
Map
<
String
,
ModuleDefine
>
loadedModules
=
new
HashMap
<>();
/**
* Init the given modules
*/
public
void
init
(
ApplicationConfiguration
applicationConfiguration
)
throws
ModuleNotFoundException
,
ProviderNotFoundException
,
ServiceNotProvidedException
,
CycleDependencyException
,
ModuleConfigException
,
ModuleStartException
{
String
[]
moduleNames
=
applicationConfiguration
.
moduleList
();
ServiceLoader
<
ModuleDefine
>
moduleServiceLoader
=
ServiceLoader
.
load
(
ModuleDefine
.
class
);
LinkedList
<
String
>
moduleList
=
new
LinkedList
<>(
Arrays
.
asList
(
moduleNames
));
for
(
ModuleDefine
module
:
moduleServiceLoader
)
{
for
(
String
moduleName
:
moduleNames
)
{
if
(
moduleName
.
equals
(
module
.
name
()))
{
ModuleDefine
newInstance
;
try
{
newInstance
=
module
.
getClass
().
newInstance
();
}
catch
(
InstantiationException
|
IllegalAccessException
e
)
{
throw
new
ModuleNotFoundException
(
e
);
}
newInstance
.
prepare
(
this
,
applicationConfiguration
.
getModuleConfiguration
(
moduleName
));
loadedModules
.
put
(
moduleName
,
newInstance
);
moduleList
.
remove
(
moduleName
);
}
}
}
// Finish prepare stage
isInPrepareStage
=
false
;
if
(
moduleList
.
size
()
>
0
)
{
throw
new
ModuleNotFoundException
(
moduleList
.
toString
()
+
" missing."
);
}
BootstrapFlow
bootstrapFlow
=
new
BootstrapFlow
(
loadedModules
);
bootstrapFlow
.
start
(
this
);
bootstrapFlow
.
notifyAfterCompleted
();
}
void
init
(
ModuleDefine
moduleDefine
)
throws
ServiceNotProvidedException
,
ModuleConfigException
,
ProviderNotFoundException
;
public
boolean
has
(
String
moduleName
)
{
return
loadedModules
.
get
(
moduleName
)
!=
null
;
}
void
start
()
throws
ServiceNotProvidedException
,
ModuleConfigException
,
ProviderNotFoundException
,
ModuleStartException
;
public
ModuleDefine
find
(
String
moduleName
)
throws
ModuleNotFoundRuntimeException
{
assertPreparedStage
();
ModuleDefine
module
=
loadedModules
.
get
(
moduleName
);
if
(
module
!=
null
)
return
module
;
throw
new
ModuleNotFoundRuntimeException
(
moduleName
+
" missing."
);
}
ModuleDefine
find
(
String
moduleName
)
throws
ModuleNotFoundRuntimeException
;
private
void
assertPreparedStage
()
{
if
(
isInPrepareStage
)
{
throw
new
AssertionError
(
"Still in preparing stage."
);
}
}
}
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleNotFoundException.java
浏览文件 @
e05b99a9
...
...
@@ -16,6 +16,7 @@
*
*/
package
org.apache.skywalking.oap.server.library.module
;
public
class
ModuleNotFoundException
extends
Exception
{
...
...
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleNotFoundRuntimeException.java
浏览文件 @
e05b99a9
...
...
@@ -16,6 +16,7 @@
*
*/
package
org.apache.skywalking.oap.server.library.module
;
/**
...
...
@@ -23,6 +24,10 @@ package org.apache.skywalking.oap.server.library.module;
*/
public
class
ModuleNotFoundRuntimeException
extends
RuntimeException
{
public
ModuleNotFoundRuntimeException
(
Throwable
cause
)
{
super
(
cause
);
}
public
ModuleNotFoundRuntimeException
(
String
message
)
{
super
(
message
);
}
...
...
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleProvider.java
浏览文件 @
e05b99a9
...
...
@@ -18,7 +18,8 @@
package
org.apache.skywalking.oap.server.library.module
;
import
java.util.*
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* The <code>ModuleProvider</code> is an implementation of a {@link ModuleDefine}.
...
...
@@ -55,7 +56,7 @@ public abstract class ModuleProvider {
/**
* @return the module name
*/
public
abstract
Class
module
();
public
abstract
Class
<?
extends
ModuleDefine
>
module
();
/**
* @return ModuleConfig
...
...
@@ -77,6 +78,11 @@ public abstract class ModuleProvider {
*/
public
abstract
void
notifyAfterCompleted
()
throws
ServiceNotProvidedException
;
/**
* @return module names which does this module require?
*/
public
abstract
String
[]
requiredModules
();
/**
* Register a implementation for the service of this module provider.
*/
...
...
@@ -110,8 +116,7 @@ public abstract class ModuleProvider {
}
}
@SuppressWarnings
(
"unchecked"
)
public
<
T
extends
Service
>
T
getService
(
@SuppressWarnings
(
"unchecked"
)
<
T
extends
Service
>
T
getService
(
Class
<
T
>
serviceType
)
throws
ServiceNotProvidedException
{
Service
serviceImpl
=
services
.
get
(
serviceType
);
if
(
serviceImpl
!=
null
)
{
...
...
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/Service.java
浏览文件 @
e05b99a9
...
...
@@ -16,6 +16,7 @@
*
*/
package
org.apache.skywalking.oap.server.library.module
;
/**
...
...
@@ -26,4 +27,4 @@ package org.apache.skywalking.oap.server.library.module;
* @author wu-sheng
*/
public
interface
Service
{
}
\ No newline at end of file
}
oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ServiceNotProvidedRuntimeException.java
浏览文件 @
e05b99a9
...
...
@@ -16,10 +16,11 @@
*
*/
package
org.apache.skywalking.oap.server.library.module
;
public
class
ServiceNotProvidedRuntimeException
extends
RuntimeException
{
public
ServiceNotProvidedRuntimeException
(
String
message
)
{
super
(
message
);
}
}
\ No newline at end of file
}
oap-server/server-library/library-module/src/test/java/org/apache/skywalking/oap/server/library/module/BaseModuleA.java
浏览文件 @
e05b99a9
...
...
@@ -33,11 +33,11 @@ public class BaseModuleA extends ModuleDefine {
return
new
Class
[]
{
ServiceABusiness1
.
class
,
ServiceABusiness2
.
class
};
}
public
interface
ServiceABusiness1
extends
Service
{
public
interface
ServiceABusiness1
{
void
print
();
}
public
interface
ServiceABusiness2
extends
Service
{
public
interface
ServiceABusiness2
{
}
}
oap-server/server-library/library-module/src/test/java/org/apache/skywalking/oap/server/library/module/BaseModuleB.java
浏览文件 @
e05b99a9
...
...
@@ -33,11 +33,11 @@ public class BaseModuleB extends ModuleDefine {
return
new
Class
[]
{
BaseModuleB
.
ServiceBBusiness1
.
class
,
BaseModuleB
.
ServiceBBusiness2
.
class
};
}
public
interface
ServiceBBusiness1
extends
Service
{
public
interface
ServiceBBusiness1
{
}
public
interface
ServiceBBusiness2
extends
Service
{
public
interface
ServiceBBusiness2
{
}
}
oap-server/server-library/library-module/src/test/java/org/apache/skywalking/oap/server/library/module/ModuleAProvider.java
浏览文件 @
e05b99a9
...
...
@@ -53,7 +53,7 @@ public class ModuleAProvider extends ModuleProvider {
@Override
public
void
notifyAfterCompleted
()
{
}
public
class
Config
extends
ModuleConfig
{
public
class
Config
{
private
String
host
;
public
String
getHost
()
{
...
...
oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/ModuleManagerImpl.java
已删除
100644 → 0
浏览文件 @
de3bc220
/*
* 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.
*
*/
package
org.apache.skywalking.oap.server.starter
;
import
java.util.*
;
import
org.apache.skywalking.oap.server.core.CoreModule
;
import
org.apache.skywalking.oap.server.core.cluster.ClusterModule
;
import
org.apache.skywalking.oap.server.core.storage.StorageModule
;
import
org.apache.skywalking.oap.server.library.module.*
;
/**
* @author peng-yongsheng
*/
public
class
ModuleManagerImpl
implements
ModuleManager
{
private
final
ApplicationConfiguration
applicationConfiguration
;
private
final
Map
<
String
,
ModuleDefine
>
modules
;
public
ModuleManagerImpl
(
ApplicationConfiguration
applicationConfiguration
)
{
this
.
applicationConfiguration
=
applicationConfiguration
;
this
.
modules
=
new
HashMap
<>();
}
@Override
public
void
start
()
throws
ServiceNotProvidedException
,
ModuleConfigException
,
ProviderNotFoundException
,
ModuleStartException
{
CoreModule
coreModule
=
new
CoreModule
();
ClusterModule
clusterModule
=
new
ClusterModule
();
StorageModule
storageModule
=
new
StorageModule
();
init
(
coreModule
);
init
(
clusterModule
);
init
(
storageModule
);
coreModule
.
provider
().
start
();
storageModule
.
provider
().
start
();
clusterModule
.
provider
().
start
();
coreModule
.
provider
().
notifyAfterCompleted
();
storageModule
.
provider
().
notifyAfterCompleted
();
clusterModule
.
provider
().
notifyAfterCompleted
();
}
@Override
public
void
init
(
ModuleDefine
moduleDefine
)
throws
ServiceNotProvidedException
,
ModuleConfigException
,
ProviderNotFoundException
{
if
(!
applicationConfiguration
.
has
(
moduleDefine
.
name
()))
{
throw
new
ModuleConfigException
(
"Can't found core module configuration, please check the application.yml file."
);
}
moduleDefine
.
prepare
(
this
,
applicationConfiguration
.
getModuleConfiguration
(
moduleDefine
.
name
()));
modules
.
put
(
moduleDefine
.
name
(),
moduleDefine
);
}
@Override
public
ModuleDefine
find
(
String
moduleName
)
throws
ModuleNotFoundRuntimeException
{
ModuleDefine
module
=
modules
.
get
(
moduleName
);
if
(
module
!=
null
)
return
module
;
throw
new
ModuleNotFoundRuntimeException
(
moduleName
+
" missing."
);
}
}
oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/OAPServerStartUp.java
浏览文件 @
e05b99a9
...
...
@@ -18,9 +18,9 @@
package
org.apache.skywalking.oap.server.starter
;
import
java.util.concurrent.TimeUnit
;
import
org.apache.skywalking.oap.server.library.module.ApplicationConfiguration
;
import
org.apache.skywalking.oap.server.library.module.*
;
import
org.apache.skywalking.oap.server.starter.config.ApplicationConfigLoader
;
import
org.apache.skywalking.oap.server.starter.config.ConfigFileNotFoundException
;
import
org.slf4j.*
;
/**
...
...
@@ -32,21 +32,13 @@ public class OAPServerStartUp {
public
static
void
main
(
String
[]
args
)
{
ApplicationConfigLoader
configLoader
=
new
ApplicationConfigLoader
();
ModuleManager
manager
=
new
ModuleManager
();
try
{
ApplicationConfiguration
applicationConfiguration
=
configLoader
.
load
();
ModuleManagerImpl
moduleManager
=
new
ModuleManagerImpl
(
applicationConfiguration
);
moduleManager
.
start
();
}
catch
(
Throwable
e
)
{
manager
.
init
(
applicationConfiguration
);
}
catch
(
ConfigFileNotFoundException
|
ModuleNotFoundException
|
ProviderNotFoundException
|
ServiceNotProvidedException
|
ModuleConfigException
|
ModuleStartException
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
System
.
exit
(
1
);
}
logger
.
info
(
"OAP server start up successful."
);
try
{
TimeUnit
.
MINUTES
.
sleep
(
5
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
}
oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java
浏览文件 @
e05b99a9
...
...
@@ -18,13 +18,18 @@
package
org.apache.skywalking.oap.server.starter.config
;
import
java.io.*
;
import
java.util.*
;
import
org.apache.skywalking.oap.server.library.module.ApplicationConfiguration
;
import
org.apache.skywalking.oap.server.library.util.*
;
import
org.slf4j.*
;
import
org.apache.skywalking.oap.server.library.util.CollectionUtils
;
import
org.apache.skywalking.oap.server.library.util.ResourceUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.yaml.snakeyaml.Yaml
;
import
java.io.FileNotFoundException
;
import
java.io.Reader
;
import
java.util.Map
;
import
java.util.Properties
;
/**
* Initialize collector settings with following sources.
* Use application.yml as primary setting,
...
...
@@ -43,6 +48,7 @@ public class ApplicationConfigLoader implements ConfigLoader<ApplicationConfigur
@Override
public
ApplicationConfiguration
load
()
throws
ConfigFileNotFoundException
{
ApplicationConfiguration
configuration
=
new
ApplicationConfiguration
();
this
.
loadConfig
(
configuration
);
this
.
loadDefaultConfig
(
configuration
);
this
.
overrideConfigBySystemEnv
(
configuration
);
return
configuration
;
}
...
...
@@ -78,6 +84,31 @@ public class ApplicationConfigLoader implements ConfigLoader<ApplicationConfigur
}
}
@SuppressWarnings
(
"unchecked"
)
private
void
loadDefaultConfig
(
ApplicationConfiguration
configuration
)
throws
ConfigFileNotFoundException
{
try
{
Reader
applicationReader
=
ResourceUtils
.
read
(
"application-default.yml"
);
Map
<
String
,
Map
<
String
,
Map
<
String
,
?>>>
moduleConfig
=
yaml
.
loadAs
(
applicationReader
,
Map
.
class
);
if
(
CollectionUtils
.
isNotEmpty
(
moduleConfig
))
{
moduleConfig
.
forEach
((
moduleName
,
providerConfig
)
->
{
if
(!
configuration
.
has
(
moduleName
))
{
logger
.
warn
(
"The {} module did't define in application.yml, use default"
,
moduleName
);
ApplicationConfiguration
.
ModuleConfiguration
moduleConfiguration
=
configuration
.
addModule
(
moduleName
);
providerConfig
.
forEach
((
name
,
propertiesConfig
)
->
{
Properties
properties
=
new
Properties
();
if
(
propertiesConfig
!=
null
)
{
propertiesConfig
.
forEach
(
properties:
:
put
);
}
moduleConfiguration
.
addProviderConfiguration
(
name
,
properties
);
});
}
});
}
}
catch
(
FileNotFoundException
e
)
{
throw
new
ConfigFileNotFoundException
(
e
.
getMessage
(),
e
);
}
}
private
void
overrideConfigBySystemEnv
(
ApplicationConfiguration
configuration
)
{
for
(
Map
.
Entry
<
Object
,
Object
>
prop
:
System
.
getProperties
().
entrySet
())
{
overrideModuleSettings
(
configuration
,
prop
.
getKey
().
toString
(),
prop
.
getValue
().
toString
());
...
...
oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ConfigFileNotFoundException.java
浏览文件 @
e05b99a9
...
...
@@ -16,8 +16,10 @@
*
*/
package
org.apache.skywalking.oap.server.starter.config
;
/**
* @author peng-yongsheng
*/
...
...
oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ConfigLoader.java
浏览文件 @
e05b99a9
...
...
@@ -16,6 +16,7 @@
*
*/
package
org.apache.skywalking.oap.server.starter.config
;
/**
...
...
oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java
浏览文件 @
e05b99a9
...
...
@@ -36,24 +36,35 @@ public class StorageModuleElasticsearchProvider extends ModuleProvider {
this
.
storageConfig
=
new
StorageModuleElasticsearchConfig
();
}
@Override
public
String
name
()
{
@Override
public
String
name
()
{
return
"elasticsearch"
;
}
@Override
public
Class
module
()
{
@Override
public
Class
module
()
{
return
StorageModule
.
class
;
}
@Override
public
ModuleConfig
createConfigBeanIfAbsent
()
{
@Override
public
ModuleConfig
createConfigBeanIfAbsent
()
{
return
storageConfig
;
}
@Override
public
void
prepare
()
throws
ServiceNotProvidedException
{
@Override
public
void
prepare
()
throws
ServiceNotProvidedException
{
}
@Override
public
void
start
()
throws
ModuleStartException
{
@Override
public
void
start
()
throws
ModuleStartException
{
}
@Override
public
void
notifyAfterCompleted
()
{
@Override
public
void
notifyAfterCompleted
()
{
}
@Override
public
String
[]
requiredModules
()
{
return
new
String
[
0
];
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录