天天看点

ADF BC中AM, EO, VO的初始化顺序

关键字: ADF BC,AM,EO,VO,定义,实现,初始化

开发环境:JDeveloper 11.1.1.3.0

1,  测试代码介绍

基于HR Schema,创建Employees、Departments表的EO、VO对象。

ADF BC中AM, EO, VO的初始化顺序

2,  创建DepartmentEO,DepartmentVO, EmployeeEO, EmployeeVO的定义类和对象类。

ADF BC中AM, EO, VO的初始化顺序

3,在类中添加输出信息

例如:

public AppModuleImpl() {
        System.out.println("create application module instance impliment...");
}
           

4, 运行业务组件浏览器

得到测试结果如下:

create applicaton moduledefination...

create application moduleinstance impliment...

employee VO defination...

employee eo defination ...

employee VO instance ...

department VO defination

department EO impliment

department VO impliment

ADF BC中AM, EO, VO的初始化顺序

5,  修改ViewUsage顺序,再次测试

不同VO的初始化顺序不会和AM实现类中的getXXXVO顺序一致,而是与AM的XML定义中的‘ViewUsage’的定义顺序一致。

create applicaton moduledefination...

create application moduleinstance impliment...

department VO defination

department EO impliment

department VO impliment

employee VO defination...

employee eo defination ...

employee VO impliment ...

ADF BC中AM, EO, VO的初始化顺序
ADF BC中AM, EO, VO的初始化顺序

6,  运行页面

1)保持EmployeeVO的使用早于DepartmentVO的使用的情况下,运行Departments.jspx页面。结果如下。

createapplicaton module defination impliment...

createapplication module instance impliment...

employeeVO defination...

employeeeo defination ...

employeeVO impliment ...

departmentVO defination

departmentEO impliment

departmentVO impliment

… …

2)接着运行Employees.jspx页面:

create application module instanceimpliment...

employee VO impliment ...

department VO impliment

employee EO instance ...

employee EO instance ...

employee EO instance ...

… …

3)等待页面超时,Session无效后再打开,此时AM实例没有超时:

employee VO impliment ...

department VO impliment

employee EO instance ...

employee EO instance ...

employee EO instance ...

… …

4)在AM超时后:

<StateManagerImpl><restoreView>无法为标记 etzaygn6g 找到保存的视图状态

employee VO impliment ...

department VO impliment

employee EO instance ...

employee EO instance ...

employee EO instance ...

… …

7,  总结

1)  在第一次打开ADF页面的时候,初始化AM、EO、VO的定义;顺序是AM,VO,EO。

2)  VO对象类的初始化晚于EO的定义,晚于VO的定义。

3)  EO对象类对应的是table中的一行数据,所以log中打印出多行EO对象类的初始化。并且,EO对象类的初始化晚于VO对象类的初始化。

4)  不同VO的初始化顺序定义在AppModule.xml文件中,同‘ViewUsage’的顺序。

5)  在页面Session失效后,再次打开页面,只进行了VO对象类的初始化。AM、EO、VO的定义类并没有重新初始化。

6)  默认,AM实例的time out时间是600s。AM超时后,AM、EO、VO的定义类也没有重新初始化,说明这些类的初始化只进行了一次,是在ADF应用部署完成后的首次访问。

8,测试代码下载

ADF BC 初始化顺序测试代码