Upload
ashitaba-yoshioka
View
875
Download
0
Tags:
Embed Size (px)
Citation preview
Copyright 2012 tachibanakikaku.com. All rights reserved.
AlfrescoとSolr(後編)- Alfresco勉強会 第12回 -
2012/12/12 @mryoshio
目次
‣ 自己紹介
‣ 前回のおさらい
‣ ソースコード解説
‣ おわりに
自己紹介
‣ mryoshio→A社の社員
→AlfrescoやLiferayのコンサルタント
→ソースコードを読んだりカスタマイズしたりサポートしたり
→ Twitterとか色々なところにいます
→もう少しPythonで遊びたいと思いつつできてない
→最近はこたつに入って仕事してます
前回のおさらい
AlfrescoとSolr
‣ Alfrescoとは→英Alfresco社が提供するオープンソースソフトウェア。企業規模のコンテンツ管理を行える。それ以外に,Webコンテンツ管理やコラボレーションを低コストで行える
‣ Solrとは→Apache Luceneプロジェクトから派生した人気のある検索プラットフォーム。ヒット部分のハイライト,ファセットサーチなど豊富な機能がある。スケーラブルで分散した検索やインデクスレプリケーションも可能
パターン1:AlfrescoとSolrが別居
パターン2:AlfrescoとSolrが同居
ソースコード解説
Alfresco Solr Plugin側
‣ (省略)
Alfresco側
‣ SolrSearchService→前回やった
‣ SolrQueryHTTPClient→前回やった
‣ Alfresco Solr Pluginでのインデクシングに必要な情報を渡すWeb Script→ここから
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
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>(後略)
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(隠しパラメータ)
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に格納される
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)
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に格納される
aclsReaders
‣ 利用ファイル群→ aclsReaders.post.desc.xml(Web Script description)
→ aclsReaders.post.json.ftl(FreeMarker Template)
→ org.alfresco.repo.web.scripts.solr.AclsReadersGet(Java)
‣ 目的→与えられたACLのreaderを取得する
‣ 引数
aclsReaders(Call Tree)
‣ L.60 AclsReadersGet#executeImpl→ L.107 #buildModel
→ L.199 SOLRTrackingComponentImpl#getAclsReaders
→ L.1066 AclDAOImpl#getAccessControlList
→ #getAccessControlListImpl
✓ return AccessControlList
model
‣ 利用ファイル群→model.get.desc.xml(Web Script description)
→ org.alfresco.repo.web.scripts.solr.AlfrescoModelGet(Java)
‣ 目的→与えられた名称のモデルを取得する
‣ 引数→modelQName(隠しパラメータ)
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
modelsdiff
‣ 利用ファイル群→modelsdiff.post.desc.xml(Web Script description)
→modelsdiff.post.json.ftl(FreeMarker Template)
→ org.alfresco.repo.web.scripts.solr.AlfrescoModelsDiff(Java)
‣ 目的→与えられたモデルの差分を取得する
‣ 引数→models(JSONArray,隠しパラメータ)
modelsdiff(Call Tree)
‣ L.42 AlfrescoModelsDiff#executeImpl→ L.77 #buildModel
→ L.768 SOLRTrackingComponentImpl#getModelDiffs
→ L.67 DictionaryComponent#getAllModels
→ L.791 DictionaryDAOImpl#getModels
→ #getCompiledModels
nodeContent
‣ 利用ファイル群→ nodeContent.get.desc.xml(Web Script description)
→ org.alfresco.repo.web.scripts.solr.NodeContentGet(Java)
‣ 目的→与えられたノード属性の値をテキストで取得する
‣ 引数→ nodeId,propertyQName(desc.xml)
nodeContent(Call Tree)
‣ L.202 NodeContentGet#execute→StreamContent#streamContentImpl
✓ストリームとしてレスポンスをクライアントへ返す
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など(全て隠しパラメータ)
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に格納される
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など(全て隠しパラメータ)
nodesMetaData(Call Tree)
‣ L.181 NodesMetaDataGet#executeImpl→ L.735 SOLRTrackingComponentImpl#getNodesMetadata
→ NodeMetaDataQueryRowHandler#processResult
✓ callbackを使って最終的にMetaDataを取得
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(隠しパラメータ)
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
おわりに
参考
‣ ソースコード関連→ https://wiki.alfresco.com/wiki/Alfresco_SVN_Development_Environment
→ http://wiki.alfresco.com/wiki/Source_Code
Copyright 2012 tachibanakikaku.com. All rights reserved.