首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Tomcat源码解读-代码走读之(二十一的2-1)realm.start(二十二)

2013-07-04 
Tomcat源码解读--代码走读之(二十一的2-1)realm.start(二十二)这里介绍一下realm,当前对象是LockOutRealm,

Tomcat源码解读--代码走读之(二十一的2-1)realm.start(二十二)

这里介绍一下realm,当前对象是LockOutRealm,类继承关系是LockOutRealmextends?CombinedRealm,CombinedRealm?extends?RealmBase,RealmBase?extendsLifecycleMBeanBase?implements?Realm,LifecycleMBeanBaseextends?LifecycleBase?implements?MBeanRegistration,LifecycleBaseimplements?Lifecycle。

????LockOutRealm间接继承了LifecycleBase,所以调用父类的start方法,里面的主要步骤为。

1、init方法进行初始化,

????(1)、因为LockOutRealm的listeners为0,所以setStateInternal(LifecycleState.INITIALIZING,?null,?false)方法里面没有动作。

????(2)、调用initInternal()方法就是调用RealmBase的initInternal()方法,里面的内容为调用LifecycleMBeanBase的initInternal()进行mbean注册。

????(3)、因为LockOutRealm的listeners为0,所以setStateInternal(LifecycleState.INITIALIZED,?null,?false)方法里面没有动作。

2、setStateInternal(LifecycleState.STARTING_PREP,null,?false),LockOutRealm的listeners为0,所以此阶段没有动作。

3、startInternal(),为LockOutRealm的startInternal()方法,

????(1)、主要是定义了一个LinkedHashMap对象faileUsers,之后调用父类CombinedRealm的startInternal()方法。

????(2)、调用CombinedRealm的startInternal()方法。如下图,内容主要是进行UserDatabaseRealm的start()。UserDatabaseRealm?extends?RealmBase?。所以为LifecycleBase的start()方法如下。

Tomcat源码解读-代码走读之(二十一的2-1)realm.start(二十二)

????????1)、init方法,UserDatabaseRealm的listeners为0,所以一些方法没有动作执行,之后调用RealmBase的initInternal()方法,内容主要为调用LifecycleMBeanBase的initInternal()方法,主要是注册mbean。

????????2)、setStateInternal(LifecycleState.STARTING_PREP,?null,?false),UserDatabaseRealm的listeners为0所以没有执行动作。

????????3)、startInternal(),是调用UserDatabaseRealm的startInternal(),如下图,UserDatabaseRealm的属性赋值database?=?(UserDatabase)?context.lookup(resourceName)。之后调用父类RealmBase的startInternal()方法,UserDatabaseRealm的listeners为0,所以没有执行动作。

Tomcat源码解读-代码走读之(二十一的2-1)realm.start(二十二)

????????4)、setStateInternal(LifecycleState.STARTED,?null,?false),UserDatabaseRealm的listeners为0所以没有执行动作。

????承接(2)步骤,LockOutRealm对象调用super.startInternal()方法,所以就是调用RealmBase的startInternal()方法如下图。因为LockOutRealm的listenrs为0,所以没有执行动作。

Tomcat源码解读-代码走读之(二十一的2-1)realm.start(二十二)

4、setStateInternal(LifecycleState.STARTED,null,?false),LockOutRealm的listeners为0,所以此阶段没有动作。

热点排行