All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.tinygroup.application.impl.ApplicationDefault Maven / Gradle / Ivy

The newest version!
/**
 *  Copyright (c) 1997-2013, 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.
 * --------------------------------------------------------------------------
 *  版权 (c) 1997-2013, tinygroup.org ([email protected]).
 *
 *  本开源软件遵循 GPL 3.0 协议;
 *  如果您不遵循此协议,则不被允许使用此文件。
 *  你可以从下面的地址获取完整的协议文本
 *
 *       http://www.gnu.org/licenses/gpl.html
 */
package org.tinygroup.application.impl;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.tinygroup.application.Application;
import org.tinygroup.application.ApplicationProcessor;
import org.tinygroup.commons.io.StreamUtil;
import org.tinygroup.config.Configuration;
import org.tinygroup.config.ConfigurationManager;
import org.tinygroup.config.util.ConfigurationUtil;
import org.tinygroup.context.Context;
import org.tinygroup.context.impl.ContextImpl;
import org.tinygroup.logger.LogLevel;
import org.tinygroup.logger.Logger;
import org.tinygroup.logger.LoggerFactory;
import org.tinygroup.order.processor.OrderProcessor;
import org.tinygroup.springutil.SpringUtil;
import org.tinygroup.vfs.FileObject;
import org.tinygroup.vfs.VFS;
import org.tinygroup.xmlparser.node.XmlNode;

/**
 * 默认的应用实现
* Tiny框架认为,应用都是一个Application,无论是控制台App还是Web App。
* 只不过这个应用的复杂程度不同而已。 * */ public class ApplicationDefault implements Application { private static Logger logger = LoggerFactory .getLogger(ApplicationDefault.class); private ConfigurationManager configurationManager = ConfigurationUtil .getConfigurationManager(); private List list = new ArrayList(); /** * 使用输入流作为应用配置构造方法,流的关闭由提供者负责 * * @param inputStream */ public ApplicationDefault(InputStream inputStream, boolean closeStream) { String applicationConfig; if (inputStream != null) { try { applicationConfig = StreamUtil.readText(inputStream, "UTF-8", closeStream); if (applicationConfig != null) { configurationManager .loadApplicationConfig(applicationConfig); } } catch (Exception e) { logger.errorMessage("载入应用配置信息时出错,错误原因:{}!", e, e.getMessage()); } } } /** * 通过xml配置信息构造应用 * * @param applicationConfig */ public ApplicationDefault(String applicationConfig) { if (applicationConfig != null) { configurationManager.loadApplicationConfig(applicationConfig); } } /* * (非 Javadoc) * * @see org.tinygroup.application.Application#start() */ // public void start() { // logger.logMessage(LogLevel.INFO, "启动应用开始..."); // XmlNode node = configurationManager.getApplicationConfig(); // List applicationProcessors = // node.getSubNodes("application-processor"); // for(XmlNode processorConfig:applicationProcessors){ // String processorBean = processorConfig.getAttribute("bean"); // ApplicationProcessor processor = SpringUtil.getBean(processorBean); // } // loadSpringAndConfiguration();// 载入Spring及配置 // configurationManager.setConfigurationList(SpringUtil // .getBeansOfType(Configuration.class)); // configurationManager.distributeConfig();// 分发配置信息 // FileResolver fileResolver = SpringUtil.getBean(FileResolver.class); // fileResolver.resolve(); // 启动插件框架 // // logger.logMessage(LogLevel.INFO, "启动应用结束。"); // } // /** // * 读取自定义扫描路径列表 // * // * @param fileResolver // */ // private void loadFileResolverConfig(FileResolver fileResolver) { // XmlNode applicationConfig = configurationManager.getApplicationConfig(); // if(applicationConfig==null) // return; // PathFilter filter = new PathFilter(applicationConfig); // XmlNode findNode = filter // .findNode("/application/file-resolver-configuration"); // if (findNode != null) { // String resolve = findNode.getAttribute("resolve-classpath"); // if (resolve == null || resolve.length() == 0) { // resolve = "true"; // } // List skipList = filter // .findNodeList("/application/file-resolver-configuration/skip-patterns/skip-pattern"); // for (XmlNode node : skipList) { // fileResolver.addSkipPathPattern(node.getAttribute("pattern")); // } // List classPathList = filter // .findNodeList("/application/file-resolver-configuration/class-paths/class-path"); // for (XmlNode classPath : classPathList) { // fileResolver.addManualClassPath(classPath.getAttribute("path")); // } // } // } // // private void loadSpringAndConfiguration() { // logger.logMessage(LogLevel.INFO, "加载Spring Bean文件开始..."); // FileResolver fileResolver = new FileResolverImpl(); // fileResolver.addFileProcessor(new SpringBeansFileProcessor()); // fileResolver.addFileProcessor(new ConfigurationFileProcessor()); // loadFileResolverConfig(fileResolver); // fileResolver.resolve(); // logger.logMessage(LogLevel.INFO, "加载Spring Bean文件结束。"); // } // // /* // * (非 Javadoc) // * // * @see org.tinygroup.application.Application#stop() // */ // public void stop() { // logger.logMessage(LogLevel.INFO, "停止应用开始..."); // PluginManager pluginManager = SpringUtil.getBean(PluginManager.class); // pluginManager.stop(); // logger.logMessage(LogLevel.INFO, "停止应用结束。"); // } private static final String WEBROOT = "TINY_WEBROOT"; private static final String FILE_PROCESSOR_ORDER = "application.order.xml"; private boolean isOrder; // 保存应用程序的坏境变量 private Context context = new ContextImpl(); // 应用处理器列表 private List applicationProcessors = new ArrayList(); private XmlNode applicationConfig; public ApplicationDefault() { } public boolean isOrder() { return isOrder; } public void setOrder(boolean isOrder) { this.isOrder = isOrder; } /** * 启动应用程序 */ public void start() { // String webRoot = context.get(WEBROOT); // if (webRoot != null) { // fullContextFileRepository.addSearchPath(webRoot); // } logger.logMessage(LogLevel.INFO, "启动应用开始..."); XmlNode node = configurationManager.getApplicationConfig(); if (node != null) { List processorConfigs = node .getSubNodesRecursively("application-processor"); if (processorConfigs != null) { for (XmlNode processorConfig : processorConfigs) { String processorBean = processorConfig.getAttribute("bean"); ApplicationProcessor processor = SpringUtil .getBean(processorBean); applicationProcessors.add(processor); } } } configurationManager.setConfigurationList(SpringUtil .getBeansOfType(Configuration.class)); configurationManager.distributeConfig();// 分发配置信息 if (applicationProcessors != null) { if (isOrder) { // 对ApplicationProcessor列表进行排序 OrderProcessor orderProcessor = SpringUtil .getBean(OrderProcessor.ORDER_NAME); String jarPath = getClass().getProtectionDomain() .getCodeSource().getLocation().getFile(); FileObject fileObject = VFS.resolveFile(jarPath); orderProcessor.loadOrderFile(fileObject .getChild(FILE_PROCESSOR_ORDER)); applicationProcessors = orderProcessor.orderList( "applicationProcessor", applicationProcessors); } for (ApplicationProcessor applicationProcessor : applicationProcessors) { applicationProcessor.setApplication(this); logger.logMessage(LogLevel.INFO, "应用处理器{}正在启动...", applicationProcessor.getClass()); applicationProcessor.start(); logger.logMessage(LogLevel.INFO, "应用处理器{}启动完毕。", applicationProcessor.getClass()); } } } /** * 关闭应用程序 */ public void stop() { for (ApplicationProcessor processorLoader : applicationProcessors) { logger.logMessage(LogLevel.INFO, "应用处理器{}正在停止...", processorLoader.getClass()); processorLoader.stop(); logger.logMessage(LogLevel.INFO, "应用处理器{}停止完毕。", processorLoader.getClass()); } } public Context getContext() { return context; } public String getNodeName() { return "application-properties"; } public void setConfiguration(XmlNode xmlNode) { applicationConfig = xmlNode; if (applicationConfig != null) { List subNodes = applicationConfig.getSubNodes("property"); if (subNodes != null) { for (XmlNode property : subNodes) { String name = property.getAttribute("name"); String value = property.getAttribute("value"); if (name != null && value != null) { context.put(name, value); logger.logMessage(LogLevel.INFO, "从配置文件加载应用参数<{}>=<{}>。", name, value); } else { logger.logMessage(LogLevel.ERROR, "应用参数<{}>=<{}>设置失败!", name, value); } } } } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy