+ All Categories
Home > Technology > AlfrescoとSolr(後編)

AlfrescoとSolr(後編)

Date post: 28-Jun-2015
Category:
Upload: ashitaba-yoshioka
View: 875 times
Download: 0 times
Share this document with a friend
Popular Tags:
33
Copyright 2012 tachibanakikaku.com. All rights reserved. AlfrescoとSolr(後編) - Alfresco勉強会 第12回 - 2012/12/12 @mryoshio
Transcript
Page 1: AlfrescoとSolr(後編)

Copyright 2012 tachibanakikaku.com. All rights reserved.

AlfrescoとSolr(後編)- Alfresco勉強会 第12回 -

2012/12/12 @mryoshio

Page 2: AlfrescoとSolr(後編)

目次

‣ 自己紹介

‣ 前回のおさらい

‣ ソースコード解説

‣ おわりに

Page 3: AlfrescoとSolr(後編)

自己紹介

‣ mryoshio→A社の社員

→AlfrescoやLiferayのコンサルタント

→ソースコードを読んだりカスタマイズしたりサポートしたり

→ Twitterとか色々なところにいます

→もう少しPythonで遊びたいと思いつつできてない

→最近はこたつに入って仕事してます

Page 4: AlfrescoとSolr(後編)

前回のおさらい

Page 5: AlfrescoとSolr(後編)

AlfrescoとSolr

‣ Alfrescoとは→英Alfresco社が提供するオープンソースソフトウェア。企業規模のコンテンツ管理を行える。それ以外に,Webコンテンツ管理やコラボレーションを低コストで行える

‣ Solrとは→Apache Luceneプロジェクトから派生した人気のある検索プラットフォーム。ヒット部分のハイライト,ファセットサーチなど豊富な機能がある。スケーラブルで分散した検索やインデクスレプリケーションも可能

Page 6: AlfrescoとSolr(後編)

パターン1:AlfrescoとSolrが別居

Page 7: AlfrescoとSolr(後編)

パターン2:AlfrescoとSolrが同居

Page 8: AlfrescoとSolr(後編)

ソースコード解説

Page 9: AlfrescoとSolr(後編)

Alfresco Solr Plugin側

‣ (省略)

Page 10: AlfrescoとSolr(後編)

Alfresco側

‣ SolrSearchService→前回やった

‣ SolrQueryHTTPClient→前回やった

‣ Alfresco Solr Pluginでのインデクシングに必要な情報を渡すWeb Script→ここから

Page 11: AlfrescoとSolr(後編)

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

Page 12: AlfrescoとSolr(後編)

Javaクラスの指定

‣ 各Web Scriptで利用するJavaクラスの指定→webapps/alfresco/WEB-INF/classes/alfresco/web-scripts-application-context.xml

L.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>(後略)

Page 13: AlfrescoとSolr(後編)

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(隠しパラメータ)

Page 14: AlfrescoとSolr(後編)

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に格納される

Page 15: AlfrescoとSolr(後編)

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)

Page 16: AlfrescoとSolr(後編)

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に格納される

Page 17: AlfrescoとSolr(後編)

aclsReaders

‣ 利用ファイル群→ aclsReaders.post.desc.xml(Web Script description)

→ aclsReaders.post.json.ftl(FreeMarker Template)

→ org.alfresco.repo.web.scripts.solr.AclsReadersGet(Java)

‣ 目的→与えられたACLのreaderを取得する

‣ 引数

Page 18: AlfrescoとSolr(後編)

aclsReaders(Call Tree)

‣ L.60 AclsReadersGet#executeImpl→ L.107 #buildModel

→ L.199 SOLRTrackingComponentImpl#getAclsReaders

→ L.1066 AclDAOImpl#getAccessControlList

→ #getAccessControlListImpl

✓ return AccessControlList

Page 19: AlfrescoとSolr(後編)

model

‣ 利用ファイル群→model.get.desc.xml(Web Script description)

→ org.alfresco.repo.web.scripts.solr.AlfrescoModelGet(Java)

‣ 目的→与えられた名称のモデルを取得する

‣ 引数→modelQName(隠しパラメータ)

Page 20: AlfrescoとSolr(後編)

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

Page 21: AlfrescoとSolr(後編)

modelsdiff

‣ 利用ファイル群→modelsdiff.post.desc.xml(Web Script description)

→modelsdiff.post.json.ftl(FreeMarker Template)

→ org.alfresco.repo.web.scripts.solr.AlfrescoModelsDiff(Java)

‣ 目的→与えられたモデルの差分を取得する

‣ 引数→models(JSONArray,隠しパラメータ)

Page 22: AlfrescoとSolr(後編)

modelsdiff(Call Tree)

‣ L.42 AlfrescoModelsDiff#executeImpl→ L.77 #buildModel

→ L.768 SOLRTrackingComponentImpl#getModelDiffs

→ L.67 DictionaryComponent#getAllModels

→ L.791 DictionaryDAOImpl#getModels

→ #getCompiledModels

Page 23: AlfrescoとSolr(後編)

nodeContent

‣ 利用ファイル群→ nodeContent.get.desc.xml(Web Script description)

→ org.alfresco.repo.web.scripts.solr.NodeContentGet(Java)

‣ 目的→与えられたノード属性の値をテキストで取得する

‣ 引数→ nodeId,propertyQName(desc.xml)

Page 24: AlfrescoとSolr(後編)

nodeContent(Call Tree)

‣ L.202 NodeContentGet#execute→StreamContent#streamContentImpl

✓ストリームとしてレスポンスをクライアントへ返す

Page 25: AlfrescoとSolr(後編)

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など(全て隠しパラメータ)

Page 26: AlfrescoとSolr(後編)

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に格納される

Page 27: AlfrescoとSolr(後編)

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など(全て隠しパラメータ)

Page 28: AlfrescoとSolr(後編)

nodesMetaData(Call Tree)

‣ L.181 NodesMetaDataGet#executeImpl→ L.735 SOLRTrackingComponentImpl#getNodesMetadata

→ NodeMetaDataQueryRowHandler#processResult

✓ callbackを使って最終的にMetaDataを取得

Page 29: AlfrescoとSolr(後編)

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(隠しパラメータ)

Page 30: AlfrescoとSolr(後編)

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

Page 31: AlfrescoとSolr(後編)

おわりに

Page 32: AlfrescoとSolr(後編)

参考

‣ ソースコード関連→ https://wiki.alfresco.com/wiki/Alfresco_SVN_Development_Environment

→ http://wiki.alfresco.com/wiki/Source_Code

Page 33: AlfrescoとSolr(後編)

Copyright 2012 tachibanakikaku.com. All rights reserved.


Recommended