
org.tinygroup.tinyrunner.Runner Maven / Gradle / Ivy
The newest version!
/**
* Copyright (c) 1997-2013, www.tinygroup.org ([email protected]).
*
* Licensed under the GPL, Version 3.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.gnu.org/licenses/gpl.html
*
* 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.tinygroup.tinyrunner;
import java.io.InputStream;
import java.util.List;
import org.tinygroup.application.Application;
import org.tinygroup.application.ApplicationProcessor;
import org.tinygroup.application.impl.ApplicationDefault;
import org.tinygroup.beancontainer.BeanContainerFactory;
import org.tinygroup.commons.io.StreamUtil;
import org.tinygroup.config.ConfigurationManager;
import org.tinygroup.config.util.ConfigurationUtil;
import org.tinygroup.fileresolver.FileProcessor;
import org.tinygroup.fileresolver.FileResolver;
import org.tinygroup.fileresolver.FileResolverFactory;
import org.tinygroup.fileresolver.FileResolverUtil;
import org.tinygroup.fileresolver.impl.ConfigurationFileProcessor;
import org.tinygroup.fileresolver.impl.LocalPropertiesFileProcessor;
import org.tinygroup.fileresolver.impl.MergePropertiesFileProcessor;
import org.tinygroup.fileresolver.impl.RemoteConfigFileProcessor;
import org.tinygroup.logger.Logger;
import org.tinygroup.logger.LoggerFactory;
import org.tinygroup.parser.filter.PathFilter;
import org.tinygroup.springutil.SpringBeanContainer;
import org.tinygroup.springutil.fileresolver.SpringBeansFileProcessor;
import org.tinygroup.xmlparser.node.XmlNode;
import org.tinygroup.xmlparser.parser.XmlStringParser;
public class Runner {
// "/Application.preloadbeans.xml";
private static boolean init = false;
private static Application application;
private static String DEFAULT_CONFIG = "application.xml";
private static final Logger LOGGER = LoggerFactory
.getLogger(Runner.class);
private static final String TINY_JAR_PATTERN = "org\\.tinygroup\\.(.)*\\.jar";
public static void init(String xmlFile, List includePathPatterns) {
if (init) {
return;
}
initDirect(xmlFile,includePathPatterns);
}
/**
* 初始化
*
* @param classPathResolve
* 是否对classPath进行处理
*/
public static void initDirect(String xmlFile,List includePathPatterns) {
// init(xmlFile, classPathResolve, null, null);
String configXml = xmlFile;
if (null == configXml || "".equals(configXml)) {
configXml = DEFAULT_CONFIG;
}
InputStream inputStream = Runner.class.getClassLoader()
.getResourceAsStream(configXml);
if (inputStream == null) {
inputStream = Runner.class.getResourceAsStream(configXml);
}
String applicationConfig = "";
if (inputStream != null) {
try {
applicationConfig = StreamUtil.readText(inputStream, "UTF-8",
false);
application = new ApplicationDefault();
if (applicationConfig != null) {
ConfigurationManager c = ConfigurationUtil
.getConfigurationManager();
XmlNode applicationXml = new XmlStringParser().parse(applicationConfig).getRoot();
c.setApplicationConfiguration(applicationXml);
}
initSpring(applicationConfig,includePathPatterns);
FileResolver fileResolver = BeanContainerFactory
.getBeanContainer(
Runner.class.getClassLoader())
.getBean(FileResolver.BEAN_NAME);
FileResolverUtil.addClassPathPattern(fileResolver);
fileResolver.addResolvePath(FileResolverUtil
.getClassPath(fileResolver));
fileResolver.addResolvePath(FileResolverUtil.getWebClasses());
try {
fileResolver.addResolvePath(FileResolverUtil
.getWebLibJars(fileResolver));
} catch (Exception e) {
LOGGER.errorMessage("为文件扫描器添加webLibJars时出现异常", e);
}
fileResolver.addIncludePathPattern(TINY_JAR_PATTERN);
addIncludePathPatterns(fileResolver,includePathPatterns);
XmlNode applicationXml = ConfigurationUtil
.getConfigurationManager()
.getApplicationConfiguration();
if (applicationXml != null) {
List processorConfigs = applicationXml
.getSubNodesRecursively("application-processor");
if (processorConfigs != null) {
for (XmlNode processorConfig : processorConfigs) {
String processorBean = processorConfig
.getAttribute("bean");
ApplicationProcessor processor = BeanContainerFactory
.getBeanContainer(
Runner.class
.getClassLoader()).getBean(
processorBean);// TODO
application.addApplicationProcessor(processor);
}
}
}
} catch (Exception e) {
LOGGER.errorMessage("载入应用配置信息时出现异常,错误原因:{}!", e, e.getMessage());
throw new RuntimeException(e);
}
}
application.init();
application.start();
init = true;
}
private static void initSpring(String applicationConfig,List includePathPatterns) {
BeanContainerFactory.initBeanContainer(SpringBeanContainer.class.getName());
FileResolver fileResolver = FileResolverFactory.getFileResolver();
FileResolverUtil.addClassPathPattern(fileResolver);
fileResolver
.addResolvePath(FileResolverUtil.getClassPath(fileResolver));
fileResolver.addResolvePath(FileResolverUtil.getWebClasses());
try {
fileResolver.addResolvePath(FileResolverUtil
.getWebLibJars(fileResolver));
} catch (Exception e) {
LOGGER.errorMessage("为文件扫描器添加webLibJars时出现异常", e);
}
fileResolver.addIncludePathPattern(TINY_JAR_PATTERN);
addIncludePathPatterns(fileResolver,includePathPatterns);
loadFileResolverConfig(fileResolver, applicationConfig);
fileResolver.addFileProcessor(new SpringBeansFileProcessor());
fileResolver.addFileProcessor(new LocalPropertiesFileProcessor(applicationConfig));
FileProcessor remoteConfig = new RemoteConfigFileProcessor(applicationConfig);
fileResolver.addFileProcessor(remoteConfig);
fileResolver.addFileProcessor(new MergePropertiesFileProcessor());
fileResolver.addFileProcessor(new ConfigurationFileProcessor());
// SpringUtil.regSpringConfigXml(xmlFile);
fileResolver.resolve();
}
private static void loadFileResolverConfig(FileResolver fileResolver,
String applicationConfig) {
XmlStringParser parser = new XmlStringParser();
XmlNode root = parser.parse(applicationConfig).getRoot();
PathFilter filter = new PathFilter(root);
List classPathList = filter
.findNodeList("/application/file-resolver-configuration/class-paths/class-path");
for (XmlNode classPath : classPathList) {
fileResolver.addResolvePath(classPath.getAttribute("path"));
}
List includePatternList = filter
.findNodeList("/application/file-resolver-configuration/include-patterns/include-pattern");
for (XmlNode includePatternNode : includePatternList) {
fileResolver.addIncludePathPattern(includePatternNode
.getAttribute("pattern"));
}
}
private static void addIncludePathPatterns(FileResolver fileResolver,List includePathPatterns){
if(includePathPatterns==null){
return;
}
for(String pattern:includePathPatterns){
fileResolver.addIncludePathPattern(pattern);
}
}
public static void stop(){
if(init){
application.stop();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy