Jboss
1 JBOSS架构简介
1.1 内核Microkernel
动态载入服务
管理服务的生命周期
对外提供naming和lookup
调用总线(invocation bus)
服务之间的解耦
1.2 基于JMX的架构
核心是Mbean Server,可以把各种的服务做成Mbean接到MbeanServer上。
l 类似于设计模式中的mediator。
l Mbean Server提供naming、register和lookup。
l 各个MBean不会直接访问,通过name访问。
l 各个Mbean通过metadata曝露其接口能力。
l DETYPED
l 类似java的反射。
优点:?(讨论)
缺点:?(讨论)
外部如何访问JBOSS?通过Invoker。(Mbean too.)
Standard Mbean
Dynamic Mbean
Model MBean
2 JBOSS deployment和boot
主要是两个JMX Service:DeploymentScanner(?)和MainDeployer
DeploymentScanner扫描发布目录,如果有新/变化的东西,就提交给MainDeployer处理。
MainDeployer负责调度,按照顺序询问各个subDeployer,直到有一个subDeployer可以处理。
subDeployer包括:SARDeployer,EARDeployer,EJBDeployer等等。。。用户也可以直接写。
启动顺序:
创建MbeanServer JbossMX。包含5个core service:
其它的Service采用sar的格式放到发布目录,被DeploymentScanner发现,被SARDeployer发布,被ServiceController实例化。
3 JBOSS的类装载
jvm的类装载机制。Parent delegate。
CLASSCASTEXCEPTION:jvm在什么情况下才认为两个class是一样的?
ILLEGALACCESSEXCEPTION:两个不同classloader的类实例,能够互相访问对方的方法?
LinkageError:
JBOSS的类装载机制:
实现类的共享。为什么需要共享?
实现类的独立。为什么需要独立?
如何实现?
UCL,UnifiledLoaderRepository,HierarchicalLoaderRepository
UCL:集成java的URLClassLoader,一个deployment对应一个ucl
UnifiledLoaderRepository:class默认存储区域。
HierarchicalLoaderRepository:有层次关系(树状)的class存储区域。
share
Isolate namespace
Java2ParentDelegation?
1 Clinet Side和Server Side
Remote(例如WebService/EJB):stub和skeleton
Client side:
Client自动下载stub和其它需要的东西(缓存/序列化)。
容易发布和部署。
无需编译(只需要接口类)。
Dynamic Proxy动态代理:
Client的一个请求先到动态代理。
一个请求被动态代理转成一个Invacation(InvacationContext)
Invacation被各个Client Interceptor进行处理。
JBOSS所有的特性(例如:TX/Security/EJB/群集等等)都是通过Interceptor实现的。
最后被传给服务端,调用JMX服务。
DETYPED/INDEPENDENT
通过JAVA反射()实现
客户端和服务端:通过Invoker(也是一个JMX Service)。
Server side:
Invoker把invocation转给microkernel。
Microkernel把invocation分别让一个个Server Interceptor处理。
Chain of Responsibility责任链。
DETYPED/INDEPENDENT
可以自己写Interceptor(Client/Server)。
Command模式?
EJB3。
2 JBoss Cache
1、 Cache采用树状结构的存储方式。
每个节点有:path/value
2、 非集中方式的。
3、 支持分布式、事务、锁。
支持分布式,基于jgroup。
支持tx
lck,实际上是本地的lock,在复制请求时进行检查。
4、 支持持久化。
5、 不仅仅只能在Jboss上使用,还可以嵌入到其它的App Server(例如Weblogic/WAS)
6、 Jboss群集中的session复制,就是用Jboss Cache实现的。
7、 两种实现:TreeCache和TreeCacheAOP
8、 TreeCache(plain cache)
保存的是Reference,复制采用值方式:不支持共享地址。
9、 TreeCacheAOP(POJO cache)
需要JBossAOP runtime的支持(支持compile-time和load-time)。
可以实现Fine-g rain ed(细粒度)的更新(基于filed)
支持共享地址。
如何知道一个POJO的结构?(通过配置,或者使用annotation标注)
其它的cache产品:memcache
3 Cluster
问题:为什么要使用群集?(讨论)
Load Balancing à scalability
Fault Tolerance -> HA
1+1=2 ???
state replication
cache
SNA
两种方式配置:
central à NeetBoot
separately à install & configure each node
deployment:
各个节点单独部署
farm service,放到一个节点的farm目录(在本机启动之后),自动更新到群集中的其它节点。
结构:
群集不是事先定义好的。
通过名称(Partition Name)来识别。
一个群集节点启动时,通过Partition Name来检查(范围?)已经存在的群集,并加入。
其它节点被notified。
%JBOSS_HOME%/bin/ -=Chris
客户端如何配合实现群集?
java客户端:Client proxy
HTTP客户端:网络硬件(四层交换,F4)/软件(AJP)
服务端如何配置实现群集?replicate复制
Session复制的粒度:SESSION/ATTRIBUTE/FIELD,根据实际情况分析。(JBOSSCache)
一般使用ATTRIBUTE。