SlideShare a Scribd company logo
1 of 44
Download to read offline
For BeginnerFor Beginner
Springの
現在,過去,未来
日本Springユーザ会
長谷川 裕一
1
For Beginner
2
自己紹介
• 長谷川 裕一
– 日本Springユーザ会会長、Starlight&Storm 代表
• 1986年、イリノイ州警察指紋システムのアセンブリ言語プログラマ
からスタート、色々あって、CORBAからEJB、Webサービスを経て
Springへ
• 国内で最も初期のXPコンサルタント
• 現在はオブジェクト指向を中心に、コンサルティング(IT戦略、技
術、プロセスetc)や教育で活動
• 書籍
– プログラムの育てかた(ソフトバンク),Spring入門,Spring2.0入門,
Spring3入門,間違いだらけのソフトウェア・アーキテクチャ(技術評論
社)
• その他
– SQuBOK策定メンバ, チェンジビジョン・コンサルティング・パートナー
For Beginner
本日のハナシ
• 0. Spring誕生
– 2000~2003年 J2EE(EJB)の全盛期
• 1. Spring乳児期
– 2004~2008年 SpringがDIとAOPだった時代
• 2. Spring幼年期
– 2009〜2016年 Microservice、Cloudへ
3
高齢者の昔話なので
期待しないで聞いておくれ。
For Beginner
本日のハナシ
• 0. Spring誕生
– 2000~2003年 J2EE(EJB)の全盛期
• 1. Spring乳児期
– 2004~2008年 SpringがDIとAOPだった時代
• 2. Spring幼年期
– 2009〜2015年 Microservice、Cloudへ
4
入社前の話だ…
For Beginner
Spring登場前後
20032000
J2EE1.2
EJB1.1
Servlet2.1
JSP1.1
Struts
J2EE1.4
EJB2.1
Servlet2.4
JSP2.0
2006
JavaEE5
EJB3
Servlet2.5
JSP2.1
Spring
Hibernate
Seasar2
Remoteから
Localな
Interface
POJO
&
JPA
5
JSUG
EJB1の話でもしようかのぅ
For Beginner
EJB1-分散メカニズム
• 2種類のEnterprise Bean(2.0からMDB追加)
– SessionBean
– EntityBean
EJB Contaiter
Instance Pooling
:C lient C ode
:Hom e Interface
:EJB
O bject
:Enterprise
Bean
:Hom e
O bject
:Rem ote Interface
1:新しいEJBO bjectの生成依頼
3:EJBO bjectの参照を返す
4:処理の依頼
5:処理をデレゲート
2:EJB O bjectを生成
:Enterprise
Bean
assign
6
Remoteアクセスしか
なかったんじゃよ。
For Beginner
10年早くて、間違って使われたEJB
• 時代はローカルなWebアプリケーション
– 分散オブジェクトは過剰、ローカルアクセスだけで十分
– 単なるトランザクションスクリプトとORMが欲しい
– SQLは自分で書いた方がいい(CMPは使わない)
– コンテナがないとテストできない
– 再利用(ポータビリティ)の仕組みを考えたけど、再利用で
きない
•7
ポータビリティを
考えたんですか?
そうそう
そういう団体がありましたねぇ
EJBは分散を捨てたんじゃ。
そしてSpringの真似を始めたのじゃ。
そのまま分散で進んでいたら今頃…
For Beginner
2000年頃のWebアプリ
EIS層中間層Client層
RDBBrowser
JavaBeans 自家製の
フレームワーク自家製の
フレームワーク
プレゼンテーション層 ビジネス層 データアクセス層
Session Bean Entity Bean
8
いわゆる普通の業務アプリじゃよ。
EJBはサッカーチームのメンバに、
空きがあるからと入れられた
キックボクサーみたいなもので、
EJBが可哀想じゃったよ…
For Beginner
Spring誕生
• 実践J2EE
– 重厚なJava EE(EJB)の否定
– 軽量なコンテナ Spring0.9
2003
9
なんのポーズですか?
For Beginner
本日のハナシ
• 0. Spring誕生
– 2000~2003年 J2EE(EJB)の全盛期
• 1. Spring乳児期
– 2004~2008年 SpringがDIとAOPだった時代
• 2. Spring幼年期
– 2009〜2015年 All in OneからMicroserviceとCloudへ
10
For Beginner
EJBのInterfaceで目覚めた
• Interfaceってそうやって使うのか!
– Interfaceは部品間をつなぐ
• ソフトウェアを電気製品みたいに部品化したい
– 部品化 = インタフェース接続
•11
それまでは、部品化
って考えてなかったんですか?
時代はまだまだ、
モノリシックなアプリケーションが多かったのじゃ。
For Beginner
インタフェースとレイヤ,パッケージ
• 変更単位や開発単位に適宜導入する
– レイヤ
• パソコン本体, ディスプレイ, キーボード...
– パッケージ(コンポーネント)
• パソコンの中のCPU, メモリ, HDD...
– 密結合なオブジェクト
• CPUやメモリの中の、ハンダ付けされた部品
•12
プレゼン
テーション
ビジネス
ロジック
データベース
アクセス
RDB
ブラウザ
表示の仕組み 永続化の仕組み業務の仕組み
それに、Interfaceを使うにはFactoryなど
自分で用意しないといけなかったからのぅ。
For Beginner
Spring – 利用前
• Serviceクラス(具象)
– Interfaceを利用するためにFactory Methodが別途必要
– トランザクション管理や例外、ログの処理が必要
•13
public class EmployeeServiceImpl
implements EmployeeService{
・・・
public List findAll() throws Exception {
if(Log.flag) { System.out.println(“***Start”); }
Connection conn = null;
・・・
EmployeeDao dao
= (EmployeeDao)Factory.create(KEY);
List employeeList = null;
try {
employeeList = dao.findAll(conn);
conn.commit();
} catch(Exception e) {
conn.rollback();
・・・
} finally {
conn.close();
・・・
}
if(Log.flag) { System.out.println(“***End”); }
return employeeList;
}
・・・ 今思えば、同じことを何度も
コーディングしておったのぅ。
For Beginner
余談:設計の原則
• 背景
– Interfaceの置かれている場所が、おかしいことが多々有
る
• 原則
– Interfaceは偉い方に置く
– Interfaceの置かれている場所で、部品(コンポーネント)
間の序列が分からなければいけない
14
電気製品で考えればわかるじゃろ?
電気製品から伸びているコードを差し込みに行く
「穴」がInterfaceじゃ。
電気製品は穴が空いている方が、偉いんじゃよ。
For Beginner
Spring 1
• Spring1.0
– DIxAOP コンテナの原点。XML Bean定義ファイル時
代の幕開け
• Spring1.1
– XML Bean 定義ファイルの簡略化
• Spring1.2
– さらなるXML Bean 定義ファイルの簡略化
• Other Products
– Spring Web Flow
2004
2005
15
いよいよ登場かな?
For Beginner
Spring - DIコンテナ
• DI(Dependency Injection)
– 依存性の注入
• インタフェースの導入が楽
•16
EmpServiceImpl
DIコンテナ
①生成
②セット
(依存性の注入)
③利用
EmpDaoImpl
EmpDao
For Beginner
AOPを使ってもっと部品化する
• AOPを使えば処理を後からクラスに追加できる
– 例:トレースログを追加する
•17
public class DaoImpl extends Dao{
・・・
public List find() {
List list = select();
return list;
}
}
>java ・・・
16:00:01 *Start* find() DaoImpl
16:00:02 *End* find() DaoImpl
17:02:12 *Start* find() DaoImpl
17:02:13 *End* find() DaoImpl
DaoImpl
find()
ServiceImpl
find()を呼ぶ
Dao
実行結果
For Beginner
AOPの仕組み例
• Proxyベース(かつ、定義ファイル利用)の場合、ProxyオブジェクトはAOP
のコンテナが自動生成する
•18
:Proxy
:Bean
Interface
:Client
Bean定義
ファイル
Adviceの呼び出し
自動生成
:Advice
:Spring
Pointcutの参照
処理の
依頼
処理の依頼
For Beginner
Spring - AOP
• Joinpointはメソッドの開始時、終了時
• Pointcutはワイルドカード風(!?)
• AdviceはAround、Before、After、After Returning、Throw
• 主な利用方法
– トランザクション管理
• トランザクション管理は難しいくプログラマに任せられない
– ログ管理
• メソッドの開始と終了のトレースログが正しく出力されない
– 誰もフォーマットを守らない
– トレースログを追加し忘れる
– 例外管理
• 処理の途中でExceptionが握りつぶされてしまう
– Exceptionを実行時例外にする
•19
For Beginner
Spring – 利用後
public class EmployeeServiceImpl
implements EmploeeService {
private EmployeeDao dao;
public List findAll() {
return dao.findAll();
}
・・・
public void setEmployeeDao(EmployeeDao dao) {
this.dao = dao;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- jdbc -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>com/mamezou/config/jdbc.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"><value>${jdbc.driverClassName}</value></property>
<property name="url"><value>${jdbc.url}</value></property>
<property name="username"><value>${jdbc.username}</value></property>
<property name="password"><value>${jdbc.password}</value></property>
</bean>
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource"><ref local="dataSource" /></property>
<property name="mappingResources">
<value>com/mamezou/person/dao/hibernate/person.hbm.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.c3p0.minPoolSize">1</prop>
<prop key="hibernate.c3p0.maxPoolSize">2</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<!-- Transaction Manager -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory"><ref local="sessionFactory" /></property>
</bean>
<!-- Business Interface -->
<bean id="personService"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager" /></property>
<property name="target"><ref local="personServiceTarget" /></property>
<property name="transactionAttributes">
<props>
<prop key="find*">PROPAGATION_REQUIRED, readOnly</prop>
<prop key="add*">PROPAGATION_REQUIRED, -AddPersonException</prop>
<prop key="remove*">PROPAGATION_REQUIRED, -RemovePersonException</prop>
</props>
</property>
</bean>
<!-- Business Object -->
<bean id="personServiceTarget" class="com.mamezou.person.business.PersonServiceImpl">
<property name="personDao"><ref local="personDao"/></property>
</bean>
<!-- Data Access Object -->
<bean id="personDao" class="com.mamezou.person.dao.hibernate.PersonDaoImpl">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
</beans>
コードはすっきり
XML Bean定義
(イメージです。拡大しないように)
20
スライド13より格段に減ってる!
For Beginner
Spring 2
• Spring2.0
– Bean 定義ファイルが DTD から XML スキーマ形式に変更(独
自スキーマが 使えるようになった)
– アノテーションの登場
– JPA やスクリプト言語のサポートと多機能化へ突入
• Spring2.5
– アノテーションの強化
• @Autowired
• Other Products
– Spring Security、Spring Batch
2006
2007
21
Since2006
Springの知名度が
少しずつ上がってきた頃じゃ。
For Beginner
Spring – 利用後
•22
public class EmployeeServiceImpl
implements EmploeeService {
@Autowired
private EmployeeDao dao;
@Transactional
public List findAll() {
return dao.findAll();
}
・・・
//public void setEmployeeDao(EmployeeDao dao) {
// this.dao = dao;
//}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${dataSource.driverClassName}"></property>
<property name="url" value="${dataSource.url}"></property>
<property name="username" value="${dataSource.username}"></property>
<property name="password" value="${dataSource.password}"></property>
</bean>
<!-- Default Connection -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation">
<value>/WEB-INF/hibernate.cfg.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.c3p0.minPoolSize">1</prop>
<prop key="hibernate.c3p0.maxPoolSize">2</prop>
<prop key="hibernate.show_sql">true</prop>
</props> </property>
<property name="schemaUpdate" value="false" />
</bean>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="baseService" abstract="true" lazy-init="true">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
<property name="dataSource" ref="dataSource"/>
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
コードはすっきり
XML Bean定義
(イメージです。拡大しないように)
スライド20よりスッキリだ!
For Beginner
DIコンテナ登場以降のWebアプリ
EIS層中間層Client層
RDBBrowser
Struts
JSF
POJO
Hibernate
iBATIS
DIxAOPコンテナ(オブジェクトの管理やトランザクション制御など)
Spring1~2Seasar2
プレゼンテーション層 ビジネス層 データアクセス層
23
この辺になると僕でも知ってる!
そう、Springの乳児期終盤には、Springか
Seaser2が主に使われていたんじゃ。
For Beginner
本日のハナシ
• 0. Spring誕生
– 2000~2003年 J2EE(EJB)の全盛期
• 1. Spring乳児期
– 2004~2008年 SpringがDIとAOPだった時代
• 2. Spring幼年期
– 2009〜2016年 All in OneからMicroserviceとCloudへ
24
Springの黄金期と
最近の話じゃ。
For Beginner
Spring 3
• Spring3.0
– アノテーションのさらなる強化
• Spring3.1
– JavaConfigの登場
– Java7, Spring Cache
– JavaEEの仕様(Bean Validationなど)の採用
– RESTfullフレームワークとしてのSpring MVC
• Spring3.2
– Hibernate4のフルサポート
• Other Products
– Spring Data、Spring Roo、STS(Spring Tool Suite)
•25
2009
2011
Springの黄金期じゃ
For Beginner
Spring3登場以降のWebアプリ
EIS層中間層Client層
RDBBrowser
Struts
Spring
MVC
POJO
Hibernate
MyBatis
DIxAOPコンテナ(オブジェクトの管理やトランザクション制御など)
SpringSeasar2
プレゼンテーション層 ビジネス層 データアクセス層
❌
❌
2016年9月に
開発が終了
2013年EOL
アノテーションが主流
26
DDDとか!?
そうそう、今のシステムはこんな感じ!
For Beginner
SoEとWebサービス
• ここまでのWebアプリは、企業システムで一般的なSoR(System of
Record )の話
• 近年はSoE(Systems of Engagement)なシステムも必要になってきた
– ClientはSoEでServerはSoRという合わせ技もあり
27
EIS層中間層Client層
PCだけじゃなく、
携帯端末など
アプリ アプリ
表示だけじゃなく
ビジネスロジックも
持つ
Webサービス
隣の部署がやってるやつだ!
ではちょっと、
Webサービスの歴史も
見てみることにするかの。
RDB
For Beginner
Webサービス!?
28
2003 2016
UDDI
サービス
レジストリ
サービス
利用者
サービス
提供者
WSDL
SOAP
SOA
(サービス指向アーキテクチャ)
RESTful
Webサービス
Microservice
Webサービス(初代)
②発見 ①登録
③取得
④利用
電話帳
サービスの
利用方法
初代のWebサービスは
ダメだったんですか?
For Beginner
Webサービス(初代)の失敗
• サービスレジストリは誰でも扱える電話帳
– 理想
• 誰でも電話帳にサービスを登録して、誰もがサービスを発見して
、利用できる
– 現実
• 電話帳は便所の落書き…
• 結果
– 企業内に閉じた電話帳にしよう
• WSDL不要
– SOAPだね、SOAだね、RESTでいいよね…
29
まぁ、ネット上に晒せば
そうなるわなぁ。
SpringのREST対応は
どうなっているんですか?
For Beginner
RESTful Webサービス
• Spring MVC
– @Controller
– @RestController
30
Response
Model
Controller
(@RestController)
携帯端末やSPA、
Microservice…
Request
Model
Controller
(@Controller)
View
Request
HTML
ブラウザ
なるほど!
For Beginner
RESTfulなController
31
@RestController
@RequestMapping("/sample")
public class SampleController {
@RequestMapping(method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public String welcome() {
return "index";
}
}
Spring4.3からは、RequestMappingの代わりに
GetMappingやPostMappingなどを使うのじゃよ。
For Beginner
Spring 4
• Spring4.0
– Java 8&Java EE 7に対応
– WebSocket、SockJS対応
– 非同期REST対応
• Other Products
– Spring Boot、Spring IO Platform
– Spring Cloud
2013
32
この会場で安く発売してるんだって
早く買いに行かなくちゃ!
For Beginner
今、Springが目指しているところ
• Cloud Native!
– Cloud
• Pivotal Cloud Foundary
– Microservice(s)
• Spring Boot
App App
App App
App
App
App
33
バラバラの部品がどこにあるのか、
どうやって分かるんだろう?
Microserviceという部品を
いくつも組合わせて、
1つのシステムを作るのじゃよ。
Cloud
Spring Boot
Microservice
CI/CD
For Beginner
サービス検出
• Service Discovery(Eurekaの場合)
– Client(Consumer)がAPI(Producer)へ直接アクセスするの
ではなく、Registryを経由する
– Microserviceの登録と発見/利用
34
Service
Service
Registory
Service
1.register 2.discover
3.connect
Productor
Eureka Client
ServiceService
Eureka Server
Consumer
Eureka Client
Webサービス(初代)に
そっくりだ!
EJB1のHome Interfaceにも
似ているじゃろ。
For Beginner
MonolithicからMicroservicesへ
•35
UI
DB
Monolithicから
Microservices
今まではMonolithicの中の部品化。
これからは、monolithicをバラして部品化。
ということじゃな。 これってアジャイルで開発かな?
For Beginner
アジャイル!?
36
1999 2015
デマルコ本
eXtream Programming
大企業でアジャイル採用
1848 1922
共産党宣言
共産主義大国誕生エンゲルス本
アジャイル宣言
賃金労働と資本
アジャイルは当初、プログラマが階級闘争
(vs官僚主義的管理者)に勝利し、
プログラマのユートピアを成立させるための運動として、
多くのプログラマに支持されたのじゃ。
TDDとか、その後のCI/CDなんてのはオマケじゃ。
アジャイルの生い立ちや経過は共産主義と大変似ている。
コミュニティとコミューンなどもな。
その後、どうなったかも似るだろうな。
高齢者が壊れ始めたのかな?
共産主義大国崩壊
大企業のアジャイル失敗
※階級闘争
資本家と労働者、管理者とプログラマなど、階級によって格差が存在する階級社会において、
階級と階級とのあいだで発生する格差を克服するためにおこなわれる闘争
For Beginner
Microservices成功の鍵(1)
• アジャイル
– 成功しない分野
• SI企業による大規模開発
– 官僚的
– 格差が政治的、管理的、賃金的に発生する
– 成功している分野
• ベンチャー的なプロダクト開発、プロトタイプ開発
– 自律的
– 比較的、格差が存在しない(存在しても無視できる)
• Microservices
– 原則
• 1つのサービスをプロダクトとして扱う
– 現実
• サービスを任されたチームが、プロダクトのように扱えるか否かが鍵(そ
もそも複数チームをまとめるのは大変)
37
格差があるところでアジャイルを実施しようとすれば、
必ず階級闘争が起きる。
Microserviceがアジャイルなら
階級闘争が起きない環境にしてから、開発すべきじゃ。
確かに!
For Beginner
Microservices成功の鍵(2)
• Microserviceは、EJB1でも、Webサービス(初代)でも
ない
– そのMicroserviceが、EJB1やWebサービス(初代)で代替可
能なら、それはMicroserviceにしなくても良いモノを
Microserviceにしている可能性が高い
38
EJB1やWebサービス(初代)で代替可能なら、それに似た技術の利用を考えるべきじゃ。
Microserviceはインフラやチーム管理含め、複雑であるから、
手を出さないで済むのであれば、それにこしたことはない。
For Beginner
本日のハナシ
• 0. Spring誕生
– 2000~2003年 J2EE(EJB)の全盛期
• 1. Spring乳児期
– 2004~2008年 SpringがDIとAOPだった時代
• 2. Spring幼年期
– 2009〜2015年 All in OneからMicroserviceとCloudへ
• おまけ:幼年期の終わりに
39
For Beginner
JavaEEは復活するの?
• 再び勢力を伸ばしつつある(ようだ)
– 標準らしいが、不安定なIT業界で標準であることのメリットが全くわから
ない
• EJB1は標準で得だったのか?
– 真似ばかりで機能は少ないし、進化が遅い
– ハコモノを購入しないといけない。結果、標準と謳いながらベンダ固有
の機能を勉強しないといけない
– だから、Springと比較して、優秀なエンジニアが揃わない
• JavaEEでやると決めたプロジェクトは、失敗の匂いがプンプン
するのは気のせいか?
40
今更、JSFを使うなんてありえんじゃろ。
SIベンダがJavaEEを使うと言い出したら、
ハコモノを売りつけられるかもしれないので
ユーザは注意した方がいいぞ。
For Beginner
Spring Bootって使えるの?
• 超楽チンで便利
• ただし、Springの基本的なところも理解せずに使うと、
問題発生時にハマる
• Microserviceのようなモノを作るのでなければ、地道に
普通に作る方が良い
41
ワシのような高齢者は
Spring Bootを使い始めるとボケてしまう…
For Beginner
Microserviceってどうなの?
• 今までどおりのエンタープライズなシステム(SoR)で
は、不適当なケースが多い
• エンタープライズのSoE的なところでは、利用できる
可能性が高い(成功の鍵は前述どおり)
• インフラも含めて考える必要があるので、今までア
プリケーションだけを考えていたエンジニアはステッ
プアップが必要
42
なんでも適材適所じゃよ…
For Beginner
Springはどうなるの?
• Spring 5.0
– M1が2016/7にリリース
– 正式リリースは、2017年4Qを予定
– Java8のみ対応、Reactor
• 今後
– SpringはCloud Nativeに舵をきっているが、エンタープ
ライズ系(SoR)はその辺は無視して、今まで通り
2017
2020
43
ここまでお付合いありがとうよ
For Beginner
44
ライセンスについて
• JSUGマスコットアイコン(本スライド左下)が残されている場合に限り、本作品(またそれを元にした派生
作品)の複製・頒布・表示・上演を認めます。
• 非商用目的に限り、本作品(またそれを元にした派生作品)の複製・頒布・表示・上演を認めます。
• 本作品のライセンスを遵守する限り、派生作品を頒布することを許可します。

More Related Content

What's hot

Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)
Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)
Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)Takahiro Fujii
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクションTakahiro Okumura
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 
試験にでるSpring
試験にでるSpring試験にでるSpring
試験にでるSpring土岐 孝平
 
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスJsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスYoichi KIKUCHI
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾Ryutaro YOSHIBA
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント土岐 孝平
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo!デベロッパーネットワーク
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)Ikuru Kanuma
 
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)Yuuki Fukuda
 
最近のSpringFramework2013 #jjug #jsug #SpringFramework
最近のSpringFramework2013 #jjug #jsug #SpringFramework最近のSpringFramework2013 #jjug #jsug #SpringFramework
最近のSpringFramework2013 #jjug #jsug #SpringFrameworkToshiaki Maki
 
スキトラ Spring + mybatis
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis小川 昌吾
 
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
 
Behind-the-Scenes and Goals of LINE Summer Internship Program
Behind-the-Scenes and Goals of LINE Summer Internship ProgramBehind-the-Scenes and Goals of LINE Summer Internship Program
Behind-the-Scenes and Goals of LINE Summer Internship ProgramLINE Corporation
 
Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解都元ダイスケ Miyamoto
 
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12学 松崎
 
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)sogdice
 
20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_public20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_publicYoshiharu Hashimoto
 
Jsugプレゼン資料new
Jsugプレゼン資料newJsugプレゼン資料new
Jsugプレゼン資料newWataru Kakizoe
 

What's hot (20)

Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)
Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)
Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
試験にでるSpring
試験にでるSpring試験にでるSpring
試験にでるSpring
 
Yapc fukuoka crust
Yapc fukuoka crustYapc fukuoka crust
Yapc fukuoka crust
 
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスJsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
 
最近のSpringFramework2013 #jjug #jsug #SpringFramework
最近のSpringFramework2013 #jjug #jsug #SpringFramework最近のSpringFramework2013 #jjug #jsug #SpringFramework
最近のSpringFramework2013 #jjug #jsug #SpringFramework
 
スキトラ Spring + mybatis
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis
 
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
 
Behind-the-Scenes and Goals of LINE Summer Internship Program
Behind-the-Scenes and Goals of LINE Summer Internship ProgramBehind-the-Scenes and Goals of LINE Summer Internship Program
Behind-the-Scenes and Goals of LINE Summer Internship Program
 
Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解
 
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
 
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
 
20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_public20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_public
 
Jsugプレゼン資料new
Jsugプレゼン資料newJsugプレゼン資料new
Jsugプレゼン資料new
 

Viewers also liked

アメブロの大規模システム刷新と それを支えるSpring
アメブロの大規模システム刷新と それを支えるSpringアメブロの大規模システム刷新と それを支えるSpring
アメブロの大規模システム刷新と それを支えるSpringTakuya Hattori
 
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...
Data Microservices with Spring Cloud Stream, Task,  and Data Flow #jsug #spri...Data Microservices with Spring Cloud Stream, Task,  and Data Flow #jsug #spri...
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...Toshiaki Maki
 
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Yuichi Hasegawa
 
Cloud Foundry x Wagby
Cloud Foundry x WagbyCloud Foundry x Wagby
Cloud Foundry x WagbyYoshinori Nie
 
Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Takuma Watabiki
 
Distributed Tracing Velocity2016
Distributed Tracing Velocity2016Distributed Tracing Velocity2016
Distributed Tracing Velocity2016Reshmi Krishna
 
Distributed tracing - get a grasp on your production
Distributed tracing - get a grasp on your productionDistributed tracing - get a grasp on your production
Distributed tracing - get a grasp on your productionnklmish
 
Spring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシングSpring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシングRakuten Group, Inc.
 
Internetトラフィックエンジニアリングの現実
Internetトラフィックエンジニアリングの現実Internetトラフィックエンジニアリングの現実
Internetトラフィックエンジニアリングの現実J-Stream Inc.
 
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017tty fky
 
高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!masakazu matsubara
 
Javaアプリケーションの モダナイゼーションアプローチ
Javaアプリケーションの モダナイゼーションアプローチJavaアプリケーションの モダナイゼーションアプローチ
Javaアプリケーションの モダナイゼーションアプローチCData Software Japan
 
Another compilation method in java - AOT (Ahead of Time) compilation
Another compilation method in java - AOT (Ahead of Time) compilationAnother compilation method in java - AOT (Ahead of Time) compilation
Another compilation method in java - AOT (Ahead of Time) compilationLogico
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 Hiroshi Ito
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にTaku Miyakawa
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugMasatoshi Tada
 

Viewers also liked (16)

アメブロの大規模システム刷新と それを支えるSpring
アメブロの大規模システム刷新と それを支えるSpringアメブロの大規模システム刷新と それを支えるSpring
アメブロの大規模システム刷新と それを支えるSpring
 
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...
Data Microservices with Spring Cloud Stream, Task,  and Data Flow #jsug #spri...Data Microservices with Spring Cloud Stream, Task,  and Data Flow #jsug #spri...
Data Microservices with Spring Cloud Stream, Task, and Data Flow #jsug #spri...
 
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
 
Cloud Foundry x Wagby
Cloud Foundry x WagbyCloud Foundry x Wagby
Cloud Foundry x Wagby
 
Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所
 
Distributed Tracing Velocity2016
Distributed Tracing Velocity2016Distributed Tracing Velocity2016
Distributed Tracing Velocity2016
 
Distributed tracing - get a grasp on your production
Distributed tracing - get a grasp on your productionDistributed tracing - get a grasp on your production
Distributed tracing - get a grasp on your production
 
Spring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシングSpring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシング
 
Internetトラフィックエンジニアリングの現実
Internetトラフィックエンジニアリングの現実Internetトラフィックエンジニアリングの現実
Internetトラフィックエンジニアリングの現実
 
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
Business Process Modeling in Goldman Sachs @ JJUG CCC Fall 2017
 
高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!
 
Javaアプリケーションの モダナイゼーションアプローチ
Javaアプリケーションの モダナイゼーションアプローチJavaアプリケーションの モダナイゼーションアプローチ
Javaアプリケーションの モダナイゼーションアプローチ
 
Another compilation method in java - AOT (Ahead of Time) compilation
Another compilation method in java - AOT (Ahead of Time) compilationAnother compilation method in java - AOT (Ahead of Time) compilation
Another compilation method in java - AOT (Ahead of Time) compilation
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 

Similar to Spring Day 2016 springの現在過去未来

[Jjug]java small object programming
[Jjug]java small object programming[Jjug]java small object programming
[Jjug]java small object programmingYuichi Hasegawa
 
dots. 7/7 DSWBハンズオン資料
dots. 7/7 DSWBハンズオン資料dots. 7/7 DSWBハンズオン資料
dots. 7/7 DSWBハンズオン資料s. kaijima
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようTakayuki Shimizukawa
 
Pythonでパケット解析
Pythonでパケット解析Pythonでパケット解析
Pythonでパケット解析euphoricwavism
 
スクラムプロジェクト準備(公開用) No.31
スクラムプロジェクト準備(公開用) No.31スクラムプロジェクト準備(公開用) No.31
スクラムプロジェクト準備(公開用) No.31Sukusuku Scrum
 
モードレスな物理インターフェイスの実装(オフィス編)
モードレスな物理インターフェイスの実装(オフィス編)モードレスな物理インターフェイスの実装(オフィス編)
モードレスな物理インターフェイスの実装(オフィス編)Hitomi Yamagishi
 
人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2Ryohei Kamiya
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplibShinya Okano
 
人と向き合うプロトタイピング
人と向き合うプロトタイピング人と向き合うプロトタイピング
人と向き合うプロトタイピングwariemon
 
シリコンバレー 面接体験
シリコンバレー 面接体験シリコンバレー 面接体験
シリコンバレー 面接体験paiza
 
Rodから聞いたことを全部話すぜ
Rodから聞いたことを全部話すぜRodから聞いたことを全部話すぜ
Rodから聞いたことを全部話すぜHiroki Kondo
 
IoTに活用!センサの基礎セミナー
IoTに活用!センサの基礎セミナーIoTに活用!センサの基礎セミナー
IoTに活用!センサの基礎セミナーshimane-itoc
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていくRyo Mitoma
 
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門Tatsuya Tojima
 
自動化を支えるCI/CDパイプライン
自動化を支えるCI/CDパイプライン自動化を支えるCI/CDパイプライン
自動化を支えるCI/CDパイプラインJunichiMitsunaga
 
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementationビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
ビジネスロジック実装進化論 - An Evolution of Business Logic ImplementationTadayoshi Sato
 
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?Makoto SAKAI
 
Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Ken SASAKI
 

Similar to Spring Day 2016 springの現在過去未来 (20)

[Jjug]java small object programming
[Jjug]java small object programming[Jjug]java small object programming
[Jjug]java small object programming
 
DL-D_ver1.pdf
DL-D_ver1.pdfDL-D_ver1.pdf
DL-D_ver1.pdf
 
dots. 7/7 DSWBハンズオン資料
dots. 7/7 DSWBハンズオン資料dots. 7/7 DSWBハンズオン資料
dots. 7/7 DSWBハンズオン資料
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
Pythonでパケット解析
Pythonでパケット解析Pythonでパケット解析
Pythonでパケット解析
 
スクラムプロジェクト準備(公開用) No.31
スクラムプロジェクト準備(公開用) No.31スクラムプロジェクト準備(公開用) No.31
スクラムプロジェクト準備(公開用) No.31
 
モードレスな物理インターフェイスの実装(オフィス編)
モードレスな物理インターフェイスの実装(オフィス編)モードレスな物理インターフェイスの実装(オフィス編)
モードレスな物理インターフェイスの実装(オフィス編)
 
人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
 
人と向き合うプロトタイピング
人と向き合うプロトタイピング人と向き合うプロトタイピング
人と向き合うプロトタイピング
 
シリコンバレー 面接体験
シリコンバレー 面接体験シリコンバレー 面接体験
シリコンバレー 面接体験
 
Pythonでpdfをいじってみる
PythonでpdfをいじってみるPythonでpdfをいじってみる
Pythonでpdfをいじってみる
 
Rodから聞いたことを全部話すぜ
Rodから聞いたことを全部話すぜRodから聞いたことを全部話すぜ
Rodから聞いたことを全部話すぜ
 
IoTに活用!センサの基礎セミナー
IoTに活用!センサの基礎セミナーIoTに活用!センサの基礎セミナー
IoTに活用!センサの基礎セミナー
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
 
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門
 
自動化を支えるCI/CDパイプライン
自動化を支えるCI/CDパイプライン自動化を支えるCI/CDパイプライン
自動化を支えるCI/CDパイプライン
 
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementationビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
 
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?
 
Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01
 

More from Yuichi Hasegawa

Spring 5でSpring Testのここが変わる_公開版
Spring 5でSpring Testのここが変わる_公開版Spring 5でSpring Testのここが変わる_公開版
Spring 5でSpring Testのここが変わる_公開版Yuichi Hasegawa
 
thymeleafさいしょの一歩
thymeleafさいしょの一歩thymeleafさいしょの一歩
thymeleafさいしょの一歩Yuichi Hasegawa
 
マイクロサービス入門(Spring fest 2017)
マイクロサービス入門(Spring fest 2017)マイクロサービス入門(Spring fest 2017)
マイクロサービス入門(Spring fest 2017)Yuichi Hasegawa
 
20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つYuichi Hasegawa
 
こどもの絵本 ヒトラーとナチ
 こどもの絵本 ヒトラーとナチ こどもの絵本 ヒトラーとナチ
こどもの絵本 ヒトラーとナチYuichi Hasegawa
 
Spring4-DevLove発表資料
Spring4-DevLove発表資料Spring4-DevLove発表資料
Spring4-DevLove発表資料Yuichi Hasegawa
 
[豆ナイト]Java small object programming
[豆ナイト]Java small object programming[豆ナイト]Java small object programming
[豆ナイト]Java small object programmingYuichi Hasegawa
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッションYuichi Hasegawa
 
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCSpring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCYuichi Hasegawa
 

More from Yuichi Hasegawa (14)

Spring 18年の歴史
Spring 18年の歴史Spring 18年の歴史
Spring 18年の歴史
 
Spring 5でSpring Testのここが変わる_公開版
Spring 5でSpring Testのここが変わる_公開版Spring 5でSpring Testのここが変わる_公開版
Spring 5でSpring Testのここが変わる_公開版
 
Enterprise Microservice
Enterprise MicroserviceEnterprise Microservice
Enterprise Microservice
 
thymeleafさいしょの一歩
thymeleafさいしょの一歩thymeleafさいしょの一歩
thymeleafさいしょの一歩
 
マイクロサービス入門(Spring fest 2017)
マイクロサービス入門(Spring fest 2017)マイクロサービス入門(Spring fest 2017)
マイクロサービス入門(Spring fest 2017)
 
20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ
 
こどもの絵本 ヒトラーとナチ
 こどもの絵本 ヒトラーとナチ こどもの絵本 ヒトラーとナチ
こどもの絵本 ヒトラーとナチ
 
Jsug 20160422 slides
Jsug 20160422 slidesJsug 20160422 slides
Jsug 20160422 slides
 
Spring4-DevLove発表資料
Spring4-DevLove発表資料Spring4-DevLove発表資料
Spring4-DevLove発表資料
 
[豆ナイト]Java small object programming
[豆ナイト]Java small object programming[豆ナイト]Java small object programming
[豆ナイト]Java small object programming
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
Spring3.1概要x di
Spring3.1概要x diSpring3.1概要x di
Spring3.1概要x di
 
Spring3.1 aop-mvc
Spring3.1 aop-mvcSpring3.1 aop-mvc
Spring3.1 aop-mvc
 
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCSpring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVC
 

Recently uploaded

My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」inspirehighstaff03
 
KARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhr
KARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhrKARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhr
KARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhrRodolfFernandez1
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」inspirehighstaff03
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」inspirehighstaff03
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slidessusere0a682
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」inspirehighstaff03
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfinspirehighstaff03
 
International Politics I - Lecture 1
International Politics I - Lecture 1International Politics I - Lecture 1
International Politics I - Lecture 1Toru Oga
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」inspirehighstaff03
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」inspirehighstaff03
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」inspirehighstaff03
 
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfoganekyokoi
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」inspirehighstaff03
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」inspirehighstaff03
 
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイントshu1108hina1020
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」inspirehighstaff03
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」inspirehighstaff03
 
What I did before opening my business..pdf
What I did before opening my business..pdfWhat I did before opening my business..pdf
What I did before opening my business..pdfoganekyokoi
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」inspirehighstaff03
 

Recently uploaded (20)

My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
 
KARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhr
KARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhrKARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhr
KARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhr
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
 
International Politics I - Lecture 1
International Politics I - Lecture 1International Politics I - Lecture 1
International Politics I - Lecture 1
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」
 
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdf
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」
 
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」
 
What I did before opening my business..pdf
What I did before opening my business..pdfWhat I did before opening my business..pdf
What I did before opening my business..pdf
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
 

Spring Day 2016 springの現在過去未来

  • 2. For Beginner 2 自己紹介 • 長谷川 裕一 – 日本Springユーザ会会長、Starlight&Storm 代表 • 1986年、イリノイ州警察指紋システムのアセンブリ言語プログラマ からスタート、色々あって、CORBAからEJB、Webサービスを経て Springへ • 国内で最も初期のXPコンサルタント • 現在はオブジェクト指向を中心に、コンサルティング(IT戦略、技 術、プロセスetc)や教育で活動 • 書籍 – プログラムの育てかた(ソフトバンク),Spring入門,Spring2.0入門, Spring3入門,間違いだらけのソフトウェア・アーキテクチャ(技術評論 社) • その他 – SQuBOK策定メンバ, チェンジビジョン・コンサルティング・パートナー
  • 3. For Beginner 本日のハナシ • 0. Spring誕生 – 2000~2003年 J2EE(EJB)の全盛期 • 1. Spring乳児期 – 2004~2008年 SpringがDIとAOPだった時代 • 2. Spring幼年期 – 2009〜2016年 Microservice、Cloudへ 3 高齢者の昔話なので 期待しないで聞いておくれ。
  • 4. For Beginner 本日のハナシ • 0. Spring誕生 – 2000~2003年 J2EE(EJB)の全盛期 • 1. Spring乳児期 – 2004~2008年 SpringがDIとAOPだった時代 • 2. Spring幼年期 – 2009〜2015年 Microservice、Cloudへ 4 入社前の話だ…
  • 6. For Beginner EJB1-分散メカニズム • 2種類のEnterprise Bean(2.0からMDB追加) – SessionBean – EntityBean EJB Contaiter Instance Pooling :C lient C ode :Hom e Interface :EJB O bject :Enterprise Bean :Hom e O bject :Rem ote Interface 1:新しいEJBO bjectの生成依頼 3:EJBO bjectの参照を返す 4:処理の依頼 5:処理をデレゲート 2:EJB O bjectを生成 :Enterprise Bean assign 6 Remoteアクセスしか なかったんじゃよ。
  • 7. For Beginner 10年早くて、間違って使われたEJB • 時代はローカルなWebアプリケーション – 分散オブジェクトは過剰、ローカルアクセスだけで十分 – 単なるトランザクションスクリプトとORMが欲しい – SQLは自分で書いた方がいい(CMPは使わない) – コンテナがないとテストできない – 再利用(ポータビリティ)の仕組みを考えたけど、再利用で きない •7 ポータビリティを 考えたんですか? そうそう そういう団体がありましたねぇ EJBは分散を捨てたんじゃ。 そしてSpringの真似を始めたのじゃ。 そのまま分散で進んでいたら今頃…
  • 8. For Beginner 2000年頃のWebアプリ EIS層中間層Client層 RDBBrowser JavaBeans 自家製の フレームワーク自家製の フレームワーク プレゼンテーション層 ビジネス層 データアクセス層 Session Bean Entity Bean 8 いわゆる普通の業務アプリじゃよ。 EJBはサッカーチームのメンバに、 空きがあるからと入れられた キックボクサーみたいなもので、 EJBが可哀想じゃったよ…
  • 9. For Beginner Spring誕生 • 実践J2EE – 重厚なJava EE(EJB)の否定 – 軽量なコンテナ Spring0.9 2003 9 なんのポーズですか?
  • 10. For Beginner 本日のハナシ • 0. Spring誕生 – 2000~2003年 J2EE(EJB)の全盛期 • 1. Spring乳児期 – 2004~2008年 SpringがDIとAOPだった時代 • 2. Spring幼年期 – 2009〜2015年 All in OneからMicroserviceとCloudへ 10
  • 11. For Beginner EJBのInterfaceで目覚めた • Interfaceってそうやって使うのか! – Interfaceは部品間をつなぐ • ソフトウェアを電気製品みたいに部品化したい – 部品化 = インタフェース接続 •11 それまでは、部品化 って考えてなかったんですか? 時代はまだまだ、 モノリシックなアプリケーションが多かったのじゃ。
  • 12. For Beginner インタフェースとレイヤ,パッケージ • 変更単位や開発単位に適宜導入する – レイヤ • パソコン本体, ディスプレイ, キーボード... – パッケージ(コンポーネント) • パソコンの中のCPU, メモリ, HDD... – 密結合なオブジェクト • CPUやメモリの中の、ハンダ付けされた部品 •12 プレゼン テーション ビジネス ロジック データベース アクセス RDB ブラウザ 表示の仕組み 永続化の仕組み業務の仕組み それに、Interfaceを使うにはFactoryなど 自分で用意しないといけなかったからのぅ。
  • 13. For Beginner Spring – 利用前 • Serviceクラス(具象) – Interfaceを利用するためにFactory Methodが別途必要 – トランザクション管理や例外、ログの処理が必要 •13 public class EmployeeServiceImpl implements EmployeeService{ ・・・ public List findAll() throws Exception { if(Log.flag) { System.out.println(“***Start”); } Connection conn = null; ・・・ EmployeeDao dao = (EmployeeDao)Factory.create(KEY); List employeeList = null; try { employeeList = dao.findAll(conn); conn.commit(); } catch(Exception e) { conn.rollback(); ・・・ } finally { conn.close(); ・・・ } if(Log.flag) { System.out.println(“***End”); } return employeeList; } ・・・ 今思えば、同じことを何度も コーディングしておったのぅ。
  • 14. For Beginner 余談:設計の原則 • 背景 – Interfaceの置かれている場所が、おかしいことが多々有 る • 原則 – Interfaceは偉い方に置く – Interfaceの置かれている場所で、部品(コンポーネント) 間の序列が分からなければいけない 14 電気製品で考えればわかるじゃろ? 電気製品から伸びているコードを差し込みに行く 「穴」がInterfaceじゃ。 電気製品は穴が空いている方が、偉いんじゃよ。
  • 15. For Beginner Spring 1 • Spring1.0 – DIxAOP コンテナの原点。XML Bean定義ファイル時 代の幕開け • Spring1.1 – XML Bean 定義ファイルの簡略化 • Spring1.2 – さらなるXML Bean 定義ファイルの簡略化 • Other Products – Spring Web Flow 2004 2005 15 いよいよ登場かな?
  • 16. For Beginner Spring - DIコンテナ • DI(Dependency Injection) – 依存性の注入 • インタフェースの導入が楽 •16 EmpServiceImpl DIコンテナ ①生成 ②セット (依存性の注入) ③利用 EmpDaoImpl EmpDao
  • 17. For Beginner AOPを使ってもっと部品化する • AOPを使えば処理を後からクラスに追加できる – 例:トレースログを追加する •17 public class DaoImpl extends Dao{ ・・・ public List find() { List list = select(); return list; } } >java ・・・ 16:00:01 *Start* find() DaoImpl 16:00:02 *End* find() DaoImpl 17:02:12 *Start* find() DaoImpl 17:02:13 *End* find() DaoImpl DaoImpl find() ServiceImpl find()を呼ぶ Dao 実行結果
  • 19. For Beginner Spring - AOP • Joinpointはメソッドの開始時、終了時 • Pointcutはワイルドカード風(!?) • AdviceはAround、Before、After、After Returning、Throw • 主な利用方法 – トランザクション管理 • トランザクション管理は難しいくプログラマに任せられない – ログ管理 • メソッドの開始と終了のトレースログが正しく出力されない – 誰もフォーマットを守らない – トレースログを追加し忘れる – 例外管理 • 処理の途中でExceptionが握りつぶされてしまう – Exceptionを実行時例外にする •19
  • 20. For Beginner Spring – 利用後 public class EmployeeServiceImpl implements EmploeeService { private EmployeeDao dao; public List findAll() { return dao.findAll(); } ・・・ public void setEmployeeDao(EmployeeDao dao) { this.dao = dao; } } <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- jdbc --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>com/mamezou/config/jdbc.properties</value> </list> </property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"><value>${jdbc.driverClassName}</value></property> <property name="url"><value>${jdbc.url}</value></property> <property name="username"><value>${jdbc.username}</value></property> <property name="password"><value>${jdbc.password}</value></property> </bean> <!-- Hibernate SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource"><ref local="dataSource" /></property> <property name="mappingResources"> <value>com/mamezou/person/dao/hibernate/person.hbm.xml</value> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">net.sf.hibernate.dialect.HSQLDialect</prop> <prop key="hibernate.c3p0.minPoolSize">1</prop> <prop key="hibernate.c3p0.maxPoolSize">2</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <!-- Transaction Manager --> <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"> <property name="sessionFactory"><ref local="sessionFactory" /></property> </bean> <!-- Business Interface --> <bean id="personService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"><ref local="transactionManager" /></property> <property name="target"><ref local="personServiceTarget" /></property> <property name="transactionAttributes"> <props> <prop key="find*">PROPAGATION_REQUIRED, readOnly</prop> <prop key="add*">PROPAGATION_REQUIRED, -AddPersonException</prop> <prop key="remove*">PROPAGATION_REQUIRED, -RemovePersonException</prop> </props> </property> </bean> <!-- Business Object --> <bean id="personServiceTarget" class="com.mamezou.person.business.PersonServiceImpl"> <property name="personDao"><ref local="personDao"/></property> </bean> <!-- Data Access Object --> <bean id="personDao" class="com.mamezou.person.dao.hibernate.PersonDaoImpl"> <property name="sessionFactory"><ref local="sessionFactory"/></property> </bean> </beans> コードはすっきり XML Bean定義 (イメージです。拡大しないように) 20 スライド13より格段に減ってる!
  • 21. For Beginner Spring 2 • Spring2.0 – Bean 定義ファイルが DTD から XML スキーマ形式に変更(独 自スキーマが 使えるようになった) – アノテーションの登場 – JPA やスクリプト言語のサポートと多機能化へ突入 • Spring2.5 – アノテーションの強化 • @Autowired • Other Products – Spring Security、Spring Batch 2006 2007 21 Since2006 Springの知名度が 少しずつ上がってきた頃じゃ。
  • 22. For Beginner Spring – 利用後 •22 public class EmployeeServiceImpl implements EmploeeService { @Autowired private EmployeeDao dao; @Transactional public List findAll() { return dao.findAll(); } ・・・ //public void setEmployeeDao(EmployeeDao dao) { // this.dao = dao; //} } <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties"/> <property name="ignoreUnresolvablePlaceholders" value="true"/> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${dataSource.driverClassName}"></property> <property name="url" value="${dataSource.url}"></property> <property name="username" value="${dataSource.username}"></property> <property name="password" value="${dataSource.password}"></property> </bean> <!-- Default Connection --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation"> <value>/WEB-INF/hibernate.cfg.xml</value> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">net.sf.hibernate.dialect.HSQLDialect</prop> <prop key="hibernate.c3p0.minPoolSize">1</prop> <prop key="hibernate.c3p0.maxPoolSize">2</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> <property name="schemaUpdate" value="false" /> </bean> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:annotation-driven transaction-manager="txManager"/> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> <bean id="baseService" abstract="true" lazy-init="true"> <property name="jdbcTemplate" ref="jdbcTemplate"/> <property name="dataSource" ref="dataSource"/> <property name="sessionFactory" ref="sessionFactory"/> </bean> </beans> コードはすっきり XML Bean定義 (イメージです。拡大しないように) スライド20よりスッキリだ!
  • 24. For Beginner 本日のハナシ • 0. Spring誕生 – 2000~2003年 J2EE(EJB)の全盛期 • 1. Spring乳児期 – 2004~2008年 SpringがDIとAOPだった時代 • 2. Spring幼年期 – 2009〜2016年 All in OneからMicroserviceとCloudへ 24 Springの黄金期と 最近の話じゃ。
  • 25. For Beginner Spring 3 • Spring3.0 – アノテーションのさらなる強化 • Spring3.1 – JavaConfigの登場 – Java7, Spring Cache – JavaEEの仕様(Bean Validationなど)の採用 – RESTfullフレームワークとしてのSpring MVC • Spring3.2 – Hibernate4のフルサポート • Other Products – Spring Data、Spring Roo、STS(Spring Tool Suite) •25 2009 2011 Springの黄金期じゃ
  • 27. For Beginner SoEとWebサービス • ここまでのWebアプリは、企業システムで一般的なSoR(System of Record )の話 • 近年はSoE(Systems of Engagement)なシステムも必要になってきた – ClientはSoEでServerはSoRという合わせ技もあり 27 EIS層中間層Client層 PCだけじゃなく、 携帯端末など アプリ アプリ 表示だけじゃなく ビジネスロジックも 持つ Webサービス 隣の部署がやってるやつだ! ではちょっと、 Webサービスの歴史も 見てみることにするかの。 RDB
  • 29. For Beginner Webサービス(初代)の失敗 • サービスレジストリは誰でも扱える電話帳 – 理想 • 誰でも電話帳にサービスを登録して、誰もがサービスを発見して 、利用できる – 現実 • 電話帳は便所の落書き… • 結果 – 企業内に閉じた電話帳にしよう • WSDL不要 – SOAPだね、SOAだね、RESTでいいよね… 29 まぁ、ネット上に晒せば そうなるわなぁ。 SpringのREST対応は どうなっているんですか?
  • 30. For Beginner RESTful Webサービス • Spring MVC – @Controller – @RestController 30 Response Model Controller (@RestController) 携帯端末やSPA、 Microservice… Request Model Controller (@Controller) View Request HTML ブラウザ なるほど!
  • 31. For Beginner RESTfulなController 31 @RestController @RequestMapping("/sample") public class SampleController { @RequestMapping(method = RequestMethod.GET) @ResponseStatus(HttpStatus.OK) public String welcome() { return "index"; } } Spring4.3からは、RequestMappingの代わりに GetMappingやPostMappingなどを使うのじゃよ。
  • 32. For Beginner Spring 4 • Spring4.0 – Java 8&Java EE 7に対応 – WebSocket、SockJS対応 – 非同期REST対応 • Other Products – Spring Boot、Spring IO Platform – Spring Cloud 2013 32 この会場で安く発売してるんだって 早く買いに行かなくちゃ!
  • 33. For Beginner 今、Springが目指しているところ • Cloud Native! – Cloud • Pivotal Cloud Foundary – Microservice(s) • Spring Boot App App App App App App App 33 バラバラの部品がどこにあるのか、 どうやって分かるんだろう? Microserviceという部品を いくつも組合わせて、 1つのシステムを作るのじゃよ。 Cloud Spring Boot Microservice CI/CD
  • 34. For Beginner サービス検出 • Service Discovery(Eurekaの場合) – Client(Consumer)がAPI(Producer)へ直接アクセスするの ではなく、Registryを経由する – Microserviceの登録と発見/利用 34 Service Service Registory Service 1.register 2.discover 3.connect Productor Eureka Client ServiceService Eureka Server Consumer Eureka Client Webサービス(初代)に そっくりだ! EJB1のHome Interfaceにも 似ているじゃろ。
  • 36. For Beginner アジャイル!? 36 1999 2015 デマルコ本 eXtream Programming 大企業でアジャイル採用 1848 1922 共産党宣言 共産主義大国誕生エンゲルス本 アジャイル宣言 賃金労働と資本 アジャイルは当初、プログラマが階級闘争 (vs官僚主義的管理者)に勝利し、 プログラマのユートピアを成立させるための運動として、 多くのプログラマに支持されたのじゃ。 TDDとか、その後のCI/CDなんてのはオマケじゃ。 アジャイルの生い立ちや経過は共産主義と大変似ている。 コミュニティとコミューンなどもな。 その後、どうなったかも似るだろうな。 高齢者が壊れ始めたのかな? 共産主義大国崩壊 大企業のアジャイル失敗 ※階級闘争 資本家と労働者、管理者とプログラマなど、階級によって格差が存在する階級社会において、 階級と階級とのあいだで発生する格差を克服するためにおこなわれる闘争
  • 37. For Beginner Microservices成功の鍵(1) • アジャイル – 成功しない分野 • SI企業による大規模開発 – 官僚的 – 格差が政治的、管理的、賃金的に発生する – 成功している分野 • ベンチャー的なプロダクト開発、プロトタイプ開発 – 自律的 – 比較的、格差が存在しない(存在しても無視できる) • Microservices – 原則 • 1つのサービスをプロダクトとして扱う – 現実 • サービスを任されたチームが、プロダクトのように扱えるか否かが鍵(そ もそも複数チームをまとめるのは大変) 37 格差があるところでアジャイルを実施しようとすれば、 必ず階級闘争が起きる。 Microserviceがアジャイルなら 階級闘争が起きない環境にしてから、開発すべきじゃ。 確かに!
  • 38. For Beginner Microservices成功の鍵(2) • Microserviceは、EJB1でも、Webサービス(初代)でも ない – そのMicroserviceが、EJB1やWebサービス(初代)で代替可 能なら、それはMicroserviceにしなくても良いモノを Microserviceにしている可能性が高い 38 EJB1やWebサービス(初代)で代替可能なら、それに似た技術の利用を考えるべきじゃ。 Microserviceはインフラやチーム管理含め、複雑であるから、 手を出さないで済むのであれば、それにこしたことはない。
  • 39. For Beginner 本日のハナシ • 0. Spring誕生 – 2000~2003年 J2EE(EJB)の全盛期 • 1. Spring乳児期 – 2004~2008年 SpringがDIとAOPだった時代 • 2. Spring幼年期 – 2009〜2015年 All in OneからMicroserviceとCloudへ • おまけ:幼年期の終わりに 39
  • 40. For Beginner JavaEEは復活するの? • 再び勢力を伸ばしつつある(ようだ) – 標準らしいが、不安定なIT業界で標準であることのメリットが全くわから ない • EJB1は標準で得だったのか? – 真似ばかりで機能は少ないし、進化が遅い – ハコモノを購入しないといけない。結果、標準と謳いながらベンダ固有 の機能を勉強しないといけない – だから、Springと比較して、優秀なエンジニアが揃わない • JavaEEでやると決めたプロジェクトは、失敗の匂いがプンプン するのは気のせいか? 40 今更、JSFを使うなんてありえんじゃろ。 SIベンダがJavaEEを使うと言い出したら、 ハコモノを売りつけられるかもしれないので ユーザは注意した方がいいぞ。
  • 41. For Beginner Spring Bootって使えるの? • 超楽チンで便利 • ただし、Springの基本的なところも理解せずに使うと、 問題発生時にハマる • Microserviceのようなモノを作るのでなければ、地道に 普通に作る方が良い 41 ワシのような高齢者は Spring Bootを使い始めるとボケてしまう…
  • 42. For Beginner Microserviceってどうなの? • 今までどおりのエンタープライズなシステム(SoR)で は、不適当なケースが多い • エンタープライズのSoE的なところでは、利用できる 可能性が高い(成功の鍵は前述どおり) • インフラも含めて考える必要があるので、今までア プリケーションだけを考えていたエンジニアはステッ プアップが必要 42 なんでも適材適所じゃよ…
  • 43. For Beginner Springはどうなるの? • Spring 5.0 – M1が2016/7にリリース – 正式リリースは、2017年4Qを予定 – Java8のみ対応、Reactor • 今後 – SpringはCloud Nativeに舵をきっているが、エンタープ ライズ系(SoR)はその辺は無視して、今まで通り 2017 2020 43 ここまでお付合いありがとうよ
  • 44. For Beginner 44 ライセンスについて • JSUGマスコットアイコン(本スライド左下)が残されている場合に限り、本作品(またそれを元にした派生 作品)の複製・頒布・表示・上演を認めます。 • 非商用目的に限り、本作品(またそれを元にした派生作品)の複製・頒布・表示・上演を認めます。 • 本作品のライセンスを遵守する限り、派生作品を頒布することを許可します。