1:在系统启动的时候需要加载一个核心对象,所有的后台程序的启动都是由这个对象发起的。
public class StartupServlet extends HttpServlet
{
/**
* 设置默认序列值
*/
private static final long serialVersionUID = 1L;
/**
* * @throws ServletException Servlet异常
*/
@Override
public void init() throws ServletException
{
//获取WEB-APP名称
String webAppName = getServletContext().getContextPath().substring(1);
//调用启动加载的核心类
new ServBootstrap(webAppName).startup(); // 启动服务
}
}
2 : ServBootstrap 继承于Bootstrap Bootstrap
Bootstrap 定义了一些公共的加载项,比如jdbc 需要从数据库加载的配置信息等等, 抽象方法getServiceStartups 获取自定义的业务
public class ServBootstrap extends com.huawei.common.startup.Bootstrap
{
/**
* 默认构造函数
* @param webAppName webapps服务名称
*/
public ServBootstrap(String webAppName)
{
super("Media Promotion Service", webAppName, "jdbc/Promotion");
}
/**
* 业务自行实现需要加载的业务信息
* @return 需要加载的业务信息
*/
@Override
protected List<IStartup> getServiceStartups()
{
//初始化业务加载列表对象
List<IStartup> serviceStartups = new LinkedList<IStartup>();
//第一步、加载Promotion定制的广播功能
serviceStartups.add(McastStartup.getInstance());
//加载附加信息
serviceStartups.addAll(new BootstrapPlugin().getStartupPlugins());
//返回需要加载的业务加载项
return serviceStartups;
}
}
BootstrapPlugin 以类似于插件的形式,再没增加一个服务,例如 增加 彩信功能,就在BootstrapPlugin 的缓存对象plugins中增加一个新的server,例如BatchSendMMSThreadServer,这样就等于是增加了一个彩信类型的服务。
启动一组后台服务,后台服务通常有两部分构成,一部分为功能线程,该类线程主要用户主要的功能的完成,例如群发功能,则该类线程就主要完成线程群发,另一类线程为监控线程,该类线程的功能为监控 功能线程的启动,即如果线程死掉,或者发生异常,该类线程服务重新拉起,命名watchdog 。