SlideShare uma empresa Scribd logo
1 de 15
第33回Alfresco勉強会
Alfresco 5.1でコンテンツ自動削除を実装してみた
(& Alfresco SDK を使った話も少々)
2016/05/25
@_tasky
自己紹介
 私は…
◦ @_tasky
 日頃は…
◦ 株式会社イージフでAlfrescoやLiferayをいじってます
◦ 2児(5歳♀, 2歳♀)の父親業やってます
◦ Ingressエージェント業も少々
Contents
 有効期限の過ぎたコンテンツのアーカイブ
 コンテンツ自動削除機能の概要
 コンテンツ自動削除機能の実装
◦ Alfresco SDK
◦ スケジュールジョブ
 デモ
有効期限の切れたコンテンツのアーカイブ
 よくある要件
◦ コンテンツの属性に有効期限を持たせる
◦ 有効期限を過ぎたコンテンツを自動的にアーカイブ(or削除)す
る
 Effectivity(有効性)アスペクトの利用
◦ Effective From(有効期限開始日)属性
◦ Effective To(有効期限終了日)属性
 が、Effectivityアスペクトを付けたところで、有効期限終了日
を考慮して何がしかの処理を行う機能は実装されていない
⇒ これを実装します
コンテンツ自動削除機能の概要
 コンテンツの属性に有効期限を持たせる
◦ 前述のEffectivity(有効性)アスペクトを使い、コンテンツに
Effective From(有効期限開始日)とEffective To(有効期限終了
日)を設定する
⇒ Alfrescoのルール機能を使うと自動的にEffectivityアスペクトを
付与することができる
 有効期限を過ぎたコンテンツを自動的に削除する
◦ 日次バッチ等を想定し、スケジュールジョブとして実装する
◦ “Effectivityアスペクトを持つ && Effective Toの値 < 今日”なコンテ
ンツを削除する
⇒ Alfrescoの一般的なScheduled Jobと同じ形で実装する
コンテンツ自動削除機能の実装
 Alfresco SDK(昔のMaven Alfresco SDK)を使って開発
◦ Alfresco Repository (Platform)のみのカスタマイズ
 プロジェクトの作成方法は以下の記事を参照
http://www.slideshare.net/terajun/alfresco26-alfresco-sdk
 主要なポイントは以下のとおり
◦ アーキタイプ : org.alfresco.maven.archetype:alfresco-amp-
archetype 2.2.0 (Alfresco Repository AMPアーキタイプ)
◦ 生成されたpom.xmlの修正
<alfresco.version>5.1.f</alfresco.version>
◦ EclipseのMaven build Configuration
 Goals : install
 Profiles : amp-to-war
 JRE : JavaSE-1.8
 VM arguments : -Xms1G -Xmx2G -noverify
コンテンツ自動削除機能の実装
 config/alfresco/module/content-archive-
sample/content/service-context.xml
◦ Spring bean定義ファイル
◦ ジョブ実装、ジョブ実体、トリガを定義
 config/alfresco/module/content-archive-sample/alfresco-
global.properties
◦ bean定義が参照するジョブ実行タイミング等を設定
 IneffectiveContentArchiver.java
◦ ジョブ処理内容の実装クラス
 IneffectiveContentArchiveJob.java
◦ ジョブ実体を表すクラス
◦ bean定義で指定された処理を実行する
service-context.xml
 ineffectiveContentArchiver : ジョブ処理内容の実装定義
 ineffectiveContentArchiverJobDetail : ジョブ実体定義
 ineffectiveContentArchiverTrigger : ジョブのスケジュール実
行定義
<bean id="ineffectiveContentArchiver" class="jp.aegif.alfresco.repo.content.archive.IneffectiveContentArchiver">
<property name="searchService" ref="searchService" />
<property name="nodeService" ref="nodeService" />
<property name="transactionService" ref="transactionService" />
</bean>
<bean id="ineffectiveContentArchiverJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="jp.aegif.alfresco.repo.content.archive.IneffectiveContentArchiveJob" />
<property name="jobDataAsMap">
<map>
<entry key="ineffectiveContentArchiver">
<ref bean="ineffectiveContentArchiver" />
</entry>
<entry key="jobLockService">
<ref bean="jobLockService" />
</entry>
</map>
</property>
</bean>
<bean id="ineffectiveContentArchiverTrigger" class="org.alfresco.util.CronTriggerBean">
<property name="jobDetail" ref="ineffectiveContentArchiverJobDetail" />
<property name="scheduler" ref="schedulerFactory" />
<property name="cronExpression" value="${ineffective.content.archive.cronExpression}" />
<property name="startDelay" value="${ineffective.content.archive.cronStartDelay}" />
</bean>
alfresco-global.properties
 ジョブ実行タイミング等を設定
 bean定義から参照される
 ineffective.content.archive.cronExpression :
◦ ジョブ実行タイミングのcron表記
◦ Quartzのcronフォーマットに従うので ”秒 分 時 日 月 曜日”
 ineffective.content.archive.cronStartDelay :
◦ サーバ起動時の実行遅延(ミリ秒)
ineffective.content.archive.cronExpression=0 * * * * ?
ineffective.content.archive.cronStartDelay=60000
IneffectiveContentArchiver.java
 Effectivityアスペクトを持ち、かつEffectivity To (cm:to)属性が
今日より古いコンテンツを検索する
 ヒットしたコンテンツを削除する
◦ 正確には、ゴミ箱に入ります
public void execute() {
transactionService.getRetryingTransactionHelper().doInTransaction(
new RetryingTransactionCallback<Object>() {
@Override
public Object execute() throws Throwable {
String query = "+ASPECT:"cm:effectivity" +@cm:to:[MIN TO NOW]";
ResultSet rs = null;
SearchParameters sp = new SearchParameters();
sp.setLanguage(SearchService.LANGUAGE_LUCENE);
sp.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE);
sp.setQuery(query);
rs = searchService.query(sp);
for (NodeRef nodeRef : rs.getNodeRefs()) {
nodeService.deleteNode(nodeRef);
}
logger.debug("Archive " + rs.length() + " nodes");
return null;
}
});
}
IneffectiveContentArchiveJob.java
 AbstractScheduledLockedJobを継承するとcluster awareな
Jobになる
 bean定義のjobDataAsMapで指定されたジョブ実装を読み込
んで実行する
public class IneffectiveContentArchiveJob extends AbstractScheduledLockedJob implements StatefulJob {
@Override
public void executeJob(JobExecutionContext context) throws JobExecutionException {
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
Object ineffectiveContentArchiverObject = jobDataMap.get("ineffectiveContentArchiver");
if (ineffectiveContentArchiverObject == null || !(ineffectiveContentArchiverObject instanceof
IneffectiveContentArchiver)) {
throw new AlfrescoRuntimeException("Invalid JobData for IneffectiveContentArchiveJob");
}
final IneffectiveContentArchiver ineffectiveContentArchiver =
(IneffectiveContentArchiver)ineffectiveContentArchiverObject;
AuthenticationUtil.runAsSystem(new RunAsWork<Object>() {
@Override
public Object doWork() throws Exception {
ineffectiveContentArchiver.execute();
return null;
}
});
}
}
テスト用Alfresco Shareの準備
 Alfresco Repository AMPアーキタイプを使うと、テスト用
Tomcatの起動ができる
 ただし、Alfresco Repository (Platform)しか起動しないので、別
途Alfresco Shareを起動する必要がある
⇒ Alfresco Share AMPアーキタイプを使ってMaven Projectを作
成し、テスト用Alfresco Shareを起動する
 主要なポイントは以下のとおり
◦ アーキタイプ : org.alfresco.maven.archetype:share-amp-archetype
2.2.0
◦ 生成されたpom.xmlの修正
 <alfresco.version>5.1.f</alfresco.version>
 spring-surf-api dependencyの記述変更
◦ EclipseのMaven build Configuration
 Goals : install
 Profiles : amp-to-war
 Parameter : dependency.surf.version=6.3
 JRE : JavaSE-1.8
<dependency>
<groupId>org.alfresco.surf</groupId>
<artifactId>spring-surf-api</artifactId>
<version>${dependency.surf.version}</version>
<scope>provided</scope>
</dependency>
デモ
 環境
◦ Windows 10
◦ Alfresco Community Edition 5.1.f
◦ Alfresco SDK 2.2.0
 URL
◦ Alfresco Repository : http://localhost:8080/alfresco/
◦ Alfresco Share : http://localhost:8081/share/
 サンプルコード
https://bitbucket.org/tasuku_otani/content-archive-sample
まとめ
 有効期間を過ぎたコンテンツを自動削除するスケジュール
ジョブを作った
 課題
◦ 有効期限終了日当日のコンテンツも削除しちゃってる
◦ 削除じゃなくてアーカイブしたい
おまけ
 aegif Labo blog やってます
http://aegif-labo.blogspot.jp/
 2016/05/17にAlfresco Community Edition 5.1.gがリリースさ
れました
◦ 5.1.fとの差分はImageMagick脆弱性(ImageTragick)対応のみ
https://wiki.alfresco.com/wiki/Community_file_list_201605-GA

Mais conteúdo relacionado

Mais procurados

Alfresco勉強会#24 コンテンツのライフサイクル
Alfresco勉強会#24 コンテンツのライフサイクルAlfresco勉強会#24 コンテンツのライフサイクル
Alfresco勉強会#24 コンテンツのライフサイクルJun Terashita
 
Alfresco勉強会#40 QRコードによる文書の振り分け
Alfresco勉強会#40 QRコードによる文書の振り分けAlfresco勉強会#40 QRコードによる文書の振り分け
Alfresco勉強会#40 QRコードによる文書の振り分けTakeshi Totani
 
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみよう
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみようAlfresco勉強会#28 alfresco 5.0の検索機能をみてみよう
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみようTasuku Otani
 
Alfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレートAlfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレートJun Terashita
 
Bulk Export Tool for Alfresco
Bulk Export Tool for AlfrescoBulk Export Tool for Alfresco
Bulk Export Tool for AlfrescoRichard McKnight
 
Collaborative Editing Tools for Alfresco
Collaborative Editing Tools for AlfrescoCollaborative Editing Tools for Alfresco
Collaborative Editing Tools for AlfrescoAngel Borroy López
 
Alfresco Share - Recycle Bin Ideas
Alfresco Share - Recycle Bin IdeasAlfresco Share - Recycle Bin Ideas
Alfresco Share - Recycle Bin IdeasAlfrescoUE
 
Alfresco Backup and Disaster Recovery White Paper
Alfresco Backup and Disaster Recovery White PaperAlfresco Backup and Disaster Recovery White Paper
Alfresco Backup and Disaster Recovery White PaperToni de la Fuente
 
Jose portillo dev con presentation 1138
Jose portillo   dev con presentation 1138Jose portillo   dev con presentation 1138
Jose portillo dev con presentation 1138Jose Portillo
 
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころShinsuke Sugaya
 
0からわかるAlfresco
0からわかるAlfresco0からわかるAlfresco
0からわかるAlfrescoMoritakaSoma
 
Spring Boot + Netflix Eureka
Spring Boot + Netflix EurekaSpring Boot + Netflix Eureka
Spring Boot + Netflix Eureka心 谷本
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
Alfresco DevCon 2019 Performance Tools of the Trade
Alfresco DevCon 2019   Performance Tools of the TradeAlfresco DevCon 2019   Performance Tools of the Trade
Alfresco DevCon 2019 Performance Tools of the TradeLuis Colorado
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話Yoshinori Matsunobu
 
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境Shinsuke Sugaya
 

Mais procurados (20)

Alfresco勉強会#24 コンテンツのライフサイクル
Alfresco勉強会#24 コンテンツのライフサイクルAlfresco勉強会#24 コンテンツのライフサイクル
Alfresco勉強会#24 コンテンツのライフサイクル
 
Storage and Alfresco
Storage and AlfrescoStorage and Alfresco
Storage and Alfresco
 
Alfresco勉強会#40 QRコードによる文書の振り分け
Alfresco勉強会#40 QRコードによる文書の振り分けAlfresco勉強会#40 QRコードによる文書の振り分け
Alfresco勉強会#40 QRコードによる文書の振り分け
 
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみよう
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみようAlfresco勉強会#28 alfresco 5.0の検索機能をみてみよう
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみよう
 
AlfrescoとSolr(中編)
AlfrescoとSolr(中編)AlfrescoとSolr(中編)
AlfrescoとSolr(中編)
 
Alfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレートAlfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレート
 
Alfresco紹介
Alfresco紹介Alfresco紹介
Alfresco紹介
 
Bulk Export Tool for Alfresco
Bulk Export Tool for AlfrescoBulk Export Tool for Alfresco
Bulk Export Tool for Alfresco
 
AlfrescoとWeb Script
AlfrescoとWeb ScriptAlfrescoとWeb Script
AlfrescoとWeb Script
 
Collaborative Editing Tools for Alfresco
Collaborative Editing Tools for AlfrescoCollaborative Editing Tools for Alfresco
Collaborative Editing Tools for Alfresco
 
Alfresco Share - Recycle Bin Ideas
Alfresco Share - Recycle Bin IdeasAlfresco Share - Recycle Bin Ideas
Alfresco Share - Recycle Bin Ideas
 
Alfresco Backup and Disaster Recovery White Paper
Alfresco Backup and Disaster Recovery White PaperAlfresco Backup and Disaster Recovery White Paper
Alfresco Backup and Disaster Recovery White Paper
 
Jose portillo dev con presentation 1138
Jose portillo   dev con presentation 1138Jose portillo   dev con presentation 1138
Jose portillo dev con presentation 1138
 
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
 
0からわかるAlfresco
0からわかるAlfresco0からわかるAlfresco
0からわかるAlfresco
 
Spring Boot + Netflix Eureka
Spring Boot + Netflix EurekaSpring Boot + Netflix Eureka
Spring Boot + Netflix Eureka
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
Alfresco DevCon 2019 Performance Tools of the Trade
Alfresco DevCon 2019   Performance Tools of the TradeAlfresco DevCon 2019   Performance Tools of the Trade
Alfresco DevCon 2019 Performance Tools of the Trade
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
 
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
 

Destaque

Alfresco study presentation 38th customize How-To WebDAV
Alfresco study presentation 38th customize How-To WebDAVAlfresco study presentation 38th customize How-To WebDAV
Alfresco study presentation 38th customize How-To WebDAVTakeshi Totani
 
Alfresco勉強会#31 alfresco 5.0にウイルススキャン機能を実装してみる
Alfresco勉強会#31 alfresco 5.0にウイルススキャン機能を実装してみるAlfresco勉強会#31 alfresco 5.0にウイルススキャン機能を実装してみる
Alfresco勉強会#31 alfresco 5.0にウイルススキャン機能を実装してみるTasuku Otani
 
Alfresco勉強会#33 Alfresco Solr Admin UI
Alfresco勉強会#33 Alfresco Solr Admin UIAlfresco勉強会#33 Alfresco Solr Admin UI
Alfresco勉強会#33 Alfresco Solr Admin UIJun Terashita
 
Alfresco study37 alfresco_ng2_components
Alfresco study37 alfresco_ng2_componentsAlfresco study37 alfresco_ng2_components
Alfresco study37 alfresco_ng2_componentsTakeshi Totani
 
Alfresco study32 introducing5.1
Alfresco study32 introducing5.1Alfresco study32 introducing5.1
Alfresco study32 introducing5.1Takeshi Totani
 
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズAlfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズJun Terashita
 
0からわかるAlfresco 2017年1月版
0からわかるAlfresco 2017年1月版0からわかるAlfresco 2017年1月版
0からわかるAlfresco 2017年1月版MoritakaSoma
 
Alfresco Javascript Consoleのご紹介
Alfresco Javascript Consoleのご紹介Alfresco Javascript Consoleのご紹介
Alfresco Javascript Consoleのご紹介MoritakaSoma
 
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしようAlfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしようTomomi Kawabe
 
Alfresco study29 activitymonitoring
Alfresco study29 activitymonitoringAlfresco study29 activitymonitoring
Alfresco study29 activitymonitoringTakeshi Totani
 
Share UIカスタマイズの第一歩
Share UIカスタマイズの第一歩Share UIカスタマイズの第一歩
Share UIカスタマイズの第一歩MoritakaSoma
 
Alfrescoのバックアップとレストア
AlfrescoのバックアップとレストアAlfrescoのバックアップとレストア
AlfrescoのバックアップとレストアAshitaba YOSHIOKA
 
全社情報共有サイトへの Alfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
全社情報共有サイトへのAlfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会全社情報共有サイトへのAlfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
全社情報共有サイトへの Alfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会Ryota Watabe
 

Destaque (13)

Alfresco study presentation 38th customize How-To WebDAV
Alfresco study presentation 38th customize How-To WebDAVAlfresco study presentation 38th customize How-To WebDAV
Alfresco study presentation 38th customize How-To WebDAV
 
Alfresco勉強会#31 alfresco 5.0にウイルススキャン機能を実装してみる
Alfresco勉強会#31 alfresco 5.0にウイルススキャン機能を実装してみるAlfresco勉強会#31 alfresco 5.0にウイルススキャン機能を実装してみる
Alfresco勉強会#31 alfresco 5.0にウイルススキャン機能を実装してみる
 
Alfresco勉強会#33 Alfresco Solr Admin UI
Alfresco勉強会#33 Alfresco Solr Admin UIAlfresco勉強会#33 Alfresco Solr Admin UI
Alfresco勉強会#33 Alfresco Solr Admin UI
 
Alfresco study37 alfresco_ng2_components
Alfresco study37 alfresco_ng2_componentsAlfresco study37 alfresco_ng2_components
Alfresco study37 alfresco_ng2_components
 
Alfresco study32 introducing5.1
Alfresco study32 introducing5.1Alfresco study32 introducing5.1
Alfresco study32 introducing5.1
 
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズAlfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
 
0からわかるAlfresco 2017年1月版
0からわかるAlfresco 2017年1月版0からわかるAlfresco 2017年1月版
0からわかるAlfresco 2017年1月版
 
Alfresco Javascript Consoleのご紹介
Alfresco Javascript Consoleのご紹介Alfresco Javascript Consoleのご紹介
Alfresco Javascript Consoleのご紹介
 
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしようAlfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
 
Alfresco study29 activitymonitoring
Alfresco study29 activitymonitoringAlfresco study29 activitymonitoring
Alfresco study29 activitymonitoring
 
Share UIカスタマイズの第一歩
Share UIカスタマイズの第一歩Share UIカスタマイズの第一歩
Share UIカスタマイズの第一歩
 
Alfrescoのバックアップとレストア
AlfrescoのバックアップとレストアAlfrescoのバックアップとレストア
Alfrescoのバックアップとレストア
 
全社情報共有サイトへの Alfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
全社情報共有サイトへのAlfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会全社情報共有サイトへのAlfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
全社情報共有サイトへの Alfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
 

Semelhante a Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた

ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングTanUkkii
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2Atsuo Yamasaki
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
「エクストリームエンジニアへの道(Swift編)」
「エクストリームエンジニアへの道(Swift編)」「エクストリームエンジニアへの道(Swift編)」
「エクストリームエンジニアへの道(Swift編)」tech-arts
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼうyouku
 
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Shinsuke Sugaya
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsShogo Sensui
 
最新アドテク×Java script実践活用術
最新アドテク×Java script実践活用術最新アドテク×Java script実践活用術
最新アドテク×Java script実践活用術Nagao Shun
 
Weeklycms20120218
Weeklycms20120218Weeklycms20120218
Weeklycms20120218Yoshi Sakai
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとかyouku
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive ExtensionsShin Ise
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!Shohei Okada
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナーTakahiro Iwase
 
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップWebアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップNaoki Iwami
 

Semelhante a Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた (20)

ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
Dotnetconf2017
Dotnetconf2017Dotnetconf2017
Dotnetconf2017
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
「エクストリームエンジニアへの道(Swift編)」
「エクストリームエンジニアへの道(Swift編)」「エクストリームエンジニアへの道(Swift編)」
「エクストリームエンジニアへの道(Swift編)」
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼう
 
Visualforce + jQuery
Visualforce + jQueryVisualforce + jQuery
Visualforce + jQuery
 
Haikara
HaikaraHaikara
Haikara
 
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
 
最新アドテク×Java script実践活用術
最新アドテク×Java script実践活用術最新アドテク×Java script実践活用術
最新アドテク×Java script実践活用術
 
Weeklycms20120218
Weeklycms20120218Weeklycms20120218
Weeklycms20120218
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとか
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップWebアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
 
JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 

Último

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 

Último (10)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた

  • 2. 自己紹介  私は… ◦ @_tasky  日頃は… ◦ 株式会社イージフでAlfrescoやLiferayをいじってます ◦ 2児(5歳♀, 2歳♀)の父親業やってます ◦ Ingressエージェント業も少々
  • 3. Contents  有効期限の過ぎたコンテンツのアーカイブ  コンテンツ自動削除機能の概要  コンテンツ自動削除機能の実装 ◦ Alfresco SDK ◦ スケジュールジョブ  デモ
  • 4. 有効期限の切れたコンテンツのアーカイブ  よくある要件 ◦ コンテンツの属性に有効期限を持たせる ◦ 有効期限を過ぎたコンテンツを自動的にアーカイブ(or削除)す る  Effectivity(有効性)アスペクトの利用 ◦ Effective From(有効期限開始日)属性 ◦ Effective To(有効期限終了日)属性  が、Effectivityアスペクトを付けたところで、有効期限終了日 を考慮して何がしかの処理を行う機能は実装されていない ⇒ これを実装します
  • 5. コンテンツ自動削除機能の概要  コンテンツの属性に有効期限を持たせる ◦ 前述のEffectivity(有効性)アスペクトを使い、コンテンツに Effective From(有効期限開始日)とEffective To(有効期限終了 日)を設定する ⇒ Alfrescoのルール機能を使うと自動的にEffectivityアスペクトを 付与することができる  有効期限を過ぎたコンテンツを自動的に削除する ◦ 日次バッチ等を想定し、スケジュールジョブとして実装する ◦ “Effectivityアスペクトを持つ && Effective Toの値 < 今日”なコンテ ンツを削除する ⇒ Alfrescoの一般的なScheduled Jobと同じ形で実装する
  • 6. コンテンツ自動削除機能の実装  Alfresco SDK(昔のMaven Alfresco SDK)を使って開発 ◦ Alfresco Repository (Platform)のみのカスタマイズ  プロジェクトの作成方法は以下の記事を参照 http://www.slideshare.net/terajun/alfresco26-alfresco-sdk  主要なポイントは以下のとおり ◦ アーキタイプ : org.alfresco.maven.archetype:alfresco-amp- archetype 2.2.0 (Alfresco Repository AMPアーキタイプ) ◦ 生成されたpom.xmlの修正 <alfresco.version>5.1.f</alfresco.version> ◦ EclipseのMaven build Configuration  Goals : install  Profiles : amp-to-war  JRE : JavaSE-1.8  VM arguments : -Xms1G -Xmx2G -noverify
  • 7. コンテンツ自動削除機能の実装  config/alfresco/module/content-archive- sample/content/service-context.xml ◦ Spring bean定義ファイル ◦ ジョブ実装、ジョブ実体、トリガを定義  config/alfresco/module/content-archive-sample/alfresco- global.properties ◦ bean定義が参照するジョブ実行タイミング等を設定  IneffectiveContentArchiver.java ◦ ジョブ処理内容の実装クラス  IneffectiveContentArchiveJob.java ◦ ジョブ実体を表すクラス ◦ bean定義で指定された処理を実行する
  • 8. service-context.xml  ineffectiveContentArchiver : ジョブ処理内容の実装定義  ineffectiveContentArchiverJobDetail : ジョブ実体定義  ineffectiveContentArchiverTrigger : ジョブのスケジュール実 行定義 <bean id="ineffectiveContentArchiver" class="jp.aegif.alfresco.repo.content.archive.IneffectiveContentArchiver"> <property name="searchService" ref="searchService" /> <property name="nodeService" ref="nodeService" /> <property name="transactionService" ref="transactionService" /> </bean> <bean id="ineffectiveContentArchiverJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="jp.aegif.alfresco.repo.content.archive.IneffectiveContentArchiveJob" /> <property name="jobDataAsMap"> <map> <entry key="ineffectiveContentArchiver"> <ref bean="ineffectiveContentArchiver" /> </entry> <entry key="jobLockService"> <ref bean="jobLockService" /> </entry> </map> </property> </bean> <bean id="ineffectiveContentArchiverTrigger" class="org.alfresco.util.CronTriggerBean"> <property name="jobDetail" ref="ineffectiveContentArchiverJobDetail" /> <property name="scheduler" ref="schedulerFactory" /> <property name="cronExpression" value="${ineffective.content.archive.cronExpression}" /> <property name="startDelay" value="${ineffective.content.archive.cronStartDelay}" /> </bean>
  • 9. alfresco-global.properties  ジョブ実行タイミング等を設定  bean定義から参照される  ineffective.content.archive.cronExpression : ◦ ジョブ実行タイミングのcron表記 ◦ Quartzのcronフォーマットに従うので ”秒 分 時 日 月 曜日”  ineffective.content.archive.cronStartDelay : ◦ サーバ起動時の実行遅延(ミリ秒) ineffective.content.archive.cronExpression=0 * * * * ? ineffective.content.archive.cronStartDelay=60000
  • 10. IneffectiveContentArchiver.java  Effectivityアスペクトを持ち、かつEffectivity To (cm:to)属性が 今日より古いコンテンツを検索する  ヒットしたコンテンツを削除する ◦ 正確には、ゴミ箱に入ります public void execute() { transactionService.getRetryingTransactionHelper().doInTransaction( new RetryingTransactionCallback<Object>() { @Override public Object execute() throws Throwable { String query = "+ASPECT:"cm:effectivity" +@cm:to:[MIN TO NOW]"; ResultSet rs = null; SearchParameters sp = new SearchParameters(); sp.setLanguage(SearchService.LANGUAGE_LUCENE); sp.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); sp.setQuery(query); rs = searchService.query(sp); for (NodeRef nodeRef : rs.getNodeRefs()) { nodeService.deleteNode(nodeRef); } logger.debug("Archive " + rs.length() + " nodes"); return null; } }); }
  • 11. IneffectiveContentArchiveJob.java  AbstractScheduledLockedJobを継承するとcluster awareな Jobになる  bean定義のjobDataAsMapで指定されたジョブ実装を読み込 んで実行する public class IneffectiveContentArchiveJob extends AbstractScheduledLockedJob implements StatefulJob { @Override public void executeJob(JobExecutionContext context) throws JobExecutionException { JobDataMap jobDataMap = context.getJobDetail().getJobDataMap(); Object ineffectiveContentArchiverObject = jobDataMap.get("ineffectiveContentArchiver"); if (ineffectiveContentArchiverObject == null || !(ineffectiveContentArchiverObject instanceof IneffectiveContentArchiver)) { throw new AlfrescoRuntimeException("Invalid JobData for IneffectiveContentArchiveJob"); } final IneffectiveContentArchiver ineffectiveContentArchiver = (IneffectiveContentArchiver)ineffectiveContentArchiverObject; AuthenticationUtil.runAsSystem(new RunAsWork<Object>() { @Override public Object doWork() throws Exception { ineffectiveContentArchiver.execute(); return null; } }); } }
  • 12. テスト用Alfresco Shareの準備  Alfresco Repository AMPアーキタイプを使うと、テスト用 Tomcatの起動ができる  ただし、Alfresco Repository (Platform)しか起動しないので、別 途Alfresco Shareを起動する必要がある ⇒ Alfresco Share AMPアーキタイプを使ってMaven Projectを作 成し、テスト用Alfresco Shareを起動する  主要なポイントは以下のとおり ◦ アーキタイプ : org.alfresco.maven.archetype:share-amp-archetype 2.2.0 ◦ 生成されたpom.xmlの修正  <alfresco.version>5.1.f</alfresco.version>  spring-surf-api dependencyの記述変更 ◦ EclipseのMaven build Configuration  Goals : install  Profiles : amp-to-war  Parameter : dependency.surf.version=6.3  JRE : JavaSE-1.8 <dependency> <groupId>org.alfresco.surf</groupId> <artifactId>spring-surf-api</artifactId> <version>${dependency.surf.version}</version> <scope>provided</scope> </dependency>
  • 13. デモ  環境 ◦ Windows 10 ◦ Alfresco Community Edition 5.1.f ◦ Alfresco SDK 2.2.0  URL ◦ Alfresco Repository : http://localhost:8080/alfresco/ ◦ Alfresco Share : http://localhost:8081/share/  サンプルコード https://bitbucket.org/tasuku_otani/content-archive-sample
  • 14. まとめ  有効期間を過ぎたコンテンツを自動削除するスケジュール ジョブを作った  課題 ◦ 有効期限終了日当日のコンテンツも削除しちゃってる ◦ 削除じゃなくてアーカイブしたい
  • 15. おまけ  aegif Labo blog やってます http://aegif-labo.blogspot.jp/  2016/05/17にAlfresco Community Edition 5.1.gがリリースさ れました ◦ 5.1.fとの差分はImageMagick脆弱性(ImageTragick)対応のみ https://wiki.alfresco.com/wiki/Community_file_list_201605-GA