きしだのはてな このページをアンテナに追加 RSSフィード

2017-10-12(木) JUnit5で変わるテストの書き方

[] JUnit5で変わるテストの書き方 09:44  JUnit5で変わるテストの書き方を含むブックマーク

JUnit5が案外よさげなので、JUnit5を使うとどんな感じでテストが変わるのか考えてみます。

実際にどこが変わったかとか、使い方自体はいろいろまとめられたブログがあるし、公式ドキュメントも読みやすいのでそちらを。

http://junit.org/junit5/docs/current/user-guide/


メソッドごとのテスト

JUnit5でいいのは、Nestedですね。

いままで、いろんなメソッドを対象にしたテストが入り混じってたと思います。

import org.junit.Before;
import org.junit.Test;
public class PurchaseTest {
    @Before
    public void setup() {
        // 全体のセットアップ
        // purchase()用のセットアップ
        // history()用のセットアップ
    }
    
    @Test
    public void purchase_success() {
    }
    
    @Test
    public void purchase_insufficient() {
    }
    
    @Test
    public void purchase_soldout(){ 
    }
    
    @Test
    public void history() {
    }
    
    @Test
    public void history_nodata() {
    }
}

こんな感じ。hoge_case1みたいなのがたくさん並んで、わかりにくかった。

各メソッド用のセットアップも、全部まとめるか、セットアップ用メソッドを定義して呼び出すか、みたいになっていました。


これをNested使うと、こう。

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
public class PurchaseTest {
    @BeforeEach
    void setup() {
        // 全体のセットアップ
    }
    
    @Nested
    class purchase {
        @BeforeEach
        void setup() {
            // purchase()用のセットアップ
        }
        
        @Test
        void success() {
        }

        @Test
        @DisplayName("金額不足")
        void insufficient() {
        }

        @Test
        void soldout(){ 
        }
    }
    
    @Nested
    class history {
        @BeforeEach
        void setup() {
            // history()用のセットアップ
        }
        
        @Test
        void normal() {
        }

        @Test
        void nodata() {
        }
    }
}

public指定が不要になったのも、地味にありがたい。

メソッドごとのテストをNestedするためのクラス名は、メソッドにあわせて小文字始まりにするのもいいかなと思うけど、IDEとかに警告されそうでもある。


テスト区分

JUnit5からcategoryの代わりにtagが導入されましたが、アノテーションが短くなったところで、いちいちつけるのは面倒。

メタアノテーションが使えるので、これも便利に。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Tag("integration")
@Test
public @interface MySqlIT {
}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Tag("integration")
@Test
public @interface SpringIT {
}

こんな感じのアノテーションを定義して、


@MySqlIT
void store() {
  // 外部のMySQLにアクセスしちゃうテスト
}

@SpringIT
void login() {
  // よそのSpringを呼び出したりするテスト
}

みたいな感じでテストを書ける。


で、ビルドスクリプトには一括でexcludeできたり。

<configuration>
  <properties>
    <excludeTags>integration</excludeTags>
  </properties>
</configuration>

細分化しすぎると使いにくそうだけど。


パラメタライズテスト

ちょっとずつパラメータ変えたテストを書くのも面倒だったけど、だいぶ楽になります。

junit-jupiter-paramsを別にdependencyに付け加える必要があるので注意。

@ParameterizedTest(name="param test {0}")
@ValueSource(strings = {"one", "two"})
void paramTest(String param) {
    Assertions.assertEquals("one", param);
}

値の生成には、@ValueSourceのほかにも@CsvSourceとか@MethodSourceとかあるので便利そう。


pom

参考までに、これ動かしたpom。

モジュール構成はこんな感じになってます。

f:id:nowokay:20171012093851p:image


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>kis</groupId>
    <artifactId>junit5sample</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <junit.jupiter.version>5.0.1</junit.jupiter.version>
        <junit.platform.version>1.0.1</junit.platform.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <dependencies>
                    <dependency>
                        <groupId>org.junit.platform</groupId>
                        <artifactId>junit-platform-surefire-provider</artifactId>
                        <version>${junit.platform.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>${junit.platform.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>        
    </dependencies>
</project>

2017-10-07(土) 新しいリリースモデルはJavaを使う人 全員要注目だった

[]新しいリリースモデルはJavaを使う人 全員要注目だった 19:05 新しいリリースモデルはJavaを使う人 全員要注目だったを含むブックマーク

9月の頭くらいに、Javaのリリースモデルが6ヶ月ごとの短期リリースになるということが発表されてました。

で、「へぇ〜」みたいな感じで見てたのですけど、JavaOneでの話を聞くと、これ結構大変なのかも、ということになってそうなので、ちょっとまとめてみます。


Javaの新しいリリースモデル

公式情報はこちらにまとめられています。(10/4にアップデートされてます)

http://www.oracle.com/technetwork/jp/java/eol-135779-ja.html


ざっくり言えば、6ヶ月ごとに機能リリースを行い、3ヶ月ごとにメンテナンス/セキュリティリリースを行い、基本的にはサポートは次の機能リリースが出るまでだけど、3年ごとに長期サポート付きのLTSリリースを行う、という話で、いままでも話されてました。


けど、これだけだと大事なことが抜けています。

LTSはOracle JDKのみで、オラクルと契約した人だけがダウンロードできるようになる、ということです。

f:id:nowokay:20171006073637j:image

つまり、6ヶ月ごとにOpenJDKがリリースされ、その1ヶ月後と4ヶ月後にメンテナンスアップデートが出て、6ヶ月後に新しい機能を持ったOpenJDKがリリースされて、前のバージョンのOpenJDKはサポート終了。そして3年ごとにLTS付きのOracle JDKがOrackeと契約してる人に提供され、こちらはサポート期間中メンテナンスアップデートが提供される、ということになります。


よく見ると、Oracle JDKが顧客向けになることはOracle Blogsで触れられてますね。

Oracle JDKは、OpenJDKのバイナリがOracle JDKと置き換え可能になると(2018年後半ごろ予定)、主に商用およびサポートの顧客向けになります。

https://orablogs-jp.blogspot.com/2017/09/faster-and-easier-use-and.html


Java 8の公式アップデートは2018/9まで

Java 8は2018/9までで、そしてそこまではJava 9もJava 18.3も短期サポートなので、アップデートするぞーって言ってもなかなか難しそう。


無償で安全に使うなら半年ごとに機能アップデートのOpenJDKを入れていく必要がある

ということになりますね。

ただ、これ結構つらそうで、例えば18.3ではvarが入ると発表されたように、言語仕様がかわるリリースも6ヶ月リリースの中で出てくることになります。

Java VMの仕様が変わるプロジェクトにも、SpecializationやValueTypeが入る「Valhalla」、配列の仕様変更やSIMD命令対応などが入る「Panama」、JITのような実行時ネイティブコンパイルではなく事前ネイティブコンパイルができる「AoT」、コンパイラの再設計でVMにも変更がある「Graal」など、それぞれのプロジェクトが出来た機能を逐次リリースするということになります。

ScalaとかGroovyみたいなJVM言語を作る人たちも対応が大変そう。LTSをターゲットにする、みたいな感じになるのかなという気はするけど。


Java 10は出ない

Java9が最後のメジャーバージョンになる、という話をしていました。

ただ、例えば書籍に「Java 19.3対応!」みたいなことが書いてあっても、いまいちよくわかんないって感じになりそう。OCJとかもどうするんだろう?って思ったけど、これそもそもいまだにSE 6までしかないのか。

まあでも、Java EEのバージョンが、複数独立してバージョンアップされるプロダクトのタグという意味合いであったように、なんらかタグとしてのわかりやすいバージョンは欲しいところです。

ValhallaとAmberが全部入ったらJava10って言って欲しい。


けど、実際どうなるかわからない

これ、実際に世の中がまわっていくモデルじゃない気がするので、今後どうなるかわかんないですね。

冒頭の公式情報も、18.9の公式アップデートがどうなるか書いてないし、Open JDKにLTSがないというのもSafe harbor statement(今から話すのは確定情報じゃないよ、というやつ)付きのJavaOneセッションでの情報だし。

トラックバック - http://d.hatena.ne.jp/nowokay/20171007

2017-10-05(木) JavaOneサンフランシスコ 2017 5日目

[][][]JavaOneサンフランシスコ 2017 5日目 10:39 JavaOneサンフランシスコ 2017 5日目を含むブックマーク

さて、今日は最終日です。

f:id:nowokay:20171006110521j:image


帰りの会」であるコミュニティキーノートがあったのですが、ちょっと体調がわるかったので、そのあとから。

よこな氏がカンフーマスターだったらしいので見たかったのだけど。


Introduction to Machine Learning with Apache Spark MLlib [CON3165]

SparkとMLlibによる機械学習のセッション

f:id:nowokay:20171006044149j:image


なんか、歌詞からヘビメタかポップかを判別していた

f:id:nowokay:20171006044343j:image


こういったパイプラインが、

f:id:nowokay:20171006044313j:image


Javaコードにそのまま出てますよ、と。

f:id:nowokay:20171006045446j:image


楽しいセッションでした。


Vectors with Values on the JVM [CON4826]

Javaでベクトル計算を行うというセッション。Project Panamaの一部です。

f:id:nowokay:20171006050451j:image


ベクトル計算の場合、ループをアンロールして1ループごとに複数演算を行うということをやります。これをAVX-512などの命令に置き換えるということですね。

f:id:nowokay:20171006052039j:image


Vector APIとしてaddなどのメソッドが用意されています。

f:id:nowokay:20171006052526j:image


パッケージは今のところjdk.incubator.vectorですね。

f:id:nowokay:20171006052730j:image


こんな感じのコードになっています。

f:id:nowokay:20171006053307j:image


128bit以上でハードウェアとの対応ができていません。

f:id:nowokay:20171006054000j:image


で、本来ならValueTypeを使うべきなのだけど、ValhallaとPanamaは別プロジェクトなので、今のところ頼れない、と。

f:id:nowokay:20171006054307j:image


低レベルに対応したAPI呼び出しを、ハードウェア命令にコンパイルするという感じで対応します。

f:id:nowokay:20171006054918j:image


こちらも参照。

http://openjdk.java.net/projects/panama/

https://software.intel.com/en-us/articles/vector-api-developer-program-for-java


How to Make a Project Java 9–Compatible [CON2448]

Java9対応をどうするか、という話。

f:id:nowokay:20171006061740j:image


なんかずっとライブコーディング。

f:id:nowokay:20171006061919j:image

eclipse collectionsでリフレクション使ってるからvmフラグをつけるか新しいバージョンにしましょうね、くらいしか理解できなかった。。。

せめて何に気を付けるべきかというサマリーは1枚資料を作ってほしかった。


Changes to the JDK Release Model [CON8200]

新しいJDKリリースモデルの話。

f:id:nowokay:20171006071158j:image

内容についてはすでにこちらでまとめています。

http://d.hatena.ne.jp/nowokay/20171007#1507284356


6カ月ごとにリリースされて、3年ごとにLTSが出ますよ、という話。

f:id:nowokay:20171006073231j:image


だったのだけど、色が塗り替えられて、LTSはOracleJDKのみと。

f:id:nowokay:20171006073638j:image


あと、Java9が最後のメジャーリリースになる、という話。

f:id:nowokay:20171006074152j:image


今後の動きに要注目でした。

しかし、大事な話なのに、キャパ50人くらいの部屋に35人しか入っていない。気づいてなかったけど、事前にはなくて直前に入ったセッションだったらしい。


カニOne!

最後は日本人参加者が集まってのカニOneです。

f:id:nowokay:20171006114553j:image


今年もお疲れさまでした!

来年は2018/10/28-11/1です。

トラックバック - http://d.hatena.ne.jp/nowokay/20171005

2017-10-04(水) JavaOneサンフランシスコ 2017 4日目

[][][]JavaOneサンフランシスコ 2017 4日目 07:34 JavaOneサンフランシスコ 2017 4日目を含むブックマーク

水曜日は遠足の日です。去年からはAT&Tパークになってますけど。ライブとかビールとかあります。

f:id:nowokay:20171005131834j:image


Machine Learning for Java Developers in 45 Minutes [CON2977]

朝、8:30から来てみた。

f:id:nowokay:20171005004624j:image


機械学習とは何か、みたいな話をしていた。

f:id:nowokay:20171005005725j:image


まずCommons Mathで線形回帰。

http://commons.apache.org/proper/commons-math/

f:id:nowokay:20171005011144j:image


それからWekaでロジスティック回帰

https://www.cs.waikato.ac.nz/~ml/weka/index.html

f:id:nowokay:20171005012024j:image


あと最後にDeepNettsでニューラルネット

http://www.deepnetts.com/product.html

f:id:nowokay:20171005012305j:image


これは裏番組のKafka+TensorFlow+H2O.aiのセッションのほうがよさそうだった。


Code Generation with Annotation Processors: State of the Art in Java 9 [CON3282]

APTのJava9対応のセッション

f:id:nowokay:20171005014755j:image


まずアノテーションアノテーションプロセッサの説明

f:id:nowokay:20171005015345j:image


生成されたコードにつける@Generatedアノテーションとか、RoundEnvironmentに追加されたgetElementsAnnotatedWithAnyメソッド、あと、クラス名表記のモジュール対応について。

f:id:nowokay:20171005020606j:image


Scale Up with Lock-Free Algorithms [CON1330]

ロックフリーなアルゴリズムについて。

f:id:nowokay:20171005030309j:image


Stackの実装を、Synchronizeを使ったものからAtomicReferenceを使うものにして、VarHandleを使って、最後にAtomicFUを使うという説明をしていました。

http://github.com/Kotlin/kotlinx.atomicfu


ベンチマークはJMHで。ロックフリーのほうがコア数が増えるにしたがったパフォーマンスが出せている、という話。

http://openjdk.java.net/projects/code-tools/jmh/

f:id:nowokay:20171005033355j:image


お昼

なんかJavaOneランチを取るのも面倒だし、kojilinさんとごはんを食べに。

ハワードのステージで流れてる曲がすごく生々しいと思ったら、ライブしてた。ベースとドラムがめちゃうま。

f:id:nowokay:20171005040224j:image


で、パスタを食べに。

f:id:nowokay:20171005043225j:image


G1GC Concepts and Performance Tuning [CON4577]

G1GCの話

f:id:nowokay:20171005050523j:image


パフォーマンスをFlightRecorderで見て。

f:id:nowokay:20171005051345j:image


チューニングするよ、みたいな。

f:id:nowokay:20171005051635j:image


Full Speed Ahead! (Ahead-of-Time Compilation for Java SE) [CON3738]

事前ネイティブコンパイルの話です。

f:id:nowokay:20171005070106j:image


コンパイル結果を共有するよ、という話。OpenJ9と似てる。

f:id:nowokay:20171005071943j:image


AOTを行うコマンドラインツールjaotcの説明。

f:id:nowokay:20171005072728j:image


その結果を使う実行オプション。

f:id:nowokay:20171005073150j:image


あと、なんでVM設定を同期する必要があるかという話。

圧縮Oop(オブジェクトポインタ)という仕組みがあって、ポインタアドレスを全部保持するのではなくて32ビットだけ保持する仕組みがあります。

http://www.oracle.com/technetwork/jp/articles/java/compressedoops-427542-ja.html


4GBだと下位32ビットだけ。32GBまでだと8byteパディングがあるので下位3ビットを無視すればOK、という話。こういうのがあるからVMオプションを同じにしておかないといけない、ということらしい。

f:id:nowokay:20171005074118j:image



Virtual Reality in Java: Is It Possible? [CON1653]

VRのセッション。

f:id:nowokay:20171005084837j:image


VRがどういうものか説明。

f:id:nowokay:20171005085537j:image


そして、jMonkeyEngine3の話を進めるのかと思いきや。

http://jmonkeyengine.org/

f:id:nowokay:20171005085712j:image


Android!JavaOneでJavaでどうこうというタイトルのセッションでAndroidの話するのすげーな、って思った。

f:id:nowokay:20171005090429j:image


あと、Rajawaliをちょっと紹介。

http://github.com/Rajawali/Rajawali

f:id:nowokay:20171005091207j:image


UnityとかWebVRとかもちらっと見せておわった。

f:id:nowokay:20171005092606j:image


Blockchain? What Is Blockchain? Why Do I Care? [CON2276]

ブロックチェーンの説明のセッション。

f:id:nowokay:20171005095409j:image


普通にブロックチェーンの説明してた。Javaが出てくる気配がないので、隣のセッションに。

f:id:nowokay:20171005095510j:image


Amazon Alexa Skills Versus Google Home Actions: The Big Java VUI Face-off [CON3616]

Google HomeとAmazon Echoでいろいろ動かす話。たのしそうだった。

f:id:nowokay:20171005102629j:image


ライブ!

バスで行きます。

f:id:nowokay:20171005110258j:image


よこな氏の希望により、うまみバーガーを食べに。

f:id:nowokay:20171005111922j:image

f:id:nowokay:20171005114240j:image


AT&T PARKにつきます。

f:id:nowokay:20171005120902j:image


Ellie Gouldingという人のライブをやっていました。

f:id:nowokay:20171005125442j:image


あとビール!

f:id:nowokay:20171005131156j:image


帰りにMosconeの前を通ったら、もう解体が始まっていました。

f:id:nowokay:20171005145138j:image

トラックバック - http://d.hatena.ne.jp/nowokay/20171004

2017-10-03(火) JavaOne サンフランシスコ 2017 3日目

[][][]JavaOne サンフランシスコ 2017 3日目 09:32 JavaOne サンフランシスコ 2017 3日目を含むブックマーク

JavaOne3日目です。結構本気の日ですね。

f:id:nowokay:20171004052917j:image

とりあえずメモ書きだけで大変なので、詳しくはあとで書く。


Enabling Java for Persistent Memory Hardware [CON7656]

頑張って9:30からのセッションに来ました。永続メモリをJavaで扱う話。Intelのセッションなので、3D XPointを前提にしている感じ。

f:id:nowokay:20171004015523j:image


最初はたぶん永続メモリの説明をしてた気配があるんだけど、見逃した。座った時にはライブラリの紹介をしていました。

https://github.com/pmem/pcj

f:id:nowokay:20171004020259j:image


PersistentObjectを継承して自分でsetter/getterを書いていく泥臭い感じですね。

f:id:nowokay:20171004021322j:image


ただ、panamaの仕組みでinterfaceでどうにかするみたいなことを言ってた気がする。

f:id:nowokay:20171004021735j:image

http://cr.openjdk.java.net/~jrose/panama/using-interfaces.html


あとは、メモリの区別について。トランザクションなども考える必要があります。

f:id:nowokay:20171004021817j:image


ガベージコレクションはリファレンスカウンタでやるという話だった。テラバイトを扱えるようにする想定なので、スキャンするのは現実的ではないですね。

8ヶ月くらい開発をしていて、年末には安定させたいということを言ってました。

RAMディスクでエミュレートで動かせるようです。

質問した人が「Tremendous Potential!」と叫んでいました。今回のJavaOneで一番未来だった気がする。


Coroutines on JVM with Kotlin [CON1269]

Kotlinのコルーチンの話。

f:id:nowokay:20171004033305j:image


コールバックからfutureまでの仕組みを説明したあとで、コルーチンを使ったところの素敵さを。

メソッドにsuspendをつけてlanch{}で囲むという感じですね。読みやすい。

f:id:nowokay:20171004033000j:image


これはステートマシンにコンパイルされます。

f:id:nowokay:20171004033331j:image


Javaで書かれたFutureを返すライブラリなども対応ができます。

f:id:nowokay:20171004035457j:image


そしてまとめ。

f:id:nowokay:20171004035700j:image


ごはん

ごはんが配られます。

f:id:nowokay:20171004041504j:image


こんな感じ。

f:id:nowokay:20171004041822j:image


あの人も歩いていました。

f:id:nowokay:20171004050312j:image


Let’s Write Our Own Chip-8 Interpreter! [CON3584]

なんか昔のチップのエミュレータを作ろうという話。

歴史とか説明してた。

f:id:nowokay:20171004054058j:image


で、Chip-8の紹介。

f:id:nowokay:20171004053629j:image


エミュレータのデモを出して。

f:id:nowokay:20171004060756j:image


テトリスを動かして。

f:id:nowokay:20171004061027j:image


エミュレータはこんな感じでデザインするよ、と。

f:id:nowokay:20171004062102j:image


よくわかんないけど、楽しそうだった。


展示

なんか1時間の休みがあったので展示にも来てみた。

Questの着ぐるみ

f:id:nowokay:20171004081256j:image


Gradle。目つきの悪いゾウかわいい

f:id:nowokay:20171004063248j:image


レーザーカッターで作られたなにか

f:id:nowokay:20171004063447j:image


なにかをするロボット

f:id:nowokay:20171004063511j:image


そしてIoTビール!Javaで製造管理をしてるっぽい。

f:id:nowokay:20171004081351j:image


ついでもらう。

f:id:nowokay:20171004063936j:image


IPAとかスタウトとかホワイトとかすごく酸っぱいのとかありました。

f:id:nowokay:20171004063705j:image


OpenJ9: Under the Hood of the Next Open Source JVM [CON3573]

OpenJ9の話。

https://adoptopenjdk.net/releases.html

https://github.com/eclipse/openj9

f:id:nowokay:20171004074029j:image


classファイルからROMClassにして

f:id:nowokay:20171004073348j:image


ROMClassからRamClassにして、みたいな感じらしい。

f:id:nowokay:20171004073715j:image


そういったファイルがJVMで共有されることで、フットプリントを軽くしている、と。AoTと同じ方向性ですね。

f:id:nowokay:20171004071521j:image


ベンチマークは?と聞かれたとき、ベンチマークとってるけどフットプリントとアプリケーションのスループットがいいところなので、みたいに言ってました。


Developer Keynote [KEY7383]

DeveloperキーノートはMariotでありました。

f:id:nowokay:20171004082144j:image


こんな感じ。結構いっぱい。Oracle Open Worldの人たちもいるらしい。

f:id:nowokay:20171004082318j:image


ステファンさんとかSlackの人とか出てたけど、ようわからんかった。

f:id:nowokay:20171004083339j:image


Pepperが英語をしゃべってた。

f:id:nowokay:20171004093930j:image


けど、Developer Keynoteの割に開発者向けじゃないなということで、うどん食べに行った

f:id:nowokay:20171004103713j:image


JUnit 5 [BOF7382]

JUnit5の話

f:id:nowokay:20171004111115j:image

@MethodSourceとか便利そう

あと、Dynamic Testとか。

f:id:nowokay:20171004111708j:image


Spring対応の話をして、たりないものはこれ、とか言ってた。

f:id:nowokay:20171004112148j:image


MVC 1.0: Community Involvement Matters! [BOF3293]

MVC1.0の話。

https://www.mvc-spec.org/


5人しかいない

f:id:nowokay:20171004120003j:image


Java EEからDropしてしまったという話

f:id:nowokay:20171004120324j:image


@CsrfValidとかいうアノテーションは、なんか便利そう。

f:id:nowokay:20171004122726j:image


あと、Mavenのdependencyでozark-resteasyになってるところをozard-jerseyにしたりして実装を切り替えて、いろんな実装でちゃんと動くよ、というのを示してました。Spring MVCは なかったけど。

f:id:nowokay:20171004123344j:image


デモコードはこちらに

https://github.com/ivargrimstad/mvc-samples


2Q 2018にリリースすると言っていた

f:id:nowokay:20171004124410j:image


ビール

そしてThirsty Bearでビールを。おつかれさまでした。

f:id:nowokay:20171004134448j:image

トラックバック - http://d.hatena.ne.jp/nowokay/20171003