Browse Source
* commit '4df1da8c5226e9d0ef208ef33a00c1ca07c99ab9': test CORE-76 Activator重复启动内置服务器、切换环境的支持 1、重写一下之前的内置tomcat启动,直接指定initializer,省的tomcat也要扫描一遍class 2、tomcat关闭时,关闭activator 还有一些待完善,无阻塞,先传代码方便各个模块的Activator调试 CORE-76 Activator重复启动内置服务器、切换环境的支持 1、重写一下之前的内置tomcat启动,直接指定initializer,省的tomcat也要扫描一遍class 2、tomcat关闭时,关闭activator 还有一些待完善,无阻塞,先传代码方便各个模块的Activator调试master
superman
7 years ago
18 changed files with 288 additions and 836 deletions
@ -1,56 +0,0 @@
|
||||
package com.fr.start; |
||||
|
||||
import java.io.File; |
||||
import javax.servlet.ServletException; |
||||
import org.apache.catalina.Context; |
||||
import org.apache.catalina.LifecycleException; |
||||
import org.apache.catalina.core.AprLifecycleListener; |
||||
import org.apache.catalina.core.StandardServer; |
||||
import org.apache.catalina.startup.Tomcat; |
||||
|
||||
public class TomcatFRHost { |
||||
private static Tomcat tomcat; |
||||
|
||||
public static Tomcat getTomcat() { |
||||
return tomcat; |
||||
} |
||||
|
||||
private static StandardServer server; |
||||
|
||||
private static AprLifecycleListener listener; |
||||
|
||||
public static void main(String[] args) throws Exception { |
||||
tomcat = new Tomcat(); |
||||
// 主机名,或ip
|
||||
// tomcat.setHostname("localhost");
|
||||
// 设置端口,80为默认端口
|
||||
tomcat.setPort(8071); |
||||
// tomcat用于存储自身的信息,可以随意指定,最好包含在项目目录下
|
||||
tomcat.setBaseDir("."); |
||||
// 建立server参照tomcat文件结构
|
||||
server = (StandardServer) tomcat.getServer(); |
||||
listener = new AprLifecycleListener(); |
||||
server.addLifecycleListener(listener); |
||||
// 将appBase设为本项目所在目录
|
||||
//tomcat.getHost().setAppBase(".");
|
||||
tomcat.getHost().setAppBase( |
||||
System.getProperty("user.dir") + File.separator + "."); |
||||
|
||||
// 第二个参数对应docBase为web应用路径,目录下应有WEB-INF,WEB-INF下要有web.xml
|
||||
// 启动tomcat
|
||||
try { |
||||
tomcat.start(); |
||||
Context ct1 = tomcat.addWebapp("/WebReport", "/Users/momeak/Documents/Working/develop/others/tomcatsrc/WebReport"); |
||||
} catch (LifecycleException e) { |
||||
e.printStackTrace(); |
||||
} catch (ServletException e) { |
||||
e.printStackTrace(); |
||||
} |
||||
// Context ct1 = tomcat.addWebapp("/examples", "/Users/momeak/Documents/Working/develop/others/tomcatsrc/examples");
|
||||
|
||||
// Context ct = tomcat.addWebapp("", "/Users/momeak/Documents/Working/develop/others/tomcatsrc/webapps/ROOT");
|
||||
|
||||
// tomcat.getServer().await();
|
||||
System.out.println("启动成功"); |
||||
} |
||||
} |
@ -0,0 +1,15 @@
|
||||
package com.fr.start.server; |
||||
|
||||
import com.fr.event.Event; |
||||
import com.fr.event.Null; |
||||
|
||||
/** |
||||
* Created by juhaoyu on 2018/6/5. |
||||
* 内置服务器事件 |
||||
*/ |
||||
public enum EmbedServerEvent implements Event<Null> { |
||||
BeforeStart, |
||||
AfterStart, |
||||
BeforeStop, |
||||
AfterStop |
||||
} |
@ -1,133 +0,0 @@
|
||||
package com.fr.start.server; |
||||
import java.lang.reflect.InvocationTargetException; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
import java.util.logging.Level; |
||||
import java.util.logging.Logger; |
||||
import javax.servlet.ServletException; |
||||
import org.apache.catalina.Context; |
||||
import org.apache.catalina.Host; |
||||
import org.apache.catalina.core.ContainerBase; |
||||
import org.apache.catalina.core.StandardContext; |
||||
import org.apache.catalina.core.StandardHost; |
||||
import org.apache.catalina.startup.ContextConfig; |
||||
import org.apache.catalina.startup.Tomcat; |
||||
|
||||
public class FRTomcat extends Tomcat{ |
||||
|
||||
private final Map<String, Logger> frpinnedLoggers = new HashMap<String, Logger>(); |
||||
private boolean frsilent = false; |
||||
|
||||
|
||||
public Context addWebapp(String contextPath, String docBase) throws ServletException { |
||||
silence(host, contextPath); |
||||
|
||||
Context ctx = createContext(host, contextPath); |
||||
if (ctx instanceof StandardContext) { |
||||
((StandardContext)ctx).setDelegate(true); |
||||
} |
||||
ctx.setPath(contextPath); |
||||
ctx.setDocBase(docBase); |
||||
|
||||
ctx.addLifecycleListener(new DefaultWebXmlListener()); |
||||
ctx.setConfigFile(getWebappConfigFile(docBase, contextPath)); |
||||
|
||||
ContextConfig ctxCfg = new ContextConfig(); |
||||
ctx.addLifecycleListener(ctxCfg); |
||||
|
||||
ctxCfg.setDefaultWebXml(noDefaultWebXmlPath()); |
||||
|
||||
if (host == null) { |
||||
getHost().addChild(ctx); |
||||
} else { |
||||
host.addChild(ctx); |
||||
} |
||||
|
||||
return ctx; |
||||
} |
||||
|
||||
private void silence(Host host, String contextPath) { |
||||
String loggerName = getLoggerName(host, contextPath); |
||||
Logger logger = Logger.getLogger(loggerName); |
||||
frpinnedLoggers.put(loggerName, logger); |
||||
if (frsilent) { |
||||
logger.setLevel(Level.WARNING); |
||||
} else { |
||||
logger.setLevel(Level.INFO); |
||||
} |
||||
} |
||||
|
||||
private String getLoggerName(Host host, String contextName) { |
||||
if (host == null) { |
||||
host = getHost(); |
||||
} |
||||
StringBuilder loggerName = new StringBuilder(); |
||||
loggerName.append(ContainerBase.class.getName()); |
||||
loggerName.append(".["); |
||||
// Engine name
|
||||
loggerName.append(host.getParent().getName()); |
||||
loggerName.append("].["); |
||||
// Host name
|
||||
loggerName.append(host.getName()); |
||||
loggerName.append("].["); |
||||
// Context name
|
||||
if (contextName == null || contextName.equals("")) { |
||||
loggerName.append("/"); |
||||
} else if (contextName.startsWith("##")) { |
||||
loggerName.append("/"); |
||||
loggerName.append(contextName); |
||||
} |
||||
loggerName.append(']'); |
||||
|
||||
return loggerName.toString(); |
||||
} |
||||
|
||||
private Context createContext(Host host, String url) { |
||||
String contextClass = StandardContext.class.getName(); |
||||
if (host == null) { |
||||
host = this.getHost(); |
||||
} |
||||
if (host instanceof StandardHost) { |
||||
contextClass = ((StandardHost) host).getContextClass(); |
||||
} |
||||
try { |
||||
return (Context) Class.forName(contextClass).getConstructor() |
||||
.newInstance(); |
||||
} catch (InstantiationException e) { |
||||
throw new IllegalArgumentException( |
||||
"Can't instantiate context-class " + contextClass |
||||
+ " for host " + host + " and url " |
||||
+ url, e); |
||||
} catch (IllegalAccessException e) { |
||||
throw new IllegalArgumentException( |
||||
"Can't instantiate context-class " + contextClass |
||||
+ " for host " + host + " and url " |
||||
+ url, e); |
||||
} catch (IllegalArgumentException e) { |
||||
throw new IllegalArgumentException( |
||||
"Can't instantiate context-class " + contextClass |
||||
+ " for host " + host + " and url " |
||||
+ url, e); |
||||
} catch (InvocationTargetException e) { |
||||
throw new IllegalArgumentException( |
||||
"Can't instantiate context-class " + contextClass |
||||
+ " for host " + host + " and url " |
||||
+ url, e); |
||||
} catch (NoSuchMethodException e) { |
||||
throw new IllegalArgumentException( |
||||
"Can't instantiate context-class " + contextClass |
||||
+ " for host " + host + " and url " |
||||
+ url, e); |
||||
} catch (SecurityException e) { |
||||
throw new IllegalArgumentException( |
||||
"Can't instantiate context-class " + contextClass |
||||
+ " for host " + host + " and url " |
||||
+ url, e); |
||||
} catch (ClassNotFoundException e) { |
||||
throw new IllegalArgumentException( |
||||
"Can't instantiate context-class " + contextClass |
||||
+ " for host " + host + " and url " |
||||
+ url, e); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,119 @@
|
||||
package com.fr.start.server; |
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.design.DesignerEnvManager; |
||||
import com.fr.event.EventDispatcher; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.module.ModuleRole; |
||||
import com.fr.stable.lifecycle.AbstractLifecycle; |
||||
import com.fr.startup.FineWebApplicationInitializer; |
||||
import com.fr.third.springframework.web.SpringServletContainerInitializer; |
||||
import com.fr.third.springframework.web.context.support.AnnotationConfigWebApplicationContext; |
||||
import org.apache.catalina.Context; |
||||
import org.apache.catalina.LifecycleException; |
||||
import org.apache.catalina.loader.VirtualWebappLoader; |
||||
import org.apache.catalina.startup.Tomcat; |
||||
|
||||
import java.io.File; |
||||
import java.util.HashSet; |
||||
import java.util.Set; |
||||
|
||||
/** |
||||
* Created by juhaoyu on 2018/6/5. |
||||
*/ |
||||
public class FineEmbedServer extends AbstractLifecycle { |
||||
|
||||
private static final FineEmbedServer INSTANCE = new FineEmbedServer(); |
||||
|
||||
private Tomcat tomcat; |
||||
|
||||
public static FineEmbedServer getInstance() { |
||||
|
||||
return INSTANCE; |
||||
} |
||||
|
||||
private FineEmbedServer() {} |
||||
|
||||
@Override |
||||
protected synchronized void executeStart() { |
||||
|
||||
EventDispatcher.fire(EmbedServerEvent.BeforeStart); |
||||
try { |
||||
//初始化tomcat
|
||||
initTomcat(); |
||||
tomcat.start(); |
||||
} catch (LifecycleException e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
EventDispatcher.fire(EmbedServerEvent.AfterStart); |
||||
} |
||||
|
||||
private void initTomcat() { |
||||
|
||||
tomcat = new Tomcat(); |
||||
|
||||
tomcat.setPort(DesignerEnvManager.getEnvManager().getEmbedServerPort()); |
||||
String docBase = new File(FRContext.getCurrentEnv().getPath()).getParent(); |
||||
String appName = "/" + FRContext.getCurrentEnv().getAppName(); |
||||
Context context = tomcat.addContext(appName, docBase); |
||||
tomcat.addServlet(appName, "default", "org.apache.catalina.servlets.DefaultServlet"); |
||||
//覆盖tomcat的WebAppClassLoader
|
||||
context.setLoader(new FRTomcatLoader()); |
||||
|
||||
//直接指定initializer,tomcat就不用再扫描一遍了
|
||||
SpringServletContainerInitializer initializer = new SpringServletContainerInitializer(); |
||||
Set<Class<?>> classes = new HashSet<Class<?>>(); |
||||
classes.add(FineWebApplicationInitializer.class); |
||||
context.addServletContainerInitializer(initializer, classes); |
||||
} |
||||
|
||||
@Override |
||||
protected synchronized void executeStop() { |
||||
|
||||
EventDispatcher.fire(EmbedServerEvent.BeforeStop); |
||||
try { |
||||
stopSpring(); |
||||
stopServerActivator(); |
||||
stopTomcat(); |
||||
} catch (LifecycleException e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
EventDispatcher.fire(EmbedServerEvent.AfterStop); |
||||
} |
||||
|
||||
private void stopServerActivator() { |
||||
|
||||
ModuleRole.ServerRoot.stop(); |
||||
} |
||||
|
||||
private void stopSpring() { |
||||
|
||||
AnnotationConfigWebApplicationContext context = ModuleRole.ServerRoot.getSingleton(AnnotationConfigWebApplicationContext.class); |
||||
if (context != null) { |
||||
context.stop(); |
||||
context.destroy(); |
||||
} |
||||
} |
||||
|
||||
private void stopTomcat() throws LifecycleException { |
||||
|
||||
tomcat.stop(); |
||||
tomcat.destroy(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Created by juhaoyu on 2018/6/5. |
||||
* 自定义的tomcat loader,主要用于防止内置服务器再加载一遍class |
||||
*/ |
||||
private static class FRTomcatLoader extends VirtualWebappLoader { |
||||
|
||||
@Override |
||||
public ClassLoader getClassLoader() { |
||||
|
||||
return this.getClass().getClassLoader(); |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
@ -1,62 +0,0 @@
|
||||
package com.fr.start.server; |
||||
|
||||
import java.io.IOException; |
||||
import java.io.OutputStream; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* p: 这是为了将一个OutputStream输出多个OutputStream |
||||
*/ |
||||
public class MultiOutputStream extends OutputStream { |
||||
private List outList = new ArrayList(); |
||||
|
||||
public MultiOutputStream() { |
||||
} |
||||
|
||||
public void addOutputStream(OutputStream output) { |
||||
this.outList.add(output); |
||||
} |
||||
|
||||
public void removeOutputStream(OutputStream output) { |
||||
this.outList.remove(output); |
||||
} |
||||
|
||||
public int getOutputStreamCount() { |
||||
return this.outList.size(); |
||||
} |
||||
|
||||
public OutputStream getOutputStream(int index) { |
||||
return (OutputStream) this.outList.get(index); |
||||
} |
||||
|
||||
public void write(int b) throws IOException { |
||||
for(int i = 0; i < outList.size(); i++) { |
||||
((OutputStream)outList.get(i)).write(b); |
||||
} |
||||
} |
||||
|
||||
public void write(byte buff[]) throws IOException { |
||||
for(int i = 0; i < outList.size(); i++) { |
||||
((OutputStream)outList.get(i)).write(buff); |
||||
} |
||||
} |
||||
|
||||
public void write(byte buff[], int off, int len) throws IOException { |
||||
for(int i = 0; i < outList.size(); i++) { |
||||
((OutputStream)outList.get(i)).write(buff, off, len); |
||||
} |
||||
} |
||||
|
||||
public void flush() throws IOException { |
||||
for(int i = 0; i < outList.size(); i++) { |
||||
((OutputStream)outList.get(i)).flush(); |
||||
} |
||||
} |
||||
|
||||
public void close() throws IOException { |
||||
for(int i = 0; i < outList.size(); i++) { |
||||
((OutputStream)outList.get(i)).close(); |
||||
} |
||||
} |
||||
} |
@ -1,280 +0,0 @@
|
||||
package com.fr.start.server; |
||||
|
||||
import com.fr.module.ModuleContext; |
||||
import java.awt.SystemTray; |
||||
import java.io.File; |
||||
import java.io.FileOutputStream; |
||||
import java.io.IOException; |
||||
import java.io.PrintStream; |
||||
import java.lang.reflect.Field; |
||||
import java.text.DateFormat; |
||||
import java.text.SimpleDateFormat; |
||||
import java.util.ArrayList; |
||||
import java.util.Calendar; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
import com.fr.general.GeneralContext; |
||||
import com.fr.stable.ProductConstants; |
||||
import org.apache.catalina.Context; |
||||
import org.apache.catalina.LifecycleException; |
||||
import org.apache.catalina.Server; |
||||
import org.apache.catalina.core.AprLifecycleListener; |
||||
import org.apache.catalina.core.StandardServer; |
||||
|
||||
import com.fr.base.Env; |
||||
import com.fr.base.FRContext; |
||||
import com.fr.dav.LocalEnv; |
||||
import com.fr.design.DesignerEnvManager; |
||||
import com.fr.general.Inter; |
||||
import com.fr.stable.StableUtils; |
||||
import com.fr.stable.project.ProjectConstants; |
||||
import com.fr.start.StartServer; |
||||
|
||||
public class TomcatHost { |
||||
|
||||
private static FRTomcat tomcat; |
||||
private StandardServer server; |
||||
private AprLifecycleListener listener; |
||||
|
||||
// private Server server;
|
||||
private MultiOutputStream multiOutputStream = null; |
||||
private File outLogFile = null; |
||||
private int currentPort = -1; |
||||
// 内置服务器一个端口下面可以有多个应用,但是content不能重名
|
||||
private Map<String, Context> webAppsMap = new HashMap<String, Context>(); |
||||
private List<TomcatServerListener> listenerList = new ArrayList<TomcatServerListener>(); |
||||
private boolean isDemoAppLoaded = false; |
||||
|
||||
public TomcatHost(int port) { |
||||
this.currentPort = port; |
||||
initServer(); |
||||
|
||||
initLogFileAndOutputStream(); |
||||
|
||||
// TODO: 将HostTomcatServer放到ServerTray中去
|
||||
tryStartServerTray(); |
||||
} |
||||
|
||||
public static FRTomcat getTomcat() { |
||||
return tomcat; |
||||
} |
||||
|
||||
private void initServer() { |
||||
try { |
||||
//直接用自定义的,不用server.xml
|
||||
this.tomcat = new FRTomcat(); |
||||
this.tomcat.setPort(this.currentPort); |
||||
this.tomcat.setBaseDir(StableUtils.getInstallHome()); |
||||
this.server = (StandardServer) tomcat.getServer(); |
||||
this.listener = new AprLifecycleListener(); |
||||
this.server.addLifecycleListener(listener); |
||||
this.tomcat.getHost().setAppBase(StableUtils.getInstallHome() + File.separator + "."); |
||||
this.tomcat.getConnector().setURIEncoding("UTF-8"); |
||||
} catch (Exception e) { |
||||
//todo 最好加一个用server.xml
|
||||
FRContext.getLogger().error(e.getMessage(), e); |
||||
} |
||||
} |
||||
|
||||
private void initLogFileAndOutputStream() { |
||||
// log文件放置的位置
|
||||
File logDir = null; |
||||
String installHome = StableUtils.getInstallHome(); |
||||
if (installHome == null) {// 没有installHome的时候,就放到user.home下面喽
|
||||
logDir = new File(ProductConstants.getEnvHome() + File.separator + ProjectConstants.LOGS_NAME); |
||||
} else { |
||||
// james:logs放在安装目录下面
|
||||
logDir = new File(installHome + File.separator + ProjectConstants.LOGS_NAME + File.separator + "tomcat"); |
||||
} |
||||
StableUtils.mkdirs(logDir); |
||||
DateFormat fateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
||||
Calendar curCalendar = Calendar.getInstance(); |
||||
outLogFile = new File(logDir, "tomcat_" + fateFormat.format(curCalendar.getTime()) + ".log"); |
||||
|
||||
try { |
||||
multiOutputStream = new MultiOutputStream(); |
||||
multiOutputStream.addOutputStream(new FileOutputStream(outLogFile, true)); |
||||
multiOutputStream.addOutputStream(System.out); |
||||
System.setErr(new PrintStream(multiOutputStream)); |
||||
System.setOut(new PrintStream(multiOutputStream)); |
||||
} catch (IOException ioe) { |
||||
FRContext.getLogger().error(ioe.getMessage(), ioe); |
||||
} |
||||
} |
||||
|
||||
private synchronized void addWebApplication(String context, String webappsPath) { |
||||
FRContext.getLogger().info("The new Application Path is: \n" + webappsPath + ", it will be added."); |
||||
if (webAppsMap.get(context) != null) { |
||||
Context webapp = webAppsMap.remove(context); |
||||
} |
||||
try { |
||||
if (!isStarted()) { |
||||
start(); |
||||
} |
||||
Context webapp = tomcat.addWebapp(context, webappsPath); |
||||
webAppsMap.put(context, webapp); |
||||
} catch (Exception e) { |
||||
FRContext.getLogger().error(e.getMessage(), e); |
||||
} |
||||
} |
||||
|
||||
private void addAndStartWebApplication(String context, String webAppPath) { |
||||
addWebApplication(context, webAppPath); |
||||
} |
||||
|
||||
/** |
||||
* Get MultiOutputStream. |
||||
*/ |
||||
public MultiOutputStream getMultiOutputStream() { |
||||
return this.multiOutputStream; |
||||
} |
||||
|
||||
/** |
||||
* Get out log file |
||||
*/ |
||||
public File getOutLogFile() { |
||||
return this.outLogFile; |
||||
} |
||||
|
||||
private Server getServer() { |
||||
if (server == null) { |
||||
initServer(); |
||||
} |
||||
|
||||
return server; |
||||
} |
||||
|
||||
/** |
||||
* Start |
||||
* |
||||
* @throws Exception |
||||
*/ |
||||
public void start() throws Exception { |
||||
tomcat.start(); |
||||
for (int i = 0; i < listenerList.size(); i++) { |
||||
TomcatServerListener listener = TomcatHost.this.getLinstener(i); |
||||
listener.started(this); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Stop |
||||
* |
||||
* @throws Exception |
||||
*/ |
||||
public void stop() throws Exception { |
||||
|
||||
tomcat.stop(); |
||||
|
||||
for (int i = 0; i < listenerList.size(); i++) { |
||||
TomcatServerListener listener = this.getLinstener(i); |
||||
listener.stopped(this); |
||||
} |
||||
|
||||
StartServer.currentEnvChanged(); |
||||
server = null;//重置server
|
||||
} |
||||
|
||||
/** |
||||
* Is started |
||||
* |
||||
* @throws Exception |
||||
*/ |
||||
public boolean isStarted() throws Exception { |
||||
return getServer().getState().isAvailable(); |
||||
} |
||||
|
||||
public void addListener(TomcatServerListener listener) { |
||||
this.listenerList.add(listener); |
||||
} |
||||
|
||||
public int getLinstenerCount() { |
||||
return this.listenerList.size(); |
||||
} |
||||
|
||||
public TomcatServerListener getLinstener(int index) { |
||||
if (index < 0 || index >= this.getLinstenerCount()) { |
||||
return null; |
||||
} |
||||
|
||||
return this.listenerList.get(index); |
||||
} |
||||
|
||||
public void clearLinsteners() { |
||||
this.listenerList.clear(); |
||||
} |
||||
|
||||
/** |
||||
* 尝试启动系统托盘 |
||||
*/ |
||||
private void tryStartServerTray() { |
||||
if (SystemTray.isSupported()) { |
||||
new ServerTray(this); |
||||
} else { |
||||
FRContext.getLogger().error("Do not support the SystemTray!"); |
||||
} |
||||
} |
||||
|
||||
public void exit() { |
||||
try { |
||||
getServer().stop(); |
||||
} catch (LifecycleException e) { |
||||
FRContext.getLogger().error(e.getMessage(), e); |
||||
} |
||||
|
||||
for (int i = 0; i < listenerList.size(); i++) { |
||||
TomcatServerListener listener = this.getLinstener(i); |
||||
listener.exited(this); |
||||
} |
||||
|
||||
try { |
||||
getServer().destroy(); |
||||
} catch (LifecycleException e) { |
||||
FRContext.getLogger().error(e.getMessage(), e); |
||||
} |
||||
StartServer.currentEnvChanged(); |
||||
|
||||
} |
||||
|
||||
public int getCurrentPort() { |
||||
return currentPort; |
||||
} |
||||
|
||||
/** |
||||
* 安装目录下的默认的WebReport,这个只执行一次,除了预览demo,其他的不要调用这个方法 |
||||
*/ |
||||
public void addAndStartInstallHomeWebApp() { |
||||
if (!isDemoAppLoaded) { |
||||
String installHome = StableUtils.getInstallHome(); |
||||
String webApplication = StableUtils.pathJoin(new String[]{installHome, ProjectConstants.WEBAPP_NAME}); |
||||
|
||||
if (new File(webApplication).isDirectory()) { |
||||
addAndStartWebApplication("/" + ProjectConstants.WEBAPP_NAME, webApplication); |
||||
} |
||||
} |
||||
isDemoAppLoaded = true; |
||||
} |
||||
|
||||
/** |
||||
* 加载Env下的报表运行环境 |
||||
*/ |
||||
public void addAndStartLocalEnvHomeWebApp() { |
||||
String name = DesignerEnvManager.getEnvManager().getCurEnvName(); |
||||
if (name.equals(Inter.getLocText("Default"))) { |
||||
isDemoAppLoaded = true; |
||||
} |
||||
Env env = FRContext.getCurrentEnv(); |
||||
if (env instanceof LocalEnv) { |
||||
String webApplication = new File(env.getPath()).getParent(); |
||||
FRContext.getLogger().info(Inter.getLocText("INFO-Reset_Webapp") + ":" + webApplication); |
||||
addAndStartWebApplication("/" + GeneralContext.getCurrentAppNameOfEnv(), webApplication); |
||||
} |
||||
} |
||||
|
||||
public boolean isDemoAppLoaded() { |
||||
return isDemoAppLoaded; |
||||
} |
||||
|
||||
} |
@ -1,18 +0,0 @@
|
||||
package com.fr.start.server; |
||||
|
||||
public interface TomcatServerListener { |
||||
/** |
||||
* Started |
||||
*/ |
||||
public void started(TomcatHost tomcatServer); |
||||
|
||||
/** |
||||
* Stopped |
||||
*/ |
||||
public void stopped(TomcatHost tomcatServer); |
||||
/** |
||||
* Exited |
||||
*/ |
||||
public void exited(TomcatHost tomcatServer); |
||||
|
||||
} |
Loading…
Reference in new issue