せてぃーずノート

Javaのイベント参加レポートとかを書いたりします。

OpenJDK11でStruts 1.3.10を動かす

酔っぱらった勢いでやった。今は反省していない。

用意したもの

OpenJDK 11.0.1
JDK 11.0.1 GA Release

StrutsといえばTomcat!!
何も考えずにapache-tomcat-9.0.12を用意

IDEはもちろんEclipse
最新のEclipse SimRelをダウンロード!
IDEA?何それ?

Strutsはサンプルアプリをダウンロード
http://ftp.jaist.ac.jp/pub/apache/struts/1.3.10/struts-1.3.10-apps.zip
もうStruts1なんて覚えてないよ・・・

結果とか

懐かしい画面!10年くらい前によく見たわー!

f:id:setys:20181023233731p:plain

なんか動いた!!
デモを動かしてもある程度は動く!

f:id:setys:20181023233800p:plain

まとめ

  • MavenもGradleも使ってないプロジェクト久々に触った
  • Struts 1はいい加減卒業しよう
  • BorderBreak、Wonderland Warsはいいゲーム

JJUGナイトセミナー「JDK 11リリース記念:今知っておくべきJDK 11の重要ポイント」に行ってきたメモ

最初に

↓を必ず読もう

Javaは今も無償です

JDK 11リリースなので改めて「新しいJDKリリースモデル解説(サマリー&アップデート)」 by 伊藤 敬さん

スライドは↓↓↓

JDK: 新しいリリースモデル解説(ver.2.1)

Oracle JDK

  • 前々からアナウンスされていた商用ライセンス版
    • だけじゃなく、社内もしくは個人での開発・テスト・デモであれば無償利用可能(OTNLAライセンス)
  • OTNからダウンロードできる
  • OTNLAライセンス版も3年間のアップデートが提供される(・・・かもしれない)
    • まだ検討中
  • 商用ライセンスを個人で買う手段は現在用意中

Oracle OpenJDK

  • OracleがビルドしたOpenJDK
  • LTSなし。商用ライセンスもなし
  • Java 8までと同じライセンス

その他

  • 10/16に11.0.1がリリース予定
  • リリース情報はこれからもOpenJDK
    • リリースドキュメントはしっかり見て!!

Java 11 : サポートとVM機能 編 by 久保田 祐史さん

スライドは↓

Introduction to Java 11: Support and JVM Features #jjug

Java11のサポートとJVMについて

  • サポートは開発サポート、配信サポート、問い合わせサポートの3つ。
  • 無償で使いたい人の結論はAdoptOpenJDKからダウンロード。最低4年間の配信サポートが得られる。

  • OpenJDKのメンテナンスリードOracleが務める

    • でも、Java 6のようにOracleが辞めた後、Redhat等が引き継いでサポートを続ける可能性はある。
  • Oracle JDKからOpenJDKの乗り換えは比較的簡単だけど、証明書が若干ネックになるかも

    • ライセンスの関係等でOracle JDKに含まれていた証明書が入っていない可能性
    • OpenJDKを自分でビルドすると空っぽ
  • Java8のサポートが切れるまでにはJava11に移行する

    • ただし、Java 8の有償サポートを受けてる人は2025年まで有効。なので、Java 11ではなく、Java17(次のLTS。2021/9)まで引っ張る選択肢もある
  • 4年以上のバイナリ配信サポートが欲しければ有償サポートしかない

    • 外にサポートを求めてもエース級がくるとは限らない。あえてサポートを受けず、組織内でエースを育てるのもあり。

JVM

JEP 330: Launch Single-File Source-Code Programs

Javaファイルを直接実行できる。例えば、java Hoge.javaで実行できる。

  • メインメソッドと1ファイルで完結するという制約あり
  • Javaソースをスクリプト化できる。これが本当のJavaScript!
JEP 328: Flight Recorder

もともとJava Flight Recorderだったが、Javaが商標に引っかかるからFlight Recorderになった
ツールじゃなくてJREに組み込まれている

JEP 318: Epsilon: A No-Op Garbage Collector

Epsilon GC。何もしないGC。まだ試用版。

メモリ監視とか行わない。なので、何も考えずに使うとOOEMが起こる。
研究や開発で使うのを想定。JITの効果測定とか(GCが邪魔しない)

JEP 333: ZGC: A Scalable Low-Latency Garbage Collector

Java11では試用版のポーズレスGC。世代別GCではないので、色々変わる。
64bit、Linux限定。
今後、クラスアンロード周りを始め、修正がガンガン入ってくる。
また、運用するためには、LinuxのLargePageとNUMA周りも気にしないとダメ。

Java 11:APIの変更点 編 by きしだなおきさん

Nestedクラスのアクセス制御

public、protected、default、private以外の5つ目のアクセス制御。ネストクラス間のprivateメンバーアクセス。
今まではコンパイルすると別クラスになるので、アクセス用のメソッドが生成されていた。
Nest Mate APIでアクセスできる

Dynamic Class Costants

Classfileフォーマットの拡張。言語やコンパイラの実装自由度、クラス読み込みが早くなる(定数の遅延実行)
Java 11ではコンパイラが未対応(?)
将来的にはstatic finalの定数とかも対象に含めたい。

Java EEとCORBAモジュールの削除

JAX-WSとかJAXBとかはMavenでライブラリ取ってくる必要あり。 CORBAはメンテナンスできる人がいなくなった?(まぁ、使ってる方がレアだし・・・?)

HTTPクライアント

Java9で入っていたHTTPクライアントがスタンダードに。
HTTP2、Reactive対応。

varの拡張

varがLambdaでも使えるように。Lambda内でアノテーションをつけるときに便利。

APIの追加

StringにisBlank、strip(全角空白対応のtrim)、Charactor.toStringにintパラメーター(キャスト不要になった)

FilesにReadString,WriteStringが追加され、小さいコードを書く時便利になった。
nullReader,nullWriterは/dev/nullみたいなもの
Path.ofはインターフェースにofメソッドを追加するという最近の流行りに追従。

Collections.toArrayにintFunctionを指定できるようになった
toArray(String[]::new)のように書ける

Streamのfilterでnotが書きやすくなった
文字列が空「じゃない」フィルターでもメソッド参照がつかえる

Thread.destroyとかstopとか削除されたAPIがある

ArrayIndexOutOfBoundsExceptionのメッセージがわかりやすくなった

JapaneseDateの新元号対応。NewEraとして入ってる
新しい元号は、12.0.1(4/25)に反映される予定

Timソートのバグが直った
静的解析ツールKeYで検出

QA

Q:Java 11でJAX-WSやJAX-Bがなくなった背景は?
A:削除の背景は開発速度の違い。Java EEの変更をSEに入れるのが大変。また、Jackarta EEになってパッケージが変わるという理由もある。

Q:年号を起動時に指定できる? A:Enumだからできない。

JJUGからの案内

来月はナイトセミナーだけでなく、OracleCodeOneの報告会を予定。12月はJJUG CCC。
立て続けにイベントがあるのでみんな来てね。

修正メモ

  • スライド追加
  • JDK 11.0.1のリリース日が間違ってたので修正

JJUGナイトセミナー「Jakarta EE, MicroProfile, Payara が目指すもの」へ行ってきた

風邪気味の金曜日、そして週末胃腸炎。ちょっと回復したのでようやく書けた・・・。

EE4J

Jakarta EE

今後のロードマップ

未定のこと

  • ライセンスはできるだけオープンにして欲しいとは言われてる
    • しかし、EE4Jほどにはならないと思われる
  • ワーキンググループに参加するためのFee
    • Java EEOracle時代)はとても高かったので、お手頃にしたいと思っている
  • Glassfishの扱いが未定
    • 参照実装になるかも未定・・・
    • ピックアップする人が出るか
  • リリース頻度をあげたい
    • でも、半年ごとというJavaのリリース速度に合わせると、Jakarta EEが管理しきれないから、それよりは遅くなる
  • すでにある仕様の取り扱い
    • 法的に持ってこれないものも多い・・・
    • その場合スクラッチで構築しなければいけない
  • javaxパッケージの取り扱い

Microprofile

  • 2.0がリリース
  • Payara MicroやOracleのHelidon等がある

Helidon

  • 日本ではあまり知られてない
    • 海外でもまだこれからっぽい

雑感

  • EE4JとJakarta EEの関係が不安
    • Jakarta EEの方はベンダーの思惑とかが入ってくると思われる
    • EE4Jが純粋な開発者が欲しいものを追求した時に問題になりそう
  • そもそも、Jakarta EEが複数のベンダーでやっていけるのか
    • PayaraのようなJakarta EEがほぼ全てのベンダーと、Oracle富士通のようなそれ以外もあるベンダーの温度差
    • Springのように1ベンダーが主体になった方が速度は向上しそうだけど・・・
  • 個人的にはMicroprofileとEE4Jがいい感じに連携していくといいなーと思う

JJUG ナイトセミナー 「Elasticsearch特集」メモ①

とりあえず、1セッション目のメモ。 2つ目はきっと明日には・・・。

Elastic Stackで始めるJavaアプリのパフォーマンス監視

スライドはこちら

Elastic Stackで始めるJavaアプリのパフォーマンス監視 / Intro Elastic Stack and Elastic APM Java - Speaker Deck

elastic社は2012年創業。アメリカとアムステルダムに ElasticsearchはCEOの奥さんのレシピ検索のために作った

Elastic Stack

Beats、LogStash、Elasticsearch、Kibanaの組み合わせ。 公式のデモもある。

https://demo.elastic.co/

Beats

Go言語で書かれた軽量データシッパー(データ収集エージェント) 収集したデータの送信先はLogstash、Kafka、Elasticsearch等 大規模(数百台)だと、Kafkaを挟むことおすすめ 簡単なフィルター(INFO以下のログは送信しないとか)はあるが、変換とかパースはLogstash 採取したいデータがあるサーバーに設置 収集対象は様々で、公式・コミュニティで40種類以上のBeatがある k8sの場合、Beats系はDaemonSetで指定。

Logstash

データ加工パイプライン 元々はBeatsの役割も兼ねていたが、JRubyで書かれているため、起動に時間がかかる、メモリを食う等で評判悪かった。

Elasticsearch

分散型、高可用性の特性を持つ全文検索エンジン Wikipediaの検索もElasticsearch

Kibana

Elasticsearchに接続する解析と分析のView

APM

Java等のアプリケーションの情報収集ができる(Javaはまだベータ版・・・) 収集の流れはAPMエージェント→APMサーバー→Elasticsearch。 ViewはKibana。

Javaアプリの実行時に-javaagentで導入する。 Springの場合、Controllerの時間とその中で発行されたSQLを収集。 中の処理の時間を取得したい場合のAPIもある。

QAとか

PacketbeatでDBのアクセス情報が取得できる。 ・クエリの種類 ・発行されたクエリ SQLを分析し、インデックス貼ってないカラムへのSELECTとかを見つけるのに役立つ MySQLであれば3306のポートをウォッチしてるだけなので、DBに手を入れる必要なし

Elastic stackをk8sで動かすのは非推奨。 コンテナはステートレスであるべき。

fluentdとLogstashは使いやすい方を使えばいい。 データ取得でBeatsを使い、fluentdに送ることもできる。

JSUG勉強会 2018年その3 LT大会に行ってきたしん!

興味深かったところをメモ

Kotlin

  • IDEAのktファイルにJavaソースを貼り付けると変換してくれる?
  • Dataクラスが1行で書ける
  • NPEに遭遇しなくなる
  • 書籍はKotlin in Actionおすすめ

バナー

Spring Bootのバナーを生成するサイトがある

Spring Boot banner.txt generator

何でも貼れるけど、エラーメッセージはやめた方がいい(新人がみたらパニックになる)

2.0でアニメーションgif対応

Spring Bootの起動を早くする話

本番では使えないけど階層型コンパイルバイトコード検証オフで起動が早くなる IDEAで実行する場合は自動的に指定される

GraphQL

RESTに変わるAPI

github.com

でも辛いところもある

ペイロードのバリデーションでBeanValidationが使えない クライアントサイドでやれという思想らしい

エラー時に何でもかんでも500返してしまうので自前で実装

Spring MVCの外のライブラリ。 AOPとかは使えるけど、Spring MVCの機能は使えない

Spring Data JDBC

Spring Dataだけど、DBアクセスの実装は提供しない
CRUDRepositoryの実装をMyBatisとかから選択できる
デフォルトはSpringJDBC
ストラテジーを自分で定義すれば、好きなORMを使える

宣伝

SpringFest 10/31
会場は両国KFC

Spring Securitでハードウェアトーク

Web AuthorizationがW3Cで標準化
FIDOを利用して2FAとかできる

Web Authorizationはユーザーとクライアントプラットフォーム、クライアントプラットフォームとサーバーで認証が分かれるからセキュア

SpringSecurityで実装したのは↓

github.com

まとめ

ちょっとしたハックから普段の工夫まで色々な話が聞けてよかったです
来月もJSUG勉強会は開催予定なので楽しみ

JJUG ナイトセミナー 「Java SE 10 / JDK10リリース特集」に行ってきた

花粉症つらい・・・

お知らせ

JavaDayTokyo2018

5/17(木)に決定。
キーノートはMark Reinhold(初来日?)
登録サイトは近日オープン(多分、今週後半くらいとのこと)

JJUG CCC 2018 CfP募集中

JJUG CCC 2018 Spring

JDKリリースモデル変更について(おさらい) by 伊藤 敬さん(Oracle)

Java 10はおそらく初めて予定通りリリースされたJava
リリースノートには削除予定APIも記載されているので確認しておくこと。

JDK10の追加機能解説 - JEP286/ローカル変数の型省略(var記法)を中心に

ローカル変数の型推論

冗長な変数の型の宣言をvarに置き換えられる。
動的言語になるわけじゃない。
メソッドの引数・戻り値には使えない。
また、匿名クラスにも使えない。

varは予約語ではないキーワード。
そのかわり、クラスやインターフェースでは使えなくなった。
(非互換だけど、流石に使ってる人いないよね・・・)

変数やフィールド、メソッドでは使えるからこれはOK。(絶対やるなよ的な・・・)

var var = var();

varの使いどころは、読みやすさが向上する箇所。
Javaの書きやすさより読みやすさを重視している文化は破っちゃダメ。
型をタイプするのが面倒とかそんな理由で使ってはダメ。

IDEがなくても理解できる状態で使うべき。
マウスポインタを上に乗っければわかるはNG。

varのガイドラインも出ている。

orablogs-jp.blogspot.jp

GCの変更

G1のパラレルFullGCが追加された。
でも、G1GCを使っている時にFull GCを起こした時点で負けなので、恩恵を受けないような運用が理想。

Garbage-Collector Interfaceの追加で、GCをモジュールとして追加削除できるようになる。

ZGC

https://wiki.openjdk.java.net/display/zgc/Main

4TB(!)までのヒープに対応。
ヒープサイズに関わりなく、Stop The Worldを10ms以下に抑えるのがゴール。

Java 10でぼくたちの生活は どうかわるの?

今まではすぐにでも欲しい便利な機能でも、追加されるのが3年後だった。
それが比較的すぐに手に入る。
でも、アップデートに追従するコストが大変。

新しいバージョンへの対応方法
  1. とりあえず動かして見る
  2. コンパイルして動かして見る
  3. 非互換・非推奨APIを見つけ出す(jdeps、jdeprscan)
  4. 機能テストを行う

新しいバージョンの変更箇所は、以下の

  • JEPから新機能
  • 最新のJRSからAPIの変更点
  • リリースノートから非互換

STSで非推奨化・削除と続くと、LTSから次のLTSにいきなり移った時に、サイレント削除が発生する可能性がある

Java 8からJava 9への移行がとにかく大変。
そこを乗り切ること。

Class-Data Sharing

元々はコマーシャル機能。
クラスデータを複数のプロセスで共有する。
バッチとかのプロセスをたくさん起動するアプリで利用できる
読み込むクラスの量が多いほど効果的

APIの変更

OptionalにorElseThrowが追加。
getよりこちらを利用すべきと書かれている。

List、Set、MapにcopyOfメソッドが追加。
変更不可のコピーを返却する。
引数が変更不可の場合は引数をそのまま返す。

プロセスIDが取れるようになった。

Javadocにサマリーを出力するアノテーションと、ヘッダーとフッターの編集が追加。
会社で使うときとか便利そう。

感想

Java 9から半年だけど、機能追加が非常に多い印象。
Java 8からJava 11に移行すると死ねる未来が見えるので、それまでのどこかでは試しておかないといけないなぁ・・・。

あとはJavaとは関係ないですけど、神宮球場の桜がいい感じに綺麗でした

Spring Fest 2017に行って来た

Springの祭典! JJUG CCCの興奮冷めやらぬ中(?)のイベントに参加して来ました。 詳細はqiitaにまとめるとして、セッションの感想を中心に

詳細なまとめはすでに誰かがやってくれてるので・・・

セッションの感想

Introduction to Spring WebFlux

Spring WebFluxをSpring MVCとの違いを絡めつつわかりやすく説明したセッション
JDBC使うときはWebFluxにしない方がいい等の、移行する際のポイントもきちんと抑えて説明があった

Spring Security 5 解剖速報

Spring Security 5の変更ポイントに絞った解説

ドメイン駆動設計のためのSpringの上手な使い方

エンジニアならコードを書け!
Excelパワポ作るんじゃなくてコードを書け!

Quick start Spring Boot on OpenShift

Kubernetesを使うかOpenShiftを採用するかどうかプロジェクトで決めないといけないので聞く。
Spring要素はあまりなく、OpenShiftの紹介だった気がする。

The Road to Serverless

なんか、コレジャナイ感があった Fnのように、実行環境とファンクションが分かれてるのではなく同一のJarにパッケージング?
それサーバーレスなの?

Spring BootとSpring Cloudで始めるマイクロサービス

一通り通した解説や考え方が盛り込まれていてわかりやすかった
でも、セッションの中で初心者向け(?)と言っていたけど、初心者ついてこれないっしょと聴きながら思った
守破離の守を再確認させてくれるけど、守にすらたどり着いてない人orこれから入門する人には辛いかも?

全体通しての感想(というか気になったこと)

会場も広く、去年のようなすぐに会場がいっぱいということもないし、セッションはいずれも高品質だった。 個人としては不満はないし、むしろこんな素晴らしいイベントを開催してもらって感謝の念しかない。

個人じゃなくてもう少し広い観点で考えてみる。

Java EEの停滞や脱Struts、マイクロサービス等の理由でSpringは非常に注目を浴びているフレームワークである。
このイベントには、Springを知らない人や移行先の候補としてのSpringを知りたいという理由で参加してる人も多かったのではないか? でも、Springをある程度知っている開発者じゃないとついていけないセッションも多かった気がする。
例えばSpring Security 5の話もSpring Securityを理解してないとピンと来ない。

Springをこれから始める人向けに、Springの目指すとことか考え方的な説明をする本当にSpring知らない人向けセッションがあってもいいと思った。
(なら、お前やれよ?でも、僕もSpring3から入った新参なので許してクレメンス・・・)

最後に偉そうなこと言っちゃってますが、自分にとっては最高すぎるイベントでした。