searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

ALOGIC服务加载策略

2023-09-19 09:16:13
20
0

alogic是一个高效的,可扩展的,轻量级服务框架。在这个框架中,一个JAVA开发者可以快速的开发出实现自己业务的服务,本文介绍服务在框架中是如何加载的。

一 从web.xml开始加载

一个基于alogic的web工程是基于servlet规范的,工程的项目结构如下:
当启动该web项目时,根据web.xml的配置创建servlet上下文后,按照context-param-->listener->servlet顺序加载,即:
1. 加载WebAppMain作为servlet的监听器
2. 读取一系列的上下文参数
3. 加载ServletAgent这个servlet并启动项目
 
二  WebAppMain上下文监听器
 
WebAppMain是整个alogic的上下文监听器,该类位于com.anysoft.webloader.WebAppMain,而WebAppContextListener是他的父类,其结构如下: 

父类WebAppContextListener重写了contextInitialized和contextDestroyed方法。 在contextInitialized方法中,做了如下事情

  1. 初始化了一个DefaultProperties并将servlet上下文的一些信息写入
  2. 加载servlet的运行参数并写到DefaultProperties
  3. 更新web库文件
  4. 获取classloader来加载类(默认是LogicBusApp)并创建实例
  5. 执行初始化、装入其他context并启动应用

三 LogicBus的初始化

LogicBusApp是WebApp的实现类,可以说是整个alogic应用的基础。在进行初始化的时候,主要是对配置文件进行加载和注册。加载指的是创建一些对象或获取实例,注册指的是在Settings类中进行输入。 Settings类其实并不陌生,它是一个配置变量的K-V集合,主要用来维护当前alogic web项目的全局变量集合和对象列表,其关系图如下:

可以看到,Settings是DefaultProperties的子类,DefaultProperties维护缺省的变量集,而Settings维护了当前项目的变量集,这种设计很符合里氏替换法则。由于Settings是针对在当前唯一的web项目,因此采用单例模式进行设计,来保证全局仅有唯一的实例。

在LogicBusApp中,初始化调用init方法,其实现逻辑如下:

  1. 获取一个Settings的单例,并将前文中的DefaultSettings内的参数注册进来。
  2. 在Settings中注册当前的classLoader
  3. 装入ketty.web.xml(默认为${ketty.home}/conf/ketty.web.xml)并将该xml解析,解析后的参数注册到settings中。
  4. 装入ResourceFactory(默认为com.anysoft.util.resource.ResourceFactory)并创建resourceFactory对象,同时在Setting中注册了resourceFactory。
  5. 装入其它配置xml文件并注册到Settings中
  6. 执行onInit方法

到此为止,在Settings中已经注册了各种配置信息,接下来要在onInit方法中执行初始化,onInitBizLogger负责初始化项目的AccessControlle(权限控制),BizLogger(业务日志),MetricsHandlerFactory(指标处理器)和ServantFactory(服务工厂),其中最重要的就是ServantFactory,通过如下方式初始化ServantFactory:

在第一行ServantFactory sf = ServantFactory.TheFactory.get(settings)中,该方法初始化步骤如下:

  1. 寻找默认的加载配置文件(默认为com/logicbus/backend/servantfactory.default.xml)
  2. 解析加载并创建一个ServantFactory的实例

四 ServantFactory的初始化

在整个web项目初始化过程中,ServantFactory的初始化是一个关键的步骤。Alogic是针对服务开发的一套框架,在这个框架中,服务具体体现在Servant类,而ServantFactory则是Servant的一个工厂接口。

在上一节中LogicBusApp的onInit方法中,最后通过如下方式初始化ServantFactory:

在第一行ServantFactory sf = ServantFactory.TheFactory.get(settings)中,该方法初始化步骤如下:

  1. 寻找默认的加载配置文件(默认为com/logicbus/backend/servantfactory.default.xml)
  2. 解析加载并创建一个ServantFactory的实例

ServantFactory的实现类是QueuedServantFactory,

在alogic 1.6版本中,采用WebAppContextListener作为上下文监听器,后版本拓展了该类。父类WebAppContextListener重写了contextInitialized和contextDestroyed方法。 在contextInitialized方法中,做了如下事情

  1. 初始化了一个DefaultProperties并将servlet上下文的一些信息写入
  2. 加载servlet的运行参数并写到DefaultProperties
  3. 更新web库文件
  4. 获取classloader来加载类(默认是LogicBusApp)并创建实例
  5. 执行初始化、装入其他context并启动应用

至此,应用就被成功加载了。

0条评论
作者已关闭评论
Coding
19文章数
1粉丝数
Coding
19 文章 | 1 粉丝
原创

ALOGIC服务加载策略

2023-09-19 09:16:13
20
0

alogic是一个高效的,可扩展的,轻量级服务框架。在这个框架中,一个JAVA开发者可以快速的开发出实现自己业务的服务,本文介绍服务在框架中是如何加载的。

一 从web.xml开始加载

一个基于alogic的web工程是基于servlet规范的,工程的项目结构如下:
当启动该web项目时,根据web.xml的配置创建servlet上下文后,按照context-param-->listener->servlet顺序加载,即:
1. 加载WebAppMain作为servlet的监听器
2. 读取一系列的上下文参数
3. 加载ServletAgent这个servlet并启动项目
 
二  WebAppMain上下文监听器
 
WebAppMain是整个alogic的上下文监听器,该类位于com.anysoft.webloader.WebAppMain,而WebAppContextListener是他的父类,其结构如下: 

父类WebAppContextListener重写了contextInitialized和contextDestroyed方法。 在contextInitialized方法中,做了如下事情

  1. 初始化了一个DefaultProperties并将servlet上下文的一些信息写入
  2. 加载servlet的运行参数并写到DefaultProperties
  3. 更新web库文件
  4. 获取classloader来加载类(默认是LogicBusApp)并创建实例
  5. 执行初始化、装入其他context并启动应用

三 LogicBus的初始化

LogicBusApp是WebApp的实现类,可以说是整个alogic应用的基础。在进行初始化的时候,主要是对配置文件进行加载和注册。加载指的是创建一些对象或获取实例,注册指的是在Settings类中进行输入。 Settings类其实并不陌生,它是一个配置变量的K-V集合,主要用来维护当前alogic web项目的全局变量集合和对象列表,其关系图如下:

可以看到,Settings是DefaultProperties的子类,DefaultProperties维护缺省的变量集,而Settings维护了当前项目的变量集,这种设计很符合里氏替换法则。由于Settings是针对在当前唯一的web项目,因此采用单例模式进行设计,来保证全局仅有唯一的实例。

在LogicBusApp中,初始化调用init方法,其实现逻辑如下:

  1. 获取一个Settings的单例,并将前文中的DefaultSettings内的参数注册进来。
  2. 在Settings中注册当前的classLoader
  3. 装入ketty.web.xml(默认为${ketty.home}/conf/ketty.web.xml)并将该xml解析,解析后的参数注册到settings中。
  4. 装入ResourceFactory(默认为com.anysoft.util.resource.ResourceFactory)并创建resourceFactory对象,同时在Setting中注册了resourceFactory。
  5. 装入其它配置xml文件并注册到Settings中
  6. 执行onInit方法

到此为止,在Settings中已经注册了各种配置信息,接下来要在onInit方法中执行初始化,onInitBizLogger负责初始化项目的AccessControlle(权限控制),BizLogger(业务日志),MetricsHandlerFactory(指标处理器)和ServantFactory(服务工厂),其中最重要的就是ServantFactory,通过如下方式初始化ServantFactory:

在第一行ServantFactory sf = ServantFactory.TheFactory.get(settings)中,该方法初始化步骤如下:

  1. 寻找默认的加载配置文件(默认为com/logicbus/backend/servantfactory.default.xml)
  2. 解析加载并创建一个ServantFactory的实例

四 ServantFactory的初始化

在整个web项目初始化过程中,ServantFactory的初始化是一个关键的步骤。Alogic是针对服务开发的一套框架,在这个框架中,服务具体体现在Servant类,而ServantFactory则是Servant的一个工厂接口。

在上一节中LogicBusApp的onInit方法中,最后通过如下方式初始化ServantFactory:

在第一行ServantFactory sf = ServantFactory.TheFactory.get(settings)中,该方法初始化步骤如下:

  1. 寻找默认的加载配置文件(默认为com/logicbus/backend/servantfactory.default.xml)
  2. 解析加载并创建一个ServantFactory的实例

ServantFactory的实现类是QueuedServantFactory,

在alogic 1.6版本中,采用WebAppContextListener作为上下文监听器,后版本拓展了该类。父类WebAppContextListener重写了contextInitialized和contextDestroyed方法。 在contextInitialized方法中,做了如下事情

  1. 初始化了一个DefaultProperties并将servlet上下文的一些信息写入
  2. 加载servlet的运行参数并写到DefaultProperties
  3. 更新web库文件
  4. 获取classloader来加载类(默认是LogicBusApp)并创建实例
  5. 执行初始化、装入其他context并启动应用

至此,应用就被成功加载了。

文章来自个人专栏
开发感悟
19 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0