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

在Eclipse下启动Tomcat

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

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

[img]http://dl.iteye.com/upload/attachment/259773/fb7a79d8-f715-30fe-81ae-68464a8cd16d.jpg[/img]

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


[img]http://dl.iteye.com/upload/attachment/259775/db32f0b2-656c-34ab-995f-1f5846935236.jpg[/img]

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

第四步:点击 Company Home


[img]http://dl.iteye.com/upload/attachment/259777/9c1822d6-19db-37e5-8be0-19478fdb27dd.jpg[/img]

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


[img]http://dl.iteye.com/upload/attachment/259779/74510133-76e5-3133-8d34-7363fcde4841.jpg[/img]


[img]http://dl.iteye.com/upload/attachment/259783/b081eb89-e064-3f50-bcf4-fc7405ee0e7e.jpg[/img]然后将代码运行至此


[img]http://dl.iteye.com/upload/attachment/259785/c37dda5d-defe-3d60-aaa9-c562b33d34a3.jpg[/img]

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


[img]http://dl.iteye.com/upload/attachment/259787/aab215aa-a1dc-3b5e-8919-b1605a3c7d8b.jpg[/img]

添加一个表达式


[img]http://dl.iteye.com/upload/attachment/259789/e0cc05ce-9893-34fe-ac95-517154105cde.jpg[/img]


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


[img]http://dl.iteye.com/upload/attachment/259791/686827f6-59b0-33d1-ae2f-1da88cf61507.jpg[/img]


到此我们的源码还原结束


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) {}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值