SlideShare a Scribd company logo
1 of 17
© 2013
第16回 Alfresco勉強会
カスタムテーブルの使い方
2013.6.6
terashita
© 2013
自己紹介
 主にAlfrescoまわりの仕事をしています
 最近の関心事
 息子の成長(10ヶ月 2013年6月6日現在)
 Vファーレン長崎の健闘(J2 第3位 2013年6月6日現在)
 大宮アルディージャの躍進(J1 第1位 2013年6月6日現在)
 ふるさと納税が熱いらしい
© 2013
今回のテーマ:カスタムテーブルの使い方
 Alfrescoの標準にはないテーブルを作ってデータを記録したり抽出したりしたいが、Alfrescoが使用
しているiBATISの使い方がよくわからない・・・という時のために簡単なデモをまじえて説明しま
す
 デモの内容
 カスタムテーブル:id(AUTO INCREMENT), 実行日時, ユーザIDの3つのカラム
 上記のテーブルにAlfrescoからデータをINSERTまたはSELECTする
• INSERT:実行時刻とユーザIDを挿入
• SELECT:ユーザIDを指定して、そのユーザIDに一致する全ての行を取得
2
環境
 Alfresco Community Edition 4.2.c
 MySQL Community Server 5.5.31
© 2013
大まかな流れ
1. カスタムテーブルの作成
2. カスタムテーブルに対応するEntityクラスの作成
3. SQLマッピング
4. DAOクラスの作成
5. (おまけ)動作確認用のServiceの作成
3
© 20134
大まかなイメージ
SqlSessionFactory
SqlMapConfig.xml
DAO
SqlSessionTemplate
SqlMap.xml DB毎に作成
<insert id="insert_custom_entity" parameterType="CustomEntity"
useGeneratedKeys="true" keyProperty="id">
insert into aegif_custom_table (run_date, user_id)
values (#{runDate}, #{userId})
</insert>
Service
DB
コンストラクタ
インジェクション
insert / select
insert / select
Entity
© 2013
1. カスタムテーブルの作成
 SQL文を実行してカスタムテーブルを作成
5
CREATE TABLE aegif_custom_table
(
id BIGINT NOT NULL AUTO_INCREMENT,
run_date DATETIME NOT NULL,
user_id VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
※Alfresco起動時に自動的にテーブルを作成する方法もあると思いますが、
今回は本筋から逸れるので割愛して手で作成します
Create-CustomTable.sql
© 2013
2. カスタムテーブルに対応するEntityクラスの作成
 カスタムテーブルのカラムに対応するフィールドとそれらのgetter, setterを持つEntitytクラス
を作成
6
package jp.aegif.alfresco.study.repo.domain;
import java.util.Date;
public class CustomEntity
{
private Long id; // internal DB-generated sequence id
private Date runDate;
private String userId;
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
...
jp.aegif.alfresco.study.repo.domain.CustomEntity
© 2013
3. SQLマッピング(1/2)
 SqlMapConfigの作成
7
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="CustomEntity" type="jp.aegif.alfresco.study.repo.domain.CustomEntity"/>
</typeAliases>
<mappers>
<mapper resource="alfresco/extension/ibatis/#resource.dialect#/custom-SqlMap.xml"/>
</mappers>
</configuration>
<alf_dir>/tomcat/shared/classes/alfresco/extension/ibatis/custom-SqlMapConfig.xml
© 2013
3. SQLマッピング(2/2)
 SqlMapの作成
 ここで定義したnamespace, idをDAOで使用する
8
<alf_dir>/tomcat/shared/classes/alfresco/extension/ibatis/org.hibernate.dialect.Dialect/custom-SqlMap.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="alfresco.custom">
<insert id="insert_custom_entity" parameterType="CustomEntity" useGeneratedKeys="true" keyProperty="id">
insert into aegif_custom_table (run_date, user_id)
values (#{runDate}, #{userId})
</insert>
<select id="select_custom_entities_by_user" parameterType="CustomEntity" resultType="CustomEntity">
select id as id, run_date as runDate, user_id as userId
from aegif_custom_table
where user_id = #{userId}
</select>
</mapper>
© 2013
4. DAOクラスの作成(1/2)
 Bean定義
 先ほど定義したSqlMapConfigと紐付いたSqlSessionTemplateをインジェクト
9
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<!-- MyBatis config for custom table -->
<bean id="customSqlSessionFactory" class="org.alfresco.ibatis.HierarchicalSqlSessionFactoryBean">
<property name="useLocalCaches" value="${mybatis.useLocalCaches}"/>
<property name="resourceLoader" ref="dialectResourceLoader"/>
<property name="dataSource" ref="dataSource"/>
<property name="configLocation">
<value>classpath:alfresco/extension/ibatis/custom-SqlMapConfig.xml</value>
</property>
</bean>
<bean id="customSqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="customSqlSessionFactory"/>
</bean>
<bean id="customEntityDAO" class="jp.aegif.alfresco.study.repo.domain.CustomEntityDAOImpl">
<property name="sqlSessionTemplate" ref="customSqlSessionTemplate"/>
</bean>
</beans>
<alf_dir>/tomcat/shared/classes/alfresco/extension/custom-ibatis-context.xml
© 2013
4. DAOクラスの作成(2/2)
 SqlMapで定義したSQL文のnamespaceとidを繋げたキー、およびparameterTypeで指定した
Entityを渡してSqlSessionTemplateオブジェクトのinsertまたはselectメソッドを実行する
10
public class CustomEntityDAOImpl implements CustomEntityDAO
{
protected SqlSessionTemplate template;
public long insertCustomEntity(CustomEntity customEntity) throws SQLException
{
template.insert("alfresco.custom.insert_custom_entity",
customEntity);
Long id = customEntity.getId();
return (id != null ? id : -1);
}
public List<CustomEntity> selectCustomEntitiesByUser(CustomEntity customEntity) throws SQLException
{
if (customEntity.getUserId() != null)
{
return (List<CustomEntity>) template.selectList(
"alfresco.custom.select_custom_entities_by_user", customEntity);
} else
{
return new ArrayList<CustomEntity>(0);
}
}
}
jp.aegif.alfresco.study.repo.domain.CustomEntityDAOImpl
© 2013
5.(おまけ)動作確認用のServiceの作成
 DAOを介してデータをINSERT, SELECTするServiceを作成
11
public class CustomEntityServiceImpl implements CustomEntityService
{
private CustomEntityDAO customEntityDAO;
...
public void insertCustomEntity(String userId)
{
...
try
{
Date runDate = new Date();
CustomEntity customEntity = new CustomEntity();
customEntity.setUserId(userId);
customEntity.setRunDate(runDate);
try
{
long id = customEntityDAO.insertCustomEntity(customEntity);
...
jp.aegif.alfresco.study.repo.custom.CustomEntityServiceImpl
© 2013
5.(おまけ)動作確認用のServiceの作成
 JavaScriptからCustomEntityServiceにアクセスするためのクラスの作成とBean定義
12
public class ScriptCustomEntity extends BaseScopableProcessorExtension
{
private CustomEntityService customEntityService;
...
public void insert(String userId)
{
customEntityService.insertCustomEntity(userId);
}
public List<CustomEntity> selectByUser(String userId)
{
return customEntityService.selectCustomEntitiesByUser(userId);
}
}
<bean id="customEntityScript" parent="baseJavaScriptExtension" class="jp.aegif.alfresco.study.repo.custom.ScriptCustomEntity">
<property name="extensionName">
<value>customEntity</value>
</property>
<property name="customEntityService">
<ref bean="customEntityService" />
</property>
</bean>
jp.aegif.alfresco.study.repo.custom.ScriptCustomEntity
<alf_dir>/shared/classes/alfresco/extension/custom-script-services-context.xml
© 201313
(再掲)大まかなイメージ
SqlSessionFactory
SqlMapConfig.xml
DAO
SqlSessionTemplate
SqlMap.xml DB毎に作成
<insert id="insert_custom_entity" parameterType="CustomEntity"
useGeneratedKeys="true" keyProperty="id">
insert into aegif_custom_table (run_date, user_id)
values (#{runDate}, #{userId})
</insert>
Service
DB
コンストラクタ
インジェクション
insert / select
insert / select
Entity
© 2013
デモ
© 2013
今回使用したソースコード
 https://github.com/terajun/AlfrescoCustomTableSample
Alfrescoのカスタムテーブルの使い方

More Related Content

What's hot

自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみたYuki Takei
 
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発Nomura Yusuke
 
Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1Noriyoshi Shinoda
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2Atsuo Yamasaki
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )hiro345
 
System4 comment h
System4 comment hSystem4 comment h
System4 comment hJun Chiba
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTMasahiro Nagano
 
ASP.NET MVC のルーティング設定を少しだけ REST ぽくする
ASP.NET MVC のルーティング設定を少しだけ REST ぽくするASP.NET MVC のルーティング設定を少しだけ REST ぽくする
ASP.NET MVC のルーティング設定を少しだけ REST ぽくするdany1468
 
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜Michitoshi Yoshida
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1Makoto Haruyama
 
FuelPHPをさわってみて
FuelPHPをさわってみてFuelPHPをさわってみて
FuelPHPをさわってみてSotaro Omura
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
Mysql casual talks vol4
Mysql casual talks vol4Mysql casual talks vol4
Mysql casual talks vol4matsuo kenji
 
Solr 4.0 の主な機能
Solr 4.0 の主な機能Solr 4.0 の主な機能
Solr 4.0 の主な機能Shinichiro Abe
 

What's hot (18)

自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
 
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発
 
Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
AlfrescoとSolr(後編)
AlfrescoとSolr(後編)AlfrescoとSolr(後編)
AlfrescoとSolr(後編)
 
System4 comment h
System4 comment hSystem4 comment h
System4 comment h
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
 
ASP.NET MVC のルーティング設定を少しだけ REST ぽくする
ASP.NET MVC のルーティング設定を少しだけ REST ぽくするASP.NET MVC のルーティング設定を少しだけ REST ぽくする
ASP.NET MVC のルーティング設定を少しだけ REST ぽくする
 
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
FuelPHPをさわってみて
FuelPHPをさわってみてFuelPHPをさわってみて
FuelPHPをさわってみて
 
test
testtest
test
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
Slub alloc and free
Slub alloc and freeSlub alloc and free
Slub alloc and free
 
Mysql casual talks vol4
Mysql casual talks vol4Mysql casual talks vol4
Mysql casual talks vol4
 
Solr 4.0 の主な機能
Solr 4.0 の主な機能Solr 4.0 の主な機能
Solr 4.0 の主な機能
 

Viewers also liked

Share UIカスタマイズ Widget編
Share UIカスタマイズ Widget編Share UIカスタマイズ Widget編
Share UIカスタマイズ Widget編MoritakaSoma
 
Alfresco勉強会#24 コンテンツのライフサイクル
Alfresco勉強会#24 コンテンツのライフサイクルAlfresco勉強会#24 コンテンツのライフサイクル
Alfresco勉強会#24 コンテンツのライフサイクルJun Terashita
 
Alfresco study41 alfresco_sdk3_introduction
Alfresco study41 alfresco_sdk3_introductionAlfresco study41 alfresco_sdk3_introduction
Alfresco study41 alfresco_sdk3_introductionTakeshi Totani
 
0からわかるAlfresco
0からわかるAlfresco0からわかるAlfresco
0からわかるAlfrescoMoritakaSoma
 
0からわかるAlfresco 2017年1月版
0からわかるAlfresco 2017年1月版0からわかるAlfresco 2017年1月版
0からわかるAlfresco 2017年1月版MoritakaSoma
 
Alfresco勉強会#34 Alfrescoをカスタマイズする時に知っておくと便利なこと
Alfresco勉強会#34 Alfrescoをカスタマイズする時に知っておくと便利なことAlfresco勉強会#34 Alfrescoをカスタマイズする時に知っておくと便利なこと
Alfresco勉強会#34 Alfrescoをカスタマイズする時に知っておくと便利なことJun Terashita
 

Viewers also liked (6)

Share UIカスタマイズ Widget編
Share UIカスタマイズ Widget編Share UIカスタマイズ Widget編
Share UIカスタマイズ Widget編
 
Alfresco勉強会#24 コンテンツのライフサイクル
Alfresco勉強会#24 コンテンツのライフサイクルAlfresco勉強会#24 コンテンツのライフサイクル
Alfresco勉強会#24 コンテンツのライフサイクル
 
Alfresco study41 alfresco_sdk3_introduction
Alfresco study41 alfresco_sdk3_introductionAlfresco study41 alfresco_sdk3_introduction
Alfresco study41 alfresco_sdk3_introduction
 
0からわかるAlfresco
0からわかるAlfresco0からわかるAlfresco
0からわかるAlfresco
 
0からわかるAlfresco 2017年1月版
0からわかるAlfresco 2017年1月版0からわかるAlfresco 2017年1月版
0からわかるAlfresco 2017年1月版
 
Alfresco勉強会#34 Alfrescoをカスタマイズする時に知っておくと便利なこと
Alfresco勉強会#34 Alfrescoをカスタマイズする時に知っておくと便利なことAlfresco勉強会#34 Alfrescoをカスタマイズする時に知っておくと便利なこと
Alfresco勉強会#34 Alfrescoをカスタマイズする時に知っておくと便利なこと
 

Similar to Alfrescoのカスタムテーブルの使い方

LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境Shinsuke Sugaya
 
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkToshiaki Maki
 
Android起動周りのノウハウ
Android起動周りのノウハウAndroid起動周りのノウハウ
Android起動周りのノウハウchancelab
 
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)Issei Nishigata
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップYasuhito Yabe
 
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925Yu Ito
 
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tipsyoshikawa_t
 
Data Visualization meetup 2017
Data Visualization meetup 2017Data Visualization meetup 2017
Data Visualization meetup 2017清水 正行
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!IIJ
 
インフォグラフィックス時代のD3.js入門
インフォグラフィックス時代のD3.js入門インフォグラフィックス時代のD3.js入門
インフォグラフィックス時代のD3.js入門貴寛 益子
 
Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks Hiroshi Ito
 
traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験Toshio Ehara
 
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷JavaToshiaki Maki
 
エンジニアのための Azure 基礎知識
エンジニアのための Azure 基礎知識エンジニアのための Azure 基礎知識
エンジニアのための Azure 基礎知識Daiyu Hatakeyama
 
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版Masahiro Nagano
 

Similar to Alfrescoのカスタムテーブルの使い方 (20)

LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
 
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
 
Android起動周りのノウハウ
Android起動周りのノウハウAndroid起動周りのノウハウ
Android起動周りのノウハウ
 
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)
 
hscj2019_ishizaki_public
hscj2019_ishizaki_publichscj2019_ishizaki_public
hscj2019_ishizaki_public
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
 
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925
 
scala-kaigi1-sbt
scala-kaigi1-sbtscala-kaigi1-sbt
scala-kaigi1-sbt
 
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
 
Data Visualization meetup 2017
Data Visualization meetup 2017Data Visualization meetup 2017
Data Visualization meetup 2017
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!
 
インフォグラフィックス時代のD3.js入門
インフォグラフィックス時代のD3.js入門インフォグラフィックス時代のD3.js入門
インフォグラフィックス時代のD3.js入門
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks
 
traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験
 
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
 
エンジニアのための Azure 基礎知識
エンジニアのための Azure 基礎知識エンジニアのための Azure 基礎知識
エンジニアのための Azure 基礎知識
 
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
 
AlfrescoとSolr(中編)
AlfrescoとSolr(中編)AlfrescoとSolr(中編)
AlfrescoとSolr(中編)
 

More from Jun Terashita

Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズAlfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズJun Terashita
 
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勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレートAlfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレートJun Terashita
 
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみようAlfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみようJun Terashita
 
Alfresco勉強会#21 Alfresco Workdesk Configuratorによるpluginの設定変更方法
Alfresco勉強会#21 Alfresco Workdesk Configuratorによるpluginの設定変更方法Alfresco勉強会#21 Alfresco Workdesk Configuratorによるpluginの設定変更方法
Alfresco勉強会#21 Alfresco Workdesk Configuratorによるpluginの設定変更方法Jun Terashita
 
Alfresco ce 4.2の新機能
Alfresco ce 4.2の新機能Alfresco ce 4.2の新機能
Alfresco ce 4.2の新機能Jun Terashita
 
[Alfresco]Custom Modelの作成
[Alfresco]Custom Modelの作成[Alfresco]Custom Modelの作成
[Alfresco]Custom Modelの作成Jun Terashita
 

More from Jun Terashita (7)

Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズAlfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
 
Alfresco勉強会#33 Alfresco Solr Admin UI
Alfresco勉強会#33 Alfresco Solr Admin UIAlfresco勉強会#33 Alfresco Solr Admin UI
Alfresco勉強会#33 Alfresco Solr Admin UI
 
Alfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレートAlfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレート
 
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみようAlfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう
 
Alfresco勉強会#21 Alfresco Workdesk Configuratorによるpluginの設定変更方法
Alfresco勉強会#21 Alfresco Workdesk Configuratorによるpluginの設定変更方法Alfresco勉強会#21 Alfresco Workdesk Configuratorによるpluginの設定変更方法
Alfresco勉強会#21 Alfresco Workdesk Configuratorによるpluginの設定変更方法
 
Alfresco ce 4.2の新機能
Alfresco ce 4.2の新機能Alfresco ce 4.2の新機能
Alfresco ce 4.2の新機能
 
[Alfresco]Custom Modelの作成
[Alfresco]Custom Modelの作成[Alfresco]Custom Modelの作成
[Alfresco]Custom Modelの作成
 

Recently uploaded

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Recently uploaded (8)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

Alfrescoのカスタムテーブルの使い方

  • 2. © 2013 自己紹介  主にAlfrescoまわりの仕事をしています  最近の関心事  息子の成長(10ヶ月 2013年6月6日現在)  Vファーレン長崎の健闘(J2 第3位 2013年6月6日現在)  大宮アルディージャの躍進(J1 第1位 2013年6月6日現在)  ふるさと納税が熱いらしい
  • 3. © 2013 今回のテーマ:カスタムテーブルの使い方  Alfrescoの標準にはないテーブルを作ってデータを記録したり抽出したりしたいが、Alfrescoが使用 しているiBATISの使い方がよくわからない・・・という時のために簡単なデモをまじえて説明しま す  デモの内容  カスタムテーブル:id(AUTO INCREMENT), 実行日時, ユーザIDの3つのカラム  上記のテーブルにAlfrescoからデータをINSERTまたはSELECTする • INSERT:実行時刻とユーザIDを挿入 • SELECT:ユーザIDを指定して、そのユーザIDに一致する全ての行を取得 2 環境  Alfresco Community Edition 4.2.c  MySQL Community Server 5.5.31
  • 4. © 2013 大まかな流れ 1. カスタムテーブルの作成 2. カスタムテーブルに対応するEntityクラスの作成 3. SQLマッピング 4. DAOクラスの作成 5. (おまけ)動作確認用のServiceの作成 3
  • 5. © 20134 大まかなイメージ SqlSessionFactory SqlMapConfig.xml DAO SqlSessionTemplate SqlMap.xml DB毎に作成 <insert id="insert_custom_entity" parameterType="CustomEntity" useGeneratedKeys="true" keyProperty="id"> insert into aegif_custom_table (run_date, user_id) values (#{runDate}, #{userId}) </insert> Service DB コンストラクタ インジェクション insert / select insert / select Entity
  • 6. © 2013 1. カスタムテーブルの作成  SQL文を実行してカスタムテーブルを作成 5 CREATE TABLE aegif_custom_table ( id BIGINT NOT NULL AUTO_INCREMENT, run_date DATETIME NOT NULL, user_id VARCHAR(255) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB; ※Alfresco起動時に自動的にテーブルを作成する方法もあると思いますが、 今回は本筋から逸れるので割愛して手で作成します Create-CustomTable.sql
  • 7. © 2013 2. カスタムテーブルに対応するEntityクラスの作成  カスタムテーブルのカラムに対応するフィールドとそれらのgetter, setterを持つEntitytクラス を作成 6 package jp.aegif.alfresco.study.repo.domain; import java.util.Date; public class CustomEntity { private Long id; // internal DB-generated sequence id private Date runDate; private String userId; public Long getId() { return id; } public void setId(Long id) { this.id = id; } ... jp.aegif.alfresco.study.repo.domain.CustomEntity
  • 8. © 2013 3. SQLマッピング(1/2)  SqlMapConfigの作成 7 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <typeAlias alias="CustomEntity" type="jp.aegif.alfresco.study.repo.domain.CustomEntity"/> </typeAliases> <mappers> <mapper resource="alfresco/extension/ibatis/#resource.dialect#/custom-SqlMap.xml"/> </mappers> </configuration> <alf_dir>/tomcat/shared/classes/alfresco/extension/ibatis/custom-SqlMapConfig.xml
  • 9. © 2013 3. SQLマッピング(2/2)  SqlMapの作成  ここで定義したnamespace, idをDAOで使用する 8 <alf_dir>/tomcat/shared/classes/alfresco/extension/ibatis/org.hibernate.dialect.Dialect/custom-SqlMap.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="alfresco.custom"> <insert id="insert_custom_entity" parameterType="CustomEntity" useGeneratedKeys="true" keyProperty="id"> insert into aegif_custom_table (run_date, user_id) values (#{runDate}, #{userId}) </insert> <select id="select_custom_entities_by_user" parameterType="CustomEntity" resultType="CustomEntity"> select id as id, run_date as runDate, user_id as userId from aegif_custom_table where user_id = #{userId} </select> </mapper>
  • 10. © 2013 4. DAOクラスの作成(1/2)  Bean定義  先ほど定義したSqlMapConfigと紐付いたSqlSessionTemplateをインジェクト 9 <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'> <beans> <!-- MyBatis config for custom table --> <bean id="customSqlSessionFactory" class="org.alfresco.ibatis.HierarchicalSqlSessionFactoryBean"> <property name="useLocalCaches" value="${mybatis.useLocalCaches}"/> <property name="resourceLoader" ref="dialectResourceLoader"/> <property name="dataSource" ref="dataSource"/> <property name="configLocation"> <value>classpath:alfresco/extension/ibatis/custom-SqlMapConfig.xml</value> </property> </bean> <bean id="customSqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="customSqlSessionFactory"/> </bean> <bean id="customEntityDAO" class="jp.aegif.alfresco.study.repo.domain.CustomEntityDAOImpl"> <property name="sqlSessionTemplate" ref="customSqlSessionTemplate"/> </bean> </beans> <alf_dir>/tomcat/shared/classes/alfresco/extension/custom-ibatis-context.xml
  • 11. © 2013 4. DAOクラスの作成(2/2)  SqlMapで定義したSQL文のnamespaceとidを繋げたキー、およびparameterTypeで指定した Entityを渡してSqlSessionTemplateオブジェクトのinsertまたはselectメソッドを実行する 10 public class CustomEntityDAOImpl implements CustomEntityDAO { protected SqlSessionTemplate template; public long insertCustomEntity(CustomEntity customEntity) throws SQLException { template.insert("alfresco.custom.insert_custom_entity", customEntity); Long id = customEntity.getId(); return (id != null ? id : -1); } public List<CustomEntity> selectCustomEntitiesByUser(CustomEntity customEntity) throws SQLException { if (customEntity.getUserId() != null) { return (List<CustomEntity>) template.selectList( "alfresco.custom.select_custom_entities_by_user", customEntity); } else { return new ArrayList<CustomEntity>(0); } } } jp.aegif.alfresco.study.repo.domain.CustomEntityDAOImpl
  • 12. © 2013 5.(おまけ)動作確認用のServiceの作成  DAOを介してデータをINSERT, SELECTするServiceを作成 11 public class CustomEntityServiceImpl implements CustomEntityService { private CustomEntityDAO customEntityDAO; ... public void insertCustomEntity(String userId) { ... try { Date runDate = new Date(); CustomEntity customEntity = new CustomEntity(); customEntity.setUserId(userId); customEntity.setRunDate(runDate); try { long id = customEntityDAO.insertCustomEntity(customEntity); ... jp.aegif.alfresco.study.repo.custom.CustomEntityServiceImpl
  • 13. © 2013 5.(おまけ)動作確認用のServiceの作成  JavaScriptからCustomEntityServiceにアクセスするためのクラスの作成とBean定義 12 public class ScriptCustomEntity extends BaseScopableProcessorExtension { private CustomEntityService customEntityService; ... public void insert(String userId) { customEntityService.insertCustomEntity(userId); } public List<CustomEntity> selectByUser(String userId) { return customEntityService.selectCustomEntitiesByUser(userId); } } <bean id="customEntityScript" parent="baseJavaScriptExtension" class="jp.aegif.alfresco.study.repo.custom.ScriptCustomEntity"> <property name="extensionName"> <value>customEntity</value> </property> <property name="customEntityService"> <ref bean="customEntityService" /> </property> </bean> jp.aegif.alfresco.study.repo.custom.ScriptCustomEntity <alf_dir>/shared/classes/alfresco/extension/custom-script-services-context.xml
  • 14. © 201313 (再掲)大まかなイメージ SqlSessionFactory SqlMapConfig.xml DAO SqlSessionTemplate SqlMap.xml DB毎に作成 <insert id="insert_custom_entity" parameterType="CustomEntity" useGeneratedKeys="true" keyProperty="id"> insert into aegif_custom_table (run_date, user_id) values (#{runDate}, #{userId}) </insert> Service DB コンストラクタ インジェクション insert / select insert / select Entity