繼上一個系列中: new PrestoServer().run();
@Override
public void run()
{
//讀取系統(tǒng)參數(shù)來進行判斷
//Presto requires an Oracle or OpenJDK JVM
//Presto requires Java 8u60+
//Presto requires a 64-bit JVM
//Presto requires x86-64 or amd64 on Linux
//Presto requires x86_64 on Mac OS X
//Presto requires Linux or Mac OS X
//Presto requires a little endian platform
//Presto recommends the G1 garbage collector.
//Presto recommends at least maxFileDescriptorCount=8192
//檢查切片
//verifyJvmRequirements();
//系統(tǒng)時間判斷是否可以讀的片橡,且大于2015年
verifySystemTimeIsReasonable();
//啟動日志
Logger log = Logger.get(PrestoServer.class);
ImmutableList.Builder<Module> modules = ImmutableList.builder();
//module 是binding規(guī)范的集合。binding指定類型與具體實現(xiàn)的對應(yīng)關(guān)系
modules.add(
//節(jié)點信息
new NodeModule(),
//發(fā)現(xiàn)服務(wù)模塊
new DiscoveryModule(),
//airlife http服務(wù)模塊
new HttpServerModule(),
//airlife Json模塊
new JsonModule(),
//java API for restful 模塊
new JaxrsModule(true),
//被管理的bean模塊
new MBeanModule(),
//Jmx模塊
new JmxModule(),
//基于Http管理MBean的Jmx模塊
new JmxHttpModule(),
//日志Jmx模塊
new LogJmxModule(),
//跟蹤tokenid模塊
new TraceTokenModule(),
new JsonEventModule(),
new HttpEventModule(),
//內(nèi)部服務(wù)發(fā)現(xiàn)模塊
new EmbeddedDiscoveryModule(),
//服務(wù)安全模塊
new ServerSecurityModule(),
//權(quán)限控制模塊
new AccessControlModule(),
//事件監(jiān)聽模塊(查詢結(jié)束痛悯、創(chuàng)建結(jié)束偷仿、splite結(jié)束)
new EventListenerModule(),
//主要服務(wù)模塊
new ServerMainModule(sqlParserOptions),
//優(yōu)雅的關(guān)閉服務(wù)模塊
new GracefulShutdownModule());
modules.addAll(getAdditionalModules());
Bootstrap app = new Bootstrap(modules.build());
try {
//此處會調(diào)用guice框架的ElementsIterator構(gòu)造函數(shù),初始化上面module的configure方法
//其中configure會調(diào)用setup方法航邢。這樣綁定注入就算初始化成功
//讀取配置文件,并打印配置信息
//包括建立發(fā)現(xiàn)服務(wù)器骄蝇、連接發(fā)送服務(wù)器的操作
//重要
Injector injector = app.strictConfig().initialize();
//加載plugin目錄下的插件
injector.getInstance(PluginManager.class).loadPlugins();
//加載catalog目錄下的properties文件
injector.getInstance(StaticCatalogStore.class).loadCatalogs();
// TODO: remove this huge hack
updateConnectorIds(
injector.getInstance(Announcer.class),
injector.getInstance(CatalogManager.class),
injector.getInstance(ServerConfig.class),
injector.getInstance(NodeSchedulerConfig.class));
injector.getInstance(ResourceGroupManager.class).loadConfigurationManager();
injector.getInstance(AccessControlManager.class).loadSystemAccessControl();
injector.getInstance(EventListenerManager.class).loadConfiguredEventListener();
injector.getInstance(Announcer.class).start();
log.info("======== SERVER STARTED ========");
}
catch (Throwable e) {
log.error(e);
System.exit(1);
}
上面的服務(wù)模塊很多膳殷,我們將一個一個來看,到底是干什么的九火?
不妨我們帶著第一個問題來看代碼:restful api web服務(wù)是怎么起來的赚窃?