o-b-p-m-2-5架构分析文档(不断更新!)

1:系统属性配置文件是根目录下的:webwork.properties文件,包括项目的编码信息。

2:采用了CASSSO,用的是filter(在web.xml中配置),SSO的配置信息在根目录下的sso.properties文件中配置。

3SSO认证实现类是“cn.myapps.core.sso.CasUserSSO”,但当前默认的认证方式是default,所有sso的配置就没有用了。要用SSO,必须把sso.properties中的属性“authentication.type”改为sso,并合理配置sso.properties内容

需要好好分析一下:

cn.myapps.core.sso.cas.filter.OBPMCas20ProxyReceivingTicketValidationFilter这个类

4:如果URI中带有“/portal/”或“/mobile/”,则表示是前台应用。SSO只针对带“/portal/”的链接有效

5:系统的license文件位于“WEB-INF/license.zip”,可以通过“cn.myapps.util.CLoader”这个类来详细了解java中如何解析zip文件(无第三方依赖)。从这个类中可以发现,系统的很多类都被加密了,必须解密后才能使用。

6:本系统的所有自定义多语言的占位符类似如下:

{*[page.title]*}

如果使用页面标签,则类似如下:

              <o:MultiLanguage>

                 <head>

                      <title>{*[page.title]*}</title>

                 </head>

             </o:MultiLanguage>

7:系统表:

管理员用户表是:T_SUPERUSER

  域信息表:T_DOMAIN

  软件列表:t_application

8:在每个Action中,都有一个构造函数,在这个构造函数中创建对应Actionprocess(业务处理类)

   所有的业务处理类都通过cn.myapps.protection.util.WarpProcessFactorycreateProcess方法来进行创建,WarpProcessFactory维护了一个包含所有processpoolpool中的每个process的创建规则如下:

       DomainProcess-> DomainProcessBean

   3个例外,如下:

                    1>ApplicationProcess ->ApplicationProcessBean ->WarpApplicationProcessBean

                      2>DomainProcess-> DomainProcessBean ->WarpDomainProcessBean

                    3>DataSourceProcess-> DataSourceProcessBean -> WarpDataSourceProcessBean

   在具体的process处理类中,通过DAOFactory.getDefaultDAO()来获得具体的DAO这层的处理类,一般是根据POJO对象来获得DAOServer对象,规则如下:

     根据POJO找到真实的DAOHibernate操作层),如果输入的是:

                                “cn.myapps.core.superuser.ejb.SuperUserVO”,

得到的则是:

                                “cn.myapps.core.superuser.dao.HibernateSuperUserDAO

9:系统采用hibernate作为底层,采用proxool作为数据库连接池,具体配置在如下:

         Hibernate.properties(在其中指定了proxool作为数据库连接池)

         Proxool.properties

   这两个文件中

10:表单最后一行的License信息是在WarpProcessFactory通过WarpForm来生成的,每个Form对象都被cglib重新封装成WarpForm了。

11:系统采用BSF作为脚本语言,所有的表单校验实际上都是在后台通过调用BSF引擎来进行的,所以实际上都是服务器端的校验。

 

12:表单上字段域的解析是在FormsetTemplatecontext方法中进行的,在hibernate操作中,一旦给“templatecontext”字段赋值,系统同时自动解析表单模板,所有解析动作都发生在:

        TemplateParser.parseTemplate(this,template);

以上这行,可以仔细分析里面的运行代码(通过调用htmlparser来实现)

 

13Form对象解析:

     _fields:页面上所有字段的集合,包含了所有可输入域和非可输入域。

     _textparts:文本部分

     _elements:页面上所有的元素,包含了所有的_fields_textparts,并且二者按在页面中的顺序进行排列。_elements的数量是_fields数量和_textparts数量的总和。

     _components:

     _module:表单所属的模块

     activitys:表单包含的“操作”定义

     version:版本

14:最终展示表单的页面是如下三个文件(根据不同的样式选择不同的content.jsp):

         portal/default/document/content.jsp

         portal/blue/document/content.jsp

         portal/fresh/document/content.jsp

具体页面内容(html)通过调用

          cn.myapps.core.dynaform.document.html. DocumentHtmlBean

  getFormHTML方法来获得

15:每个application下对应的doc都会被统一保存在对应应用所在数据源的“T_DOCUMENT”表中,而不管其是由哪个表单所创建的。如下语句就是从对应数据源的“T_DOCUMENT”表中找到对应的doc

"SELECT COUNT(*) FROM OBPMAPP.T_DOCUMENT doc WHERE doc.ID=?"

在保存文档时,生成的比较典型的SQL语句如下:

"INSERT INTO OBPMAPP.TLK_选项卡 (ITEM_选项B,ITEM_字段2,ITEM_TEST,ITEM_选项A,ITEM_多行文本框,ITEM_下拉,ITEM_字段1,ITEM_单选,ID,PARENT,LASTMODIFIED,FORMNAME,STATE,STATEINT,AUDITUSER,AUDITDATE,AUTHOR,AUTHOR_DEPT_INDEX,CREATED,FORMID,ISTMP,VERSIONS,SORTID,APPLICATIONID,STATELABEL,AUDITORNAMES,LASTFLOWOPERATION,LASTMODIFIER,DOMAINID,AUDITORLIST)  VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"

 同时,系统还会操作“auth_XXX”对应表单的权限记录表

 

猜你喜欢

转载自blog.csdn.net/longlongriver/article/details/7567362