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

JFox 容器结构


(by huihoo.org JFox项目组Orbat,Allen)



EJB容器图

优点

1、继承 Jboss 的所有优点

2、对于一个特定的协议,公用一个 invoker 实例,只占用一个端口,节约系统资源

3、多种调用协议可以共存,可以动态改变调用协议

4、对 bean 生命周期管理更加容易,直接add和 remove即可,不需要牵涉系统级别的IO操作,如果 socket.close 等

5、客户端和服务端通信数据极少,大大减少网络流量,提高效率

6、Container 和 Bean Bucket分离,既可以在 container 级做统一调控,用于统一调配 container 中的每一个 bean,也可以做 bean 级别的控制,单独调控某一个Bean

7、Container 与协议无关,可以实现多种访问协议的 invoker,且可以共存

8、客户端的 InvocationHandler 的存在,可以把更多的决断放在客户端,减少网络流量,降低服务器负荷

9、以LOCAL 协议的方式实现EJBLocalHome、EJBLocalObject,开发更加简单

10、增加前端 Invoker即可获得集群、负载平衡等高级功能

JFox EJB包,接口一览

Package org.jfox.ejb

Interface Summary
Bucket a bucket 容纳一个特定的 bean,保存了这个 bean 的一切资源,bucket 放在 container 中 继承 EJBOperation 是为了强迫实现它的方法,以便在方法调用时可以直接调用
BucketMetaData 包含一个 bucket 的所有数据
ClientInvocationHandler 这个invocationHandler 工作在客户端,完成一些可以在客户端执行的操作,然后转发给 invoker 来执行
Container 容器接口,定义 ejb 容器需要实现的方法,Container 还应该包含所有 ejb bucket 共享的资源,比如:ThreadPool Container 数据存储结构 homeClassName -> bucket
ContainerInvoker is a Java RMI server object
EJBOperation 定义和 EJBObject,EJBHome 相对应的方法 EJBHome 的方法可以直接继承,但是 EJBObject 里面的方法需要重新定义
ExtendedEJBHome 对 EJBHome 进行了扩展,是用户可以选择远程调用的协议 在 Bucket.getEJBHome 中可以看到,生成 EJBHome 的 Proxy 时候,指定了这个接口 在 DelegateInvocationHandler 中可以看到具体的操作
Invocation a Invocation 代表一个远程的调用,由 ContainerInvoker 组装,传递给 Container 执行
SessionOperation SessionBucket 必须要实现的方法

Package org.jfox.ejb.deploy

Interface Summary
Deployer 各种 deployer 都应该要实现的接口
 

Package org.jfox.ejb.invoker.jrmp

Class Summary
JRMPContainerInvoker  
JRMPInvocationHandler the InvocationHander forward client method to ContainerInvoker rmi invoker
 

Package org.jfox.ejb.invoker.local

Class Summary
LOCALContainerInvoker  
LOCALInvocationHandler  
 

Package org.jfox.ejb.meta

Interface Summary
EJBMeta 一个 ejb Xyy 应该定义一个 XyyMeta 的类来描述其部署信息 在部署的时候,deployer 首先找到 XyyHome,然后会根据 XyyHome找 XyyMeta
EJBMetaInfo 所有的 EJB 都应该有的部署描述信息
SessionMetaInfo  
 

Package org.jfox.ejb.plugin

Interface Summary
ContainerPlugin 用于
Interceptable  
Interceptor 拦截器用于拦截方法的调用,可以在调用之前和之后加入一个控制,注意不应该改变 invocation 的值 可以使用 Interceptor 插件做日志分析,性能分析工具等
Invoker 执行器插件用来建立调用链,执行器用来执行具体的方法