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()方法如下。
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,所以没有执行动作。
4)、setStateInternal(LifecycleState.STARTED, null, false),UserDatabaseRealm的listeners为0所以没有执行动作。
承接(2)步骤,LockOutRealm对象调用super.startInternal()方法,所以就是调用RealmBase的startInternal()方法如下图。因为LockOutRealm的listenrs为0,所以没有执行动作。
4、setStateInternal(LifecycleState.STARTED,null, false),LockOutRealm的listeners为0,所以此阶段没有动作。
页:
[1]