jbossMC kernel
一、事件机制
Subject: org.jboss.kernel.spi.event.KernelEventEmitter
org.jboss.kernel.spi.event.KernelEventListener
org.jboss.kernel.spi.event.KernelEventFilter
org.jboss.kernel.spi.event.KernelEventManager
通过上面各类实现事件的产生、监听、过滤和协调管理
命名机制
为了将POJO变成用户可用的Service,需要一种命名机制,用户以名称方式获得POJO。
二、kernel系统组成
所有组成对象都是KernelObject,每个KernelObject都继承KernelEventEmitter;
具体包括:
1)KernelBus - 通向registry的线路,使得可以调用registry中命名了的组件
2)KernelConfig - 提供kernel配置选项,获得class info,创建KernalBus、KernelConfigurator、KernelController、KernelEventManager、KernelInitializer
、KernelRegistry、KernelMetaDataRepository以及DependencyBuilder
3)KernelConfigurator - 辅助controller创建和配置bean的工具类
4)KernelController - 核心组件,保证beans的配置和生命周期以正确的顺序被处理,包括依赖关系与类加载等内容
5)KernelEventManager - 事件协调者
6)KernelMetaDataRepository - beans的元数据仓库
7)Registry - 负责track命名beans,保证通过bus调用beans,根据依赖关系进行使用
Kernel- kernel服务的入口点,考虑了access 权限与config权限,对访问与配置进行安全检查。同时kernel中包含上面7个KernelObject
三、kernel 自举(bootstrap)
1)通过单例的KernelFactory获得Kernel实例
1.1)获得config(从property,或者Systemproperty)
1.2)new一个既没有config,亦没有initialized的Kernel
1.3)setConfig
1.4)setInitlizer
1.5)返回Kernel
MC的环境涉及- aop, metadata元数据, class loading类加载, deployments部署, state management状态管理, lifecycle/dependcies生命周期/依赖关系管理, configuration配置, and management组件管理
四、反射模型reflection model
在java.lang.reflect之上的抽象
4.1 cache 不适用cache,反射可能成为性能瓶颈
4.2 abstraction
4.3 hide implementation 使用aop操作bytecode,隐藏不感兴趣的实现
五、jboss测试
六、部署
BasicXMLDeployer - 解析xml文件(jboss-beans.xml),配置注册beans;解析获得的信息保存在KernelDeployment之中,具体每个bean信息存在于BeanMetaData之中。
.xml--parse-->BeanMetaData; 多个BeanMetaData构成kernelDeployment;
由KernelController对每一个BeanMetaData处理,根据BeanMetaData等信息构造KernelControllerContezt,并存放在deployment的map中,最后controller.install(context)
1)VFS
2)识别部署结构
这一步找到dd,bytecode,侦测“嵌套部署”。使用VFS表示部署,需要首先创建VFSDeployment。
VirtualFile root = VFS.getRoot(deploymentURL);
VFSDeploymentFactory deploymentFactory = VFSDeploymentFactory.getInstance();
Deployment deployment = deploymentFactory.createVFSDeployment(root);
部署框架使用StructureDeployer部署器,决定部署结构。
部署结构包括xml文件结构、JAR结构(jar,sar,war,ear,rar);嵌套部署
3)创建部署上下文(Deployment Context)
确定deployment结构后,下一步是创建部署上下文,每一个deployment,不论是top-level还是嵌套的,都要对应一个部署上下文。
记录:
。the location of any deployment descriptors - the metadata path
。the location of any classes - the classpath
。the relative path to the top-level deployment - the relative path
。the deployment name
。the order it should be deployed in relative to other deployments - the relative order
。a list of deployment types that it represents (including nested deployments) - the types
。the state of the deployment - whether it is deployed or not
。the deployment class loader
。the deployment resource loader
。dependencies on other deployments or runtime components
。references to any components that it deploys - POJOs, MBeans etc...
。references to any nested (child) deployments or the parent deployment
3.1运行时部署组件(POJO、OSGi,JMX)
3.2部署依赖