mike-neckのブログ

JavaかJavaFXかJavaEE(なんかJava8が多め)

Java

JUnit5の標準のassertとDynamicTestの用い方

JUnit5でわりと便利だと思っているのが、JUnit5に標準でついてくる Assertions#assertAll と @TestFactory で返す Iterable<DynamicTest> です。 エンタープライズな現場でよく見かけるテストとして、こういうのがあるかと思います。 @Test void firstTest() { final Map<Long, UserEntity> </long,></dynamictest>…

JJUG CCC 2017 Spring 参加メモ

表題の通りJJUG CCC 2017 Springに行ってきました。参加したセッションのメモです。 www.java-users.jp エンプラ開発におけるレガシーアプリケーションの巻取りとモジュール分割の戦い 既存のレガシーアプリケーションにアプリケーションを追加する案件から…

Java Day Tokyo 2017 参加メモ

Java Day Tokyo 2017に数年ぶりに参加しました。そのメモです。僕が参加したのは次のセッションです。 基調講演 Java 9 and Beyond: Java Renaissance in the Cloud Modular Development with JDK 9 Tuning G1GC Java SE 9のすすめ 緊急開催!Java技術メモ三…

Java9(ea163)でHttpClientを使ってみたノート

ディレクトリ構成やmodule-info.javaで少々ハマったので(10分)、ノート。 Java SE9から公式のやっと面倒くさくないHttp Clientが出るので試してみた。 試してみたのは jdk.incubator.httpclient モジュールの jdk.incubator.http.HttpClient とその関連クラ…

Spring BootでThymeleaf3を使うときのbuild.gradle

ググってもMavenの方法しか出てこないのでメモ。 start.spring.io で作ったbuild.gradleに次を追加するだけ。 ext['thymeleaf.version'] = '3.0.0.RELEASE' ext['thymeleaf-layout-dialect.version'] = '2.0.0' 元ネタはこちらのステファン・ニコルさんのコ…

JSUG勉強会 2017 - 3 〜ドメイン駆動設計 powered by Spring のメモ

JSUGの勉強会に参加したので、そのメモ。 jsug.doorkeeper.jp 資料は公開されるだろうから、ここでしか聞けないことを中心にメモ(ツイート)したつもりだが、資料に盛り込まれている可能性は十分にある。なお、資料は以下の通り。 ドメインロジックに集中せよ…

Javaでの和暦の扱いについて

Date and Time APIでの和暦の扱いをちゃんと調べていなかったので、調べた。 なお、以下で用いるコードにおいては次のフォーマッタおよび、タイムゾーンを使った。 final ZoneId tokyo = ZoneId.of("Asia/Tokyo"); final DateTimeFormatter formatter = new …

testcontainersで使い捨てのデータベースコンテナを用意してSpring Bootアプリケーションのテストをおこなう

テストを流したらデータベースを起動していなくて、テストが全部コケさせることがよくあり、悩んでましたが、 @making さんに testcontainers を教えてもらったので試してみました(経緯は若干違う)。 github.com testcontainersはテスト時にのみ使う使い捨て…

Speedment ORMのメモ

Stream APIを使ったORM。 概要 MavenプラグインでDBスキーマからモデルのクラス/レポジトリー(に該当する)クラスを吐き出す Applicatoinクラスからレポジトリー(に該当する)クラスを取り出す レポジトリーにStream APIを通じてクエリーを投げる インストール…

ArtifactoryのDockerイメージとgradleでのartifactのデプロイのメモ

少々こまったことがあったので、Artifactoryを調べたので、そのメモ。なお、数年前も同じことを調べたという記憶があるのだが、メモを残していなかったのであらたに調べることになった… 書かれていること ArtifactoryのイメージをビルドするDockerfile プロ…

eclipseがメインのIDEに指定されているプロジェクトでIntelliJを使って開発する

職場のプロジェクトがメインで指定するIDEはeclipseですが、IntelliJ IDEAが大好きなのでIntelliJ IDEAで仕事しています。 するとどうしても問題が出てきます。 importの順番が異なるために無駄なdiffが出てくる コードスタイルが異なるのでレビューしづらい…

sdkmanでJavaのインストール

結構前のことですが、 sdkman でJavaをインストールできるようになったとのことで、Javaの更新をsdkmanでやるようにしてみた。 sdk list java まず、どのバージョンのJavaが利用できるのか確認してみます。 $ sdk list java ===============================…

lombokで生成されたgetterにアノテーションを付与する方法と問題

lombokの既存バグにハマったので、その一時的な回避策のメモ。 なお、この情報は以下の環境でおこなった。 Java - 1.8.0_102 lombok - 1.16.12 なお、issueはこちら。 github.com lombokで生成されるgetter(あるいはsetter)にアノテーションを付与する方法 G…

JUnit5入門(6) - JUnit5とGuiceでDIが必要なオブジェクトを構築してテストする

前回の続き これまでの内容をまとめて、DIが必要なオブジェクトをテストするやり方(のひとつ)をやってみる。DIにはGuiceを用いる。 環境 JDK|1.8.0_102 junit-jupiter-api|5.0.0-M3 junit-platform-engine|1.0.0-M3 guice|4.1.0 テスト対象のインターフェー…

JUnit入門(5) - JUnit5の拡張(Extension)

前回の続き JUnitの Extension インターフェース JUnit4のRunnerと同様、JUnit5も拡張をすることができる。 JUnit5が提供している 拡張インターフェース(Extension を継承したインターフェース)は次のとおり。 ContainerExecutionCondition メソッド - evalu…

JUnit入門(4) - TestFactoryとDynamicTest - JUnit5におけるパラメタライズドテスト実現法

前回の続き @TestFactory @TestFactory はJUnit4における Theories ランナーを用いたテストパラメーターをいろいろと組み合わせるテストを実現するために用いる。 @TestFactory を付与したメソッドは次のいずれかを返すメソッドを実装する必要がある。 Itera…

JUnit5入門(3) - アノテーション

前回の続き JUnit4同様、JUnit5ではテストのメタ情報や、実行制御はアノテーションを介して行われる。今回はそのアノテーションをまとめる。 JUnit5が提供するアノテーション一覧 アノテーション 役割 説明 @Test メタ情報 付与されたメソッドがテストである…

JUnit5入門(2) - アサーション

前回 の続き 今回は値の比較、アサーションについて。 JUnit5が提供するアサーション JUnit5はJUnit4とほぼ同等のAssertion機能を提供している。また、より高度なAssertionを求める場合は、サードパーティライブラリーの利用を勧めている。 JUnit5のAssertio…

How to run test class whose name doesn't end with Test in JUnit5 with Gradle.

JUnit5 publishes junit-platform-gradle-plugin. With it you can run JUnit5 tests with gradle. But if you don't give Test at the end of the test class name, this plugin ignores to run it. If you want to run a test classes whose name don't en…

JUnit5入門(1) - テストクラスの作成とテストの実行

年末にかけてJUnit5(junit-jupiter)をいじったのでまとめ。 使い方的な話はQiitaにある記事のほうが詳しいかもしれない… qiita.com qiita.com qiita.com qiita.com JUnit5ライブラリーの導入 テストコンパイルスコープにjunit-jupiter-api、テストランタイム…

DateTimeFormatterのパターンとLocale

Junit5の ParameterResolver によってテストメソッドのパラメーターに渡せる日付文字列の形式をユーザーが自由に決められるようにするために、 DateTimeFormatter を使っていた際に、どうしても月のパターン MMM によって月が名前(例えば1月なら Jan)になら…

JJUG CCC 2016 Fall に行ってきた #jjug_ccc

表題のとおりです。 www.java-users.jp 以下、参加したセッションの独断と偏見によるレポートです。 Prepare for Java 9 : Java9に備えよう Java9先取りのセッションです。 Jigsaw Kullar 非互換情報 ファイル/ディレクトリ構造が変わる話 プロパティファイ…

OpenCV/Java 環境構築メモ

JavaでOpenCVをごにょごにょやるのに、少し手間取ったのでメモ。 インストールする環境などは次のとおり。 Mac 10.11.5 インストールにはbrewを使う OpenCV 3.1.0 IntelliJ IDEA 2016.1.2 Java8u92 OpenCVのインストール (1) pythonをbrewでインストール $ b…

Jigsawのモジュールのリスト作ってみた #java #Jigsaw

さっきのエントリー mike-neck.hatenadiary.com で、LTしてきたと書いたのですが、その際に、Jigsawのモジュールがどのように分割されたのか気になったので、調べてみました。 なお、クラス数が膨大なので、このエントリーには載せません。 github.com 上記…

JJUG CCC 2015 Fall にボランティアスタッフとして参加してきた #jjug_ccc

表記の通り、JJUG CCC 2015 Fallにボランティアスタッフとして参加してきました。 JJUG CCC 2015 Fall(11月28日開催) | 日本Javaユーザーグループ jjug.doorkeeper.jp 僕が主に担当したのはCD部屋の16:00〜の会からの空席案内役。 ひとつ前のいろふさんの…

GradleのJVM component modelスタイルのプロジェクトをJigsawでビルドする #gradle #java #jigsaw

前回のエントリーでGradleにおけるJVM component modelの実践的な内容を紹介した。 mike-neck.hatenadiary.com ここで紹介したプロジェクトのビルド成果物はこちらのエントリーでも紹介した、Javaモジュールシステム的な考えが採用された成果物である。つま…

簡単な特徴もないJava用のテスティングフレームワークつくった

諸事情により、JUnitが使えない状況でコードを書いていたのですが、書いたコードが動くかどうか確認したい衝動に駆られて、簡単な特徴もないテスティングフレームワークを作りました。 仕様 最初に書いた仕様がこれ。 github.com public class MaybeTest ext…

Jigsawについて雑にまとめてみた

以前、Gradle3におけるJavaプロジェクトのビルドについてのエントリーを書きましたが、Gradle3のJVM component modelって、まあ、わりと、Java9のJigsawみたいなものなんですね。で、Jigsaw自体知っている人が多いと思いますが、あらためてJigsawが解決した…

コンソールの色を変えて出力する

元ネタはうらがみさんのカラフルバナー backpaper0.github.io 詳しい話はこのあたりが良さそう。 stackoverflow.com ANSI escape code - Wikipedia, the free encyclopedia def esc = 27 as char (30..37).each {t -> (40..47).each {b -> print "${esc}[${t…

チェッカーフレームワーク(org.jetbrains:annotation)の使い方メモ

IntelliJ IDEAとかAndroid Studioを使っている人は、メソッドの横の方に@が書かれているのを見たことがあるかと思います。 (Android Studioで実際に表示されるのかは知らないけど、ツイッターで観測している限りアンドロイダーの人で「この@Contractって何」…

Java 8u60で、Mapの初期化とかがすごい楽になってる件

夜中に8/15頃のツイートが回ってきた。 Java 8u60 adds reflection on lambda param names DSLs https://t.co/cflxFK468e Hash-Literals https://t.co/5rOCrrckcB pic.twitter.com/NEzj4X3Bt1— Benjamin Weber (@benjiweber) 2015, 8月 16 曰く Java8u60でラ…

最も正しくないOptionalの使い方

本記事ではJava8から入ったOptionalの最も正しくない使い方を解説します。 なお、これが正しいか正しくないかは読者の方の個人的なセンスにお任せします。 正しくない使い方 入力されたBeanの検証をするときに、if(condition1) { return false; } else if (c…

比較的新しいJava用のJSONライブラリーGenson

標記の件について、というわけでもないのですが、JSONPの実装ライブラリーを調べていた所、Gensonなるライブラリーがあるのを見つけました。 謳い文句としては 簡単に使えてしかもパワフル 他のJavaエコシステムとも協調性がある JSR353(JSONP)実装 JAXBとも…

KullaでJavaFXの操作を対話的にやってみる

Kullaネタ JavaFXなどのGUIのプログラムをゴリゴリと書いている時に、ふとこのオブジェクトを少し動かしたらどうなるんだろうと気になることがあります。実際にやってみようとすると、コードを書いてアプリケーションを起動して実際の動きを見て、「ああ、な…

Kullaとsidenで簡易Webサーバーを走らせてみる

JavaのREPLの話は前回したとおりです。 JavaにREPLがやってくる - mike-neckのブログmike-neck.hatenadiary.com で、この記事の最後のほうでKullaに簡易的なWebサーバーをさせてみるのもありかもしれない的なことを書いたので、実際にやってみました。ただ、…

JavaにREPLがやってくる

表記の通り、今(2015/06/26)現在KullaというプロジェクトでREPL機能が開発されていて、Java 9で(今更ながら)搭載される予定です(jshellと呼ばれるらしい)。 以前はこのJava REPLを試すのが大変だった(@zephiransasさんのブログ記事を参照)ようですが、今はか…

JJUG ナイトセミナー「Reactive Streams特集」に行ってきた #JJUG

眠いし、最近Java書いてないし、非同期とかあまりつかってないので、あまりピンとこない分野ですので、雑に書きます。 で、件の勉強会に行きました。 【東京】JJUG ナイトセミナー 「Reactive Streams特集」jjug.doorkeeper.jp 感想概要 Reactiveホゲホゲに…

#渋谷Java に行ってきた

表題のとおりです。 第十一回 #渋谷java (2015/05/30 14:00〜)shibuya-java.connpass.com で、発表してきました。 On stream-lazy-computation from mike_neck Mochida www.slideshare.net 実際のプレゼンの内容はもう少し丁寧かつ雑な資料でやりました。 Ja…

JJUG ナイトセミナー 「GS Collections 道場」行ってきた #jjug

表記のとおりです。なお、本文はハンズオンの片手間で書いています。 【東京】JJUG ナイトセミナー 「GS Collections 道場」jjug.doorkeeper.jp 勉強会の内容的には手を動かしている時間が長かったので、ツイートは少なめなので、多分トゥゲッターはないと思…

Streamパイプラインを1つ生成するのに必要なメモリを求めてみる

元になった記事はこれ。 Java 8 Streamの挙動を調べたった - mike-neckのブログmike-neck.hatenadiary.com パイプライン一つ一つがリンクドリスト状のStreamのインスタンスで構成されているということで、どれくらいの長さのストリームパイプラインを書くとO…

Javaでできることが云々

あまり火に油を注ぐようなことはしたくないし、議論されていることの内容が僕の頭で理解できるレベルを超えているので、あまり書きたくはないけど、まあ雑感という感じで。 「ScalaでできることJavaでできること以上のことはできない」的なツイートの後、ま…

Java 8 Streamの挙動を調べたった

表記の件について、JavaのListから作るStreamは操作中に変更をするとその後の挙動についてなんら結果を保証しないので、ListからStreamを作った場合は、変更をしないか、あるいは不可変なListに変換してから作るのが良いです。 と、書いておいてからなのです…

Javaラムダで竹内関数を書こう

『ふつうのHaskell』を読んでて竹内関数というのが出てきたので、それをJavaでやってみようと思った。 ちなみに竹内関数とは 竹内関数(たけうちかんすう)は、プログラミング言語処理系のベンチマークなどに使われる、再帰的に定義された関数である。 Wikip…

JUnit4.12時代のParameterized Test

JUnitに追いつこう(2周回遅れ、男子一万メートルだと2分近くの差、箱根駅伝なら4分40秒の差)という趣旨のエントリーです。 要約はこっちを見るほうが早かった JUnit 4.12の新機能紹介まとめ - うさぎ組kyon-mm.hatenablog.com JUnit4.12に追いつこう(周回遅…

Groovy2.4.3でJava8のStreamとかOptionalの演算もClosureでできるようになってた件

表記のとおりです。 Java8のFunctionalInterface群は使い勝手がよくて、そっちを主に使っていましたが、GroovyもJava8の言語仕様対応を進めてて、Groovy2.4.3から(それ以前から?)は def func = [apply: {s -> s.size()}] as Function<String, Integer> などと書かなくてもClo</string,>…

JJUG ナイトセミナー 「Javaのプログラムはどうやって動いているの」で正解者が少なかったあの問題をバイトコードから見てみる #jjug

昨日のJJUG ナイトセミナーで出題されて正解者が少なかったAnniversary.javaの問題をjavapして、どのようにコードが実行されているか見てみようというだけのエントリーです。 なお、 さくらばさん「実はこれてらだよしおも間違えました」 #jjug #てらだよし…

JJUG ナイトセミナー 「Javaのプログラムはどうやって動いているの」に行ってきた #jjug

上記のとおりです。 【東京】【初学者向け】JJUG ナイトセミナ 「Javaのプログラムはどうやって動いているの?」jjug.doorkeeper.jp ツイートが下記の通りまとめられています。 【東京】【初学者向け】JJUG ナイトセミナ 「Javaのプログラムはどうやって動い…

WildFlyでh2データベースを使う【改】

この前こんな記事書いた。 WildFlyでh2データベースを使う - mike-neckのブログmike-neck.hatenadiary.com 早速JPA使ったアプリを載せたところ(今頃!?遅っ)、次のようなよくわからんメッセージが… [2015-04-23 08:55:32,221] Artifact web: Error during a…

WildFlyでh2データベースを使う

本文が長いので、結論に急ぎたい人はこちら 経緯 JSFがよくわからんので、適当なサンプルを書いてglassfishで実行しようとしたら、 $ bin/asadmin start-domain sample Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 JVM failed to start: com.sun.enterp…

Gs-Collections code kataをブートするgradleスクリプト作った

GS Collections code kataは一回やったら終わりという感じではなくて、何度もやるみたいなことが書いてあったけど、毎回ダウンロードしてきて、解凍して、IDEで取り込んでってやるのが煩わしかったので、表記のスクリプトというか何度でもやり直しのできるや…