JBOSS架构了解

时间:2025-03-24 07:05:05

Jboss

1 JBOSS架构简介

1.1 内核Microkernel

动态载入服务

管理服务的生命周期

对外提供naminglookup

调用总线(invocation bus

服务之间的解耦

1.2 基于JMX的架构

核心是Mbean Server,可以把各种的服务做成Mbean接到MbeanServer上。

l         类似于设计模式中的mediator

l         Mbean Server提供namingregisterlookup

l         各个MBean不会直接访问,通过name访问。

l         各个Mbean通过metadata曝露其接口能力。

l         DETYPED

l         类似java的反射。

 

优点:?(讨论)

 

缺点:?(讨论)

 

外部如何访问JBOSS?通过Invoker。(Mbean too.

 

Standard Mbean

Dynamic Mbean

Model MBean

 

2 JBOSS deploymentboot

主要是两个JMX ServiceDeploymentScanner?)和MainDeployer

DeploymentScanner扫描发布目录,如果有新/变化的东西,就提交给MainDeployer处理。

MainDeployer负责调度,按照顺序询问各个subDeployer,直到有一个subDeployer可以处理。

subDeployer包括:SARDeployerEARDeployerEJBDeployer等等。。。用户也可以直接写。

 

启动顺序:

创建MbeanServer JbossMX。包含5core service

其它的Service采用sar的格式放到发布目录,被DeploymentScanner发现,被SARDeployer发布,被ServiceController实例化。

3 JBOSS的类装载

jvm的类装载机制。Parent delegate

CLASSCASTEXCEPTIONjvm在什么情况下才认为两个class是一样的?

ILLEGALACCESSEXCEPTION:两个不同classloader的类实例,能够互相访问对方的方法?

LinkageError

 

JBOSS的类装载机制:

实现类的共享。为什么需要共享?

实现类的独立。为什么需要独立?

 

如何实现?

UCLUnifiledLoaderRepositoryHierarchicalLoaderRepository

 

UCL:集成javaURLClassLoader,一个deployment对应一个ucl

UnifiledLoaderRepositoryclass默认存储区域。

HierarchicalLoaderRepository:有层次关系(树状)的class存储区域。

 

 

share

 

Isolate namespace

 

 

 

Java2ParentDelegation

1 Clinet SideServer Side

Remote(例如WebService/EJB):stubskeleton

 

Client side

Client自动下载stub和其它需要的东西(缓存/序列化)。

容易发布和部署。

无需编译(只需要接口类)。

 

 

Dynamic Proxy动态代理:

Client的一个请求先到动态代理。

一个请求被动态代理转成一个InvacationInvacationContext

Invacation被各个Client Interceptor进行处理。

JBOSS所有的特性(例如:TX/Security/EJB/群集等等)都是通过Interceptor实现的。

最后被传给服务端,调用JMX服务。

DETYPED/INDEPENDENT

通过JAVA反射()实现

 

客户端和服务端:通过Invoker(也是一个JMX Service)。

 

Server side

Invokerinvocation转给microkernel

Microkernelinvocation分别让一个个Server Interceptor处理。

Chain of Responsibility责任链。

DETYPED/INDEPENDENT

 

可以自己写InterceptorClient/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、  两种实现:TreeCacheTreeCacheAOP

8、  TreeCacheplain cache

保存的是Reference,复制采用值方式:不支持共享地址。

9、  TreeCacheAOPPOJO cache

需要JBossAOP runtime的支持(支持compile-timeload-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