当前位置: 代码迷 >> 软件设计 >> 从Alfresco瞧老外的软件设计(四)Alfresco源码跟踪/分析
  详细解决方案

从Alfresco瞧老外的软件设计(四)Alfresco源码跟踪/分析

热度:8160   发布时间:2013-02-26 00:00:00.0
从Alfresco看老外的软件设计(四)Alfresco源码跟踪/分析
在Eclipse下启动Tomcat

只介绍一部分的源码跟踪方式。
主要以第一个页面登陆后的页面左侧 Company Home 点击后Repository 的页面相应得整个流程。

Company Home跟踪
第一步:查找 org.alfresco.web.ui.repo.component.UINavigator 类
设置断点



第二步:登陆 ( 如果断点停下来说明正常,点击 > 继续 ,该步骤留到后面说明)




第三步:稍微改动 /jsp/sidebar/navigator.jsp 内容 , 在末尾价格空格即可,然后保存。目的是让jsf刷新缓存,否则上次的断点他不会执行,因为jsf内部的tag已作了缓存。jsp内容有所变化后,缓存消失)

第四步:点击 Company Home




第五步:断电停下后看到如下的代码快





然后将代码运行至此





如果 companyHomeRootNodes = null 那说明可以按 F5 继续下一步执行 ,如果 companyHomeRootNodes 不为空我们可以通过 Expressions 透视图在运行时清空 companyHomeRootNodes 如下图:





添加一个表达式






然后继续运行即可
进入 下一步之后我们 将 companyHomeRootNodes = null 表达式删除





到此我们的源码还原结束

3.2.2	Company Home 源码分析获取 CompanyHomeRootNodes 的流程 ( 部分说明了节点服务的操作步骤 )	UserTransaction tx = null;    try    {    	FacesContext fc = FacesContext.getCurrentInstance();    	tx = Repository.getUserTransaction(fc, true); // 通过上下文获取事务    	tx.begin();  // 开始一个事务 ( 不知道为什么要在这里开启事务 )        // 获取 Company Home 的根节点        NodeRef root = new NodeRef(Repository.getStoreRef(),  // 获取 StoreRef							// 获取 CompanyRootId ( fc 的作用是 获取 当前用户所的 Company Home )							// 值通常是: a8d8e825-d024-4887-8d54-8a1664662e8f 			Application.getCompanyRootId(fc));  	// 通过根节点获取子节点        List<ChildAssociationRef> childRefs = this.getNodeService().getChildAssocs(root,                   ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL);        		// 循环子节点        for (ChildAssociationRef ref: childRefs)        {		   // 通过 Association 关系 来取得关联的 NodeRef           NodeRef child = ref.getChildRef();		   // 判断该节点是不是文件夹节点或者系统文件夹节点           if (isAddableChild(child))            {              TreeNode node = createTreeNode(child);              this.companyHomeRootNodes.add(node);              this.companyHomeNodes.put(node.getNodeRef(), node);           }        }                    tx.commit();   }   catch (Throwable err)   {       Utils.addErrorMessage("NavigatorPluginBean exception in getCompanyHomeRootNodes()", err);       try { if (tx != null) {tx.rollback();} } catch (Exception tex) {}   }