AlfrescoとSolr(後編)

1,328 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,328
On SlideShare
0
From Embeds
0
Number of Embeds
43
Actions
Shares
0
Downloads
21
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

AlfrescoとSolr(後編)

  1. 1. AlfrescoとSolr(後編)- Alfresco勉強会 第12回 - 2012/12/12 @mryoshio Copyright 2012 tachibanakikaku.com. All rights reserved.
  2. 2. 目次‣ 自己紹介‣ 前回のおさらい‣ ソースコード解説‣ おわりに
  3. 3. 自己紹介‣ mryoshio → A社の社員 → AlfrescoやLiferayのコンサルタント → ソースコードを読んだりカスタマイズしたりサポートしたり → Twitterとか色々なところにいます → もう少しPythonで遊びたいと思いつつできてない → 最近はこたつに入って仕事してます
  4. 4. 前回のおさらい
  5. 5. AlfrescoとSolr‣ Alfrescoとは → 英Alfresco社が提供するオープンソースソフトウェア。企業規模のコンテンツ 管理を行える。それ以外に,Webコンテンツ管理やコラボレーションを低コ ストで行える‣ Solrとは → Apache Luceneプロジェクトから派生した人気のある検索プラットフォー ム。ヒット部分のハイライト,ファセットサーチなど豊富な機能がある。ス ケーラブルで分散した検索やインデクスレプリケーションも可能
  6. 6. パターン1:AlfrescoとSolrが別居
  7. 7. パターン2:AlfrescoとSolrが同居
  8. 8. ソースコード解説
  9. 9. Alfresco Solr Plugin側‣ (省略)
  10. 10. Alfresco側‣ SolrSearchService → 前回やった‣ SolrQueryHTTPClient → 前回やった‣ Alfresco Solr Pluginでのインデクシングに 必要な情報を渡すWeb Script → ここから
  11. 11. Web Script‣ Alfresco Solr PluginへAlfrescoの情報を渡す → webapps/alfresco/WEB-INF/classes/alfresco/templates/ webscripts/org/alfresco/repository/solr/に設定ファイル群が存在 aclChangeSets,acls,aclsReaders model,modelsdiff nodeContent,nodes,nodesMetaData transactions
  12. 12. Javaクラスの指定‣ 各Web Scriptで利用するJavaクラスの指定 → webapps/alfresco/WEB-INF/classes/alfresco/web-scripts- application-context.xmlL.1431辺り <!-- --> <!-- SOLR --> <!-- --> <!-- --> <bean id="solrSerializer" class="org.alfresco.repo.web.scripts.solr.SOLRSerializer" init-method="init"> <property name="dictionaryService" ref="dictionaryService"/> <property name="namespaceService" ref="namespaceService"/> </bean> <bean id="webscript.org.alfresco.repository.solr.aclChangeSets.get" class="org.alfresco.repo.web.scripts.solr.AclChangeSetsGet" parent="webscript"> <property name="solrTrackingComponent" ref="solrTrackingComponent"/> </bean>(後略)
  13. 13. aclChangeSets‣ 利用ファイル群 → aclChangeSets.get.desc.xml(Web Script description) → aclChangeSets.get.json.ftl(FreeMarker Template) → org.alfresco.repo.web.scripts.solr.AclChangeSetsGet(Java)‣ 目的 → 特定時間以後のACL変更(List<AclChangeSet>)を取得する‣ 引数 → fromId,fromTime,maxResults(desc.xml) → toId,toTime(隠しパラメータ)
  14. 14. aclChangeSets(Call Tree)‣ L.63 AclChangeSetsGet#executeImpl → L.157 SOLRTrackingComponentImpl#getAclChangeSets → L.88 SOLRDAOImpl#getAclChangeSets この後,iBatis経由でDBから値を取得‣ solr-common-SqlMap.xml → select_ChangeSets_Summary 返り値がAclChangeSetに格納される
  15. 15. acls‣ 利用ファイル群 → acls.post.desc.xml(Web Script description) → acls.post.json.ftl(FreeMarker Template) → org.alfresco.repo.web.scripts.solr.AclsGet(Java)‣ 目的 → 与えられたACL変更に対応するACLを取得する‣ 引数 → fromId,maxResults(desc.xml)
  16. 16. acls(Call Tree)‣ L.60 AclsGet#executeImpl → L.113 #buildModel → L.171 SOLRTrackingComponentImpl#getAcls → L.115 SOLRDAOImpl#getAcls この後、iBatis経由でDBから値を取得‣ solr-common-SqlMap.xml → select_AclsByChangeSetIds 返り値がAclに格納される
  17. 17. aclsReaders‣ 利用ファイル群 → aclsReaders.post.desc.xml(Web Script description) → aclsReaders.post.json.ftl(FreeMarker Template) → org.alfresco.repo.web.scripts.solr.AclsReadersGet(Java)‣ 目的 → 与えられたACLのreaderを取得する‣ 引数
  18. 18. aclsReaders(Call Tree)‣ L.60 AclsReadersGet#executeImpl → L.107 #buildModel → L.199 SOLRTrackingComponentImpl#getAclsReaders → L.1066 AclDAOImpl#getAccessControlList → #getAccessControlListImpl return AccessControlList
  19. 19. model‣ 利用ファイル群 → model.get.desc.xml(Web Script description) → org.alfresco.repo.web.scripts.solr.AlfrescoModelGet(Java)‣ 目的 → 与えられた名称のモデルを取得する‣ 引数 → modelQName(隠しパラメータ)
  20. 20. model(Call Tree)‣ L.46 AlfrescoModelGet#execute → L.70 #handle → L.746 SOLRTrackingComponentImpl#getModel → L.75 DictionaryComponent#getModel → L.871 DictionaryDAOImpl#getModel → #getCompiledModel return CompiledModel
  21. 21. modelsdiff‣ 利用ファイル群 → modelsdiff.post.desc.xml(Web Script description) → modelsdiff.post.json.ftl(FreeMarker Template) → org.alfresco.repo.web.scripts.solr.AlfrescoModelsDiff(Java)‣ 目的 → 与えられたモデルの差分を取得する‣ 引数 → models(JSONArray,隠しパラメータ)
  22. 22. modelsdiff(Call Tree)‣ L.42 AlfrescoModelsDiff#executeImpl → L.77 #buildModel → L.768 SOLRTrackingComponentImpl#getModelDiffs → L.67 DictionaryComponent#getAllModels → L.791 DictionaryDAOImpl#getModels → #getCompiledModels
  23. 23. nodeContent‣ 利用ファイル群 → nodeContent.get.desc.xml(Web Script description) → org.alfresco.repo.web.scripts.solr.NodeContentGet(Java)‣ 目的 → 与えられたノード属性の値をテキストで取得する‣ 引数 → nodeId,propertyQName(desc.xml)
  24. 24. nodeContent(Call Tree)‣ L.202 NodeContentGet#execute → StreamContent#streamContentImpl ストリームとしてレスポンスをクライアントへ返す
  25. 25. nodes‣ 利用ファイル群 → nodes.post.desc.xml(Web Script description) → nodes.post.json.ftl(FreeMarker Template) → org.alfresco.repo.web.scripts.solr.NodesGet(Java)‣ 目的 → トランザクション内で更新/削除されたノードを取得する‣ 引数 → txnIds,fromTxnId,toTxnId,fromNodeId,toNodeId → excludeAspects,includeAspectsなど(全て隠しパラメータ)
  26. 26. nodes(Call Tree)‣ L.183 NodesGet#executeImpl → L.296 SOLRTrackingComponentImpl#getNodes → L.149/L.155 SOLRDAOImpl#getNodes この後、iBatis経由でDBから値を取得‣ solr-common-SqlMap.xml → select_Txn_Nodes 返り値がNodeに格納される
  27. 27. nodesMetaData‣ 利用ファイル群 → nodesMetaData.post.desc.xml(Web Script description) → nodesMetaData.post.json.ftl(FreeMarker Template) → org.alfresco.repo.web.scripts.solr.NodesMetaDataGet(Java)‣ 目的 → 与えられたノードのメタデータを取得する‣ 引数 → nodeIds,fromNodeId,toNodeId,maxResults → includeAclId,includeAspectsなど(全て隠しパラメータ)
  28. 28. nodesMetaData(Call Tree)‣ L.181 NodesMetaDataGet#executeImpl → L.735 SOLRTrackingComponentImpl#getNodesMetadata → NodeMetaDataQueryRowHandler#processResult callbackを使って最終的にMetaDataを取得
  29. 29. transactions‣ 利用ファイル群 → transactions.get.desc.xml(Web Script description) → transactions.get.json.ftl(FreeMarker Template) → org.alfresco.repo.web.scripts.solr.TransactionsGet(Java)‣ 目的 → 与えられた時間に含まれるトランザクションを取得する‣ 引数 → fromTxnId,fromCommitTime,maxResults(desc.xml) → minTxnId,maxTxnId,toCommitTime(隠しパラメータ)
  30. 30. transactions(Call Tree)‣ L.68 TransactionsGet#executeImpl → L.280 SOLRTrackingComponentImpl#getTransactions → L.136 SOLRDAOImpl#getTransactions この後、iBatis経由でDBから値を取得‣ solr-common-SqlMap.xml → select_Txns return Transaction
  31. 31. おわりに
  32. 32. 参考‣ ソースコード関連 → https://wiki.alfresco.com/wiki/ Alfresco_SVN_Development_Environment → http://wiki.alfresco.com/wiki/Source_Code
  33. 33. Copyright 2012 tachibanakikaku.com. All rights reserved.

×