JFox(J2EE应用服务器开源项目)

JFox2.0 Framework指南

作者:
orbat <young_yy AT hotmail.com , JFox Team>
Sep 2004


Framework是一个基于IOC的组件容器,除提供对容器的注册、反向控制等基本功能外,还提供对组件生命管理、调用拦截、基于XML的组件模块(Module)的部署,还有提供了基于Web的组件管理控制台。。 写作的参考资料来源于JFox的设计,工作,使用等文档,有任何指正与建议的,我们都很欢迎。

一、

二、组件和容器

容器被称为Registry,它提供组件的注册(register)、注销(unregister)、启动(start)、停止(stop)接口。

组件称为Component,所有的组件都必须实现 Component 接口,Component只是一个声明式的接口,没有声明任何方法。

ComponentFactory主要负责在必要的时候新建Component实例,实现了多个ComponentFactory,一般用户不需要直接使用ComponentFactory,在使用ComponentMetaFactory.getComponentMeta 的时候,系统会为你建立合适的ComponentFactory。

ComponentMeta 对一个运行时Component的描述,ComponentMeta提供了getComponentInstance方法,所以得到一个ComponentMeta之后,马上可以通过getComponentInstance得到该Component的实例。Regstry的register方法都返回一个ComponentMeta 对象。

ComponentName 是一个Component注册到容器中的名字,该名字如两部分组成,Component的类名以及一个factor因子,格式为componentClassName@factory。注册Component的时候,用户可以自己构造一个ComponentName,然后使用ComponentMetaFactory构造一个ComponentMeta,然后注册该ComponentMeta到容器中,这样容器会使用指定的ComponentName来注册该Component;其它使用Component 的类名来注册的Component,系统会随机生成一个Factor因子来构造ComponentName,这时应该获得register方法的ComponentMeta返回值,通过ComponentMeta得到ComponentName,否则没有ComponentName,将有可能无法再次在容器中多该Component进行索引。

三、依赖规则

Constructor Injection
Setter Injection
ComponentRef
ImplementationRef

自动依赖

四、扩展

Singleton
Managable
Initializable
Servicable
InstanceAfterRegister
InstantiatingInterceptable
MethodInterceptable

五、组件模块



六、类装载

JFox Framework 有多层类装载器,而且这些类装载器之间既有共享部分,也有隔离部分。
org.jfox.framework.loader.ClassLoaderRepository

这是Framework的ClassLoader仓库,它会装载lib目录以及其子目录下的jar包,以及modules/lib目录以及其子目录下的jar包,这些包中的类是各个组件模块共享的。

org.jfox.framework.loader.LocalClassLoader
这是一个组件模块的类装载器,它会尝试装载某个组件模块目录下的以下目录或者jar包。1、装载 class 目录;2、装载该目录下的 jar 包;3、装载lib目录下以及其子目录下的jar包。对于这3种类路径,处理的方式是不同的,第3种路径中的java类只在本组件模块中可以访问,属于组件模块的私有类路径,第1、2种类路径中的类对于其它模块也是可以访问的

七、部署

Framework的组件是可以自动部署的,在使用部署之前,必须先注册部署器服务到Registry中,如使用以下代码:
registry.registerComponent(ComponentDeployer.class); //注册部署器
registry.registerComponent(DeployMonitor.class,
new Parameter[]{
new ImplemetationRefParameter(ComponentDeployer.class)
}
); //注册部署监视器
registry.start(); //启动Registry,启动Registry中注册的服务

部署监视器会搜索modules目录,并注册相应的组件
注意:modules/lib 是存放组件模块公共库的目录,不视为组件模块目录。
服务器装载一个组件模块的过程如下:
首先,新生一个类装载器,该类装载器使用ClasssLoaderRepository作为parent classloader,然后装载class目录,该模块目录下的jar文件,以及lib目录下的jar文件,然后读取并解析META-INF/module.xml文件,并使用部署器部署器中定义的组件,module.xml文件的格式参考附件。

八、

九、管理