Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
あなたのプロジェクトが気軽にJavaをバージョンアップするために必要なこと
Search
Yu Watanabe
March 07, 2015
Technology
0
34
あなたのプロジェクトが気軽にJavaをバージョンアップするために必要なこと
Yu Watanabe
March 07, 2015
Tweet
Share
More Decks by Yu Watanabe
See All by Yu Watanabe
JUnitテストをCI環境で並列で実行する方法とその速度, スケーラビリティ
nabedge
5
2.2k
クラウド時代だからSpring-Retryフレームワーク
nabedge
0
120
ツール比較しながら語るO/RマッパーとDBマイグレーション
nabedge
0
77
JavaでWebサービスを作り続けるための戦略と戦術
nabedge
0
47
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
nabedge
0
42
Selenium再入門
nabedge
0
39
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
nabedge
0
41
テストゼロからイチに進むための戦略と戦術
nabedge
0
48
jOOQってなんて読むの?から始めるSpringBootとO/Rマッパーの世界
nabedge
0
82
Other Decks in Technology
See All in Technology
30分でわかる『アジャイルデータモデリング』
hanon52_
9
2.7k
急成長する企業で作った、エンジニアが輝ける制度/ 20250214 Rinto Ikenoue
shift_evolve
3
1.3k
Moved to https://speakerdeck.com/toshihue/presales-engineer-career-bridging-tech-biz-ja
toshihue
2
750
Amazon S3 Tablesと外部分析基盤連携について / Amazon S3 Tables and External Data Analytics Platform
nttcom
0
140
白金鉱業Meetup Vol.17_あるデータサイエンティストのデータマネジメントとの向き合い方
brainpadpr
6
770
表現を育てる
kiyou77
1
220
速くて安いWebサイトを作る
nishiharatsubasa
12
14k
抽象化をするということ - 具体と抽象の往復を身につける / Abstraction and concretization
soudai
21
8.6k
2024.02.19 W&B AIエージェントLT会 / AIエージェントが業務を代行するための計画と実行 / Algomatic 宮脇
smiyawaki0820
14
3.6k
転生CISOサバイバル・ガイド / CISO Career Transition Survival Guide
kanny
3
1k
エンジニアの育成を支える爆速フィードバック文化
sansantech
PRO
3
1.1k
7日間でハッキングをはじめる本をはじめてみませんか?_ITエンジニア本大賞2025
nomizone
2
1.9k
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Adopting Sorbet at Scale
ufuk
74
9.2k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Building Your Own Lightsaber
phodgson
104
6.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.8k
Designing for Performance
lara
604
68k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
KATA
mclloyd
29
14k
How to train your dragon (web standard)
notwaldorf
91
5.8k
Transcript
あなたのプロジェクトが 気軽にJavaをバージョンアップする ために必要なこと 第10回 #渋谷Java 2015-‐3-‐7(Sat)
自己紹介 • 渡辺 • (株)ビズリーチ • @nabedge
• h8p://mixer2.org • h8p://nabedge.blogspot.jp 2
質問 • Java8ですか? • Java7? • Java6?
• Java5? • まさかの古代言語? 3
なぜ古いJavaを使い続けるのか? • バージョンを上げて何かあったら嫌だから – 何かあったときにもとの古いJDK/JREに戻すのが 面倒くさい – テストをやりなおすコスト •
「全てのサーバのJDKのバージョン上げて」と いうとインフラ担当者が嫌な顔をするから。 – とにかく上司を説得するのが面倒くさいから。 4
• 「がんばってJava5,6,7 から Java8にバージョン アップだ!」 – N年後 • 「もうJava11が出てるのにまだJava8使ってるの?」
• 同じやり方でやれば行き着く先は同じ。 – 大切なのは「バージョンアップする」ことではなくて 「バージョンアップしやすくする」こと。 5
JREとJDK • JDK=開発に必要なもの – ソースコードをコンパイルする – ローカル開発環境とJenkinsの中にあるもの • JRE=運用に必要なもの
– コンパイル済みのバイナリを実行する – テスト環境/本番環境の中にあるもの 6
JREとJDK • 「とりあえず全サーバにJDKが入っている」 のは何故? – A: 大は小を兼ねるから。 – A:
JDK/JREのインストールをインフラ担当者に任 せてしまうから。 – 実はこのあたりから「バージョンアップできない Java」が始まる 7
JDKの切り替えなんて簡単 8 Eclipseの設定ダイアログ
JDKの切り替えなんて簡単 9 Jenkinsの管理画面
JREの切り替えはどうする? • JREを気軽にバージョンアップするためには? • なんかあったらすぐ元に戻すためには? 10
去年のJJUG 11 当時の資料 h8p://www.slideshare.net/nabedge/java-‐the-‐twelve-‐factor-‐app
h8p://12factor.net 12
突然CM入れてみたりとか 13 Javaな人、絶賛採用中 h8p://www.bizreach.co.jp/recruit/
第2章「依存関係」の最後の段落 Twelve-‐Factor Appは、いかなるシステムツールの暗黙的な存在にも依存し ない。例として、アプリケーションからImageMagickやcurlを使う場合がある。 これらのツールはほとんどのシステムに存在するだろうが、アプリケーション が将来に渡って実行され得るすべてのシステムに存在するかどうか、あるい は将来のシステムでこのアプリケーションと互換性のあるバージョンが見つ かるかどうかについては何の保証もない。アプリケーションがシステムツー ルを必要とするならば、そのツールをアプリケーションに組み込むべきである。 14
• 「アプリケーションがシステムツールを必要と するならば、そのツールをアプリケーションに 組み込むべきである」 • 「アプリケーションがJREを必要とするならば、 JREをアプリケーションに組み込むべきであ る」 15
• 実際のところどうすべきか? – アプリにJREを組み込んでリリース物を作る – JREにアプリを組み込んでリリース物を作る 16
Java1.4からその機能はある 17 1.4, 5,6,7,8 全てほぼ同じことが書いてある
公式マニュアルにはっきり書かれている 1. $JAVA_HOME=/var/lib/jre1.x.x_nn だと して 2. $JAVA_HOME/lib/ext の配下は自分で 作ったjarを置いてもいい場所ですよ
1. そこは自動的にクラスパスに含まれます よ 18
前提 • Tomcatはインストール型ではなく ライブラリ型=組み込みtomcat=を使え。 19
組み込みTomcatとは • Tomcat 7.0.1x (2011年初頭)くらいか ら安定リリース • tomcat-‐embed-‐core-‐7.0.x.jar
• tomcat-‐embed-‐logging-‐log4j-‐7.0.x.jar 20
public stacc void main(String[] args) { Tomcat tomcat =
new Tomcat(); tomcat.setPort(8080); tomcat.addWebapp("/”, new File(“/var/webAppDir) .getAbsolutePath()); tomcat.start(); tomcat.getServer().await(); } 21
ビルド方法 1. 自作のアプリをjarに固めておく 2. 使用するフレームワークやライブラリのjarも 集めておく 例:mvn dependency:copy-‐dependencies
3. tar zxf jre-‐”N”uXX-‐linux-‐x64.tar.gz 4. cp [1,2のjar群] jreNuXX/lib/ext/ 5. jreNuXX/配下を再びzipかtarballに固める 22
リリース&実行方法 1. 前頁のビルド成果物をサーバ上で解凍する 2. export JAVA_HOME=解凍先ディレクトリ 3. $JAVA_HOME/bin/java
com.example.YourMain ※ -‐classpath=… を指定する必要は無い。 23
JREのバージョンup/down方法 • ビルドするときにjreのtarballのバージョンを変 えるだけ。 – これならインフラさんに迷惑かける必要ないよね。 24
まとめ • JDKとJREはちゃんと区別して考える。 • 全ての普通のjarに固める。 • APサーバは組み込みで。
– tomcat-‐embed, je8y… • JREもろともリリースせよ。 – ライブラリのjarの差し替えと同じ間隔でJREも差し 替えられるように。 – 実は古来から存在する普通の技です。 25
ありがとうございました! 26