图1
图2
图1是carbon之前的架构,carbon只是作为一个web app存在与tomcat容器中,这样,只有访问特定context,才能使用carbon的osgi的功能。在4.0以后,tomcat作为carbon这个osgi框架中的一个bundle存在于其中,所有请求都会进入osgi后在做处理
1. Carbon启动过程:
在osgi环境中,我们不能保证bundle的启动顺序。但是在carbon,我们需要让部分bundle按照顺序启动。主要原因是,carbon是依赖与apache axis2,所以axis2需要在axis2module和axis2services前启动,而http transport也只能在axis2初始化完成后才能启动。
如图所示:
1. 使用wso2server.bat脚本启动,bootstrap module装载,调用服务器的主类org.wso2.carbon.server.Main。
2. 将执行实际的服务器启动。 在调用OSGi框架启动之前,它将首先调用服务器扩展任务。Server module将执行实际的服务器启动,在调用OSGi框架启动之前,它将先调用服务器扩展任务。
3. 服务器扩展任务主要是:
I:DefaultBundleCreation:这将从$ {carbon.home} / repository / components / lib目录中的常规jar文件创建OSGi bundle。
II:SystemBundleExtensionCreation:这将读取扩展文件夹$ {carbon.home} / extensions并创建系统扩展包。
III:Log4jPropertyFileFragmentBundleCreation:这将为log4j.properties文件创建一个fragment bundle ,并将其放在$ {carbon.home} / repository / components / dropins目录中,以供OSGi环境使用。
IV:DropinsBundlesDeployment:通过将它们添加到bundles.info文件中,将dropins目录中的bundle加入OSGi环境中。
V:PatchInstallation:通过复制到${carbon.home}/repository/components/plugins中,安装补丁jar包。
上述过程完成后,server module将启动OSGI框架,这将加载OSGI system bundle,然后装载osgi simple configurator bundle。这个bundle会通过bundle.info文件,按照顺序将bundle加入装载列表,开始装载bundle。在这个过程中,许多bundle激活器将会被调用,user core bundle和registry core bundle这些重要的关键bundle将初始化服务器的用户管理模块和注册表模块。初始化后,相应的osgi服务开始发布,感兴趣的可以利用这些bundle。
只有在上述步骤完成之后,carbon kernel才能初始化。首先初始化axis2,然后部署artifact,这将部署axis2module和axis2services。部署成功后,axis2也就完成了初始化,然后可以部署服务器中的webapp了。log4j与log4j2
在artifact部署之后,carbon kernel才开始初始化并启动transport,系统开始接受请求。
transport启动后,系统最后一部分UI框架启动。
Tomcat启动过程
嵌入式Tomcat启动过程在上一部分并没有提到,但是这一点却是很重要的。
当carbon osgi框架初始化的时候,在众多bundle都激活的过程中,启动tomcat(org.at)的bundle也将被调用。首先调用启动该bundle的osgi类org.at.internal.TomcatBundleActivator,这个类将首先创建ServerManger实例。ServerManger负责管理carbon中的tomcat初始化、启动和停止的类。
在ServerManger初始化期间,它将首先读取并解析tomcat服务器配置文件$ {carbon.home} /
repository/conf/l,这将用于配置嵌入式tomcat实例,然后启动tomcat实例。这里要指出的是,tomcat启动后,只能启用添加新的webapps等功能,但是不会启动tomcat servlet传输功能,这是为了延迟http传输端口的启动。因为服务器需要进入稳定的阶段,如axis2初始化为就绪等等,才能开始提供请求。 运输的开始发生在服务器启动完成阶段,这确保所有必需的服务都启动,服务器处于稳定阶段能够接受请求。
请求的调度方式
对carbon及其相关服务的请求使用root context webapp注册的委托servlet进行处理。 Root context webapp是tomcat启动时要部署的第一个webapp。 该webapp的存储库位于“$ {carbon.home} / repository / conf / tomcat / carbon”中。 Tomcat可以像部署在其中的任何其他servlet或webapps一样看到这个servlet。 这个servlet被注册以使用context pattern “/ *”和* .jsp“来监听请求。 servlet注册详细信息在root webapp的l中定义。
在运行时,请求被传递给OSGI HttpService,然后将它们路由到正确的context。 所有必需的context都应该注册在OSGi HttpService中,以使其正常工作。 下图显示了请求调度的运行时表示。
以下是在服务器启动期间注册HTTPService的主要context。 每个context都被明确定义以用
于特定目的。
A /carbon
Carbon UI框架(org.wso2.carbon.ui)的请求,其中还包括管理控制台请求。 在所有模式(* .jsp)的上下文中,由CarbonUIServiceComponent在其激活过程中注册所需的servlet。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论