ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

Java

Java EE 技術から EE4J (Jakarta EE) 技術に移行する

2017 年に発表された Java EE の Eclipse Foundation への移管。 移管されたプロジェクトをまとめるルートプロジェクトの名前は Eclipse Enterprise for Java (EE4J) で、Java EE に相当するプラットフォームの名前は Jakarta EE となっている *1。 EE4J プ…

JAX-RS のリソースから送出された例外の扱い

JAX-RS のリソースのメソッドから例外が送出された場合の挙動についてちゃんと把握していなかったので調べた。 前提知識 : JAX-RS について JAX-RS は、RESTful Web API を提供するための Java の API。 もともとは Java EE の一部。 現在は Eclipse Foundat…

Maven の Surefire プラグインと JMockit と JaCoCo プラグイン

ビルドツールとして Maven を使っている Java プロジェクトで JMockit と JaCoCo を使いたいときの話。 ユニットテストの実行には Maven Surefire プラグインを使用しているものとする。 また、JaCoCo の適用には JaCoCo Maven プラグインを使用するものとす…

MockK と JMockit の組み合わせで AttachNotSupportedException 例外が発生することがあるっぽい

Kotlin で Mockito を使うのが辛くなってきた *1 ので、「よーしパパ MockK 入れちゃうぞー」 と言って MockK 1.8.12 を導入したのだけど、その結果テストを実行すると以下のような初期化エラーが発生するようになってしまった。 java.lang.ExceptionInIniti…

JaCoCo の Java 10 対応はバージョン 0.8.1 から

Gradle 4.6 で Gradle の JaCoCo プラグインを使用しているプロジェクトをビルドすると下記のエラーが発生した。 Java 環境は OpenJDK 10。 java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invok…

JerseyTest で Servlet のリソースを扱う JAX-RS 部品のユニットテストを行う方法

要約 Jersey のテストフレームワークが便利。 Servlet のリソースを扱う JAX-RS コンポーネントのユニットテストを書くときには GrizzlyWebTestContainerFactory を使用すると良い。 前提知識 : Servlet と JAX-RS Jakarta EE (旧 Java EE) における HTTP サ…

Gradle のマルチモジュールプロジェクトで JaCoCo の結果を集計する

Java / Kotlin のコードカバレッジツールとして JaCoCo を使いたい。 Gradle のマルチモジュールプロジェクトでの JaCoCo の導入について記す。(この図は JaCoCo によるコードカバレッジの集計結果の履歴を Codecov で表示した例。) JaCoCo について JaCoCo …

Java (JVM 言語) におけるコードカバレッジの計測方法

Java と Kotlin で書かれたアプリケーションのコードテストのカバレッジを取りたいなーと思って、コードカバレッジ計測ツールについて調べてみてる。 JVM 言語におけるコードカバレッジ計測の方法 JaCoCo のドキュメントにわかりやすくまとまっている。 Cove…

Gradle のマルチモジュールプロジェクトで maven-publish プラグインを使う場合の依存関係

Gradle でビルド成果物 (build artifact) を Maven リポジトリに公開するためのプラグインとして、maven-publish プラグインがある。 Maven Publishing (new) - Gradle User Manual maven-publish プラグインとマルチプロジェクトの依存関係 簡単な例 Java …

Java Persistence API (JPA) の JPQL で集計処理を書く (Spring Data JPA)

Spring Data JPA を使っていて、集計処理をどのように書くのが良いかわからずに調べた記録。 (例は Spring Data JPA 固有の話ではあるが、JPQL の知識は Spring Data JPA 以外での JPA でも使える。) Spring Data JPA での集計の例 リポジトリにメソッドを定…

Java SE 9 の javac で過去バージョンをターゲットにするときには --release オプションを使用すると良い

JDK の javac コマンドを使って過去バージョンの Java 言語で書かれたソースコードをコンパイルする際には、-source オプションや -target オプションを使用してきました。 (JDK 8 までの話。) このとき、適切なブートストラップクラスパスを設定しなければ…

Java 9 のモジュールシステム (JPMS; JSR 376) の概要

Java SE 9 がリリースされましたね! めでたい!さてさて、Java SE 9 の目玉といえばやはり The Java Platform Module System (JPMS; JSR 376) ですよね! Project Jigsaw の心臓部です。この記事では JSR 376 をさらっと読んで、JPMS の全体像をまとめてお…

読んだ : RESTful Web Services with Dropwizard / Alexandros Dallas 著

Dropwizard に関わる仕事をしているので読んでみました。RESTful Web Services with Dropwizard作者: Alexandros Dallas出版社/メーカー: Packt Publishing発売日: 2014/02/19メディア: Kindle版この商品を含むブログを見る Dropwizard について Dropwizard …

Dropwizard + JDBI で SQL オブジェクトの返り値に Optional を使うときには SingleValueResult アノテーションが必要

Dropwizard で SQL ライブラリ JDBI を使うときのおはなし。 OptionalContainerFactory dropwizard-jdbi ライブラリは OptionalContainerFactory クラスを提供してくれていて、JDBI の SQL オブジェクトで返り値に Java 8 で導入された Optional 指定するこ…

MySQL Connector/J 5.1 系では useLegacyDatetimeCode=false にしよう

JDBC で MySQL に接続するときに使用する MySQL Connector/J (mysql:mysql-connector-java) の話。 サーバー・クライアントのタイムゾーン設定が違っている場合にどう対応するのがいいか。 結論 MySQL Connector/J 6 (まだ開発版だけど) 以降は自動でやって…

ISO 8601 DateFormat 1.0.0 (Java 向けライブラリ) をリリースしました

2016 年 5 月 3 日に ISO 8601 DateFormat の 1.0.0 をリリースしました。 ISO 8601 形式 (もしくは RFC 3339 や W3C-DTF 形式) の日付時刻文字列のパースとフォーマットのための DateFormat のサブクラスを提供するライブラリです。Bintray の JCenter リポ…

Android の Java で時刻を扱う (Date、Calendar、DateFormat クラス)

Android アプリで時刻を扱う際に利用することになる Date クラス、Calendar クラス、DateFormat クラスについて、それぞれの役割や使い方、気を付けるべきことをまとめています。

Java における byte 型について (あるいはバイナリデータを扱うためのキャスト)

この記事は、もともと次のページに書かれていた内容に、加筆・修正を行ったものです。 Java における byte 型の扱い方 - vivid memo はじめに この記事では、ビット列を角括弧で囲み、[00000000] のように表現する事にします。 byte 型の表現範囲 Java のプ…

読んだ: Java エンジニア養成読本

2014 年 12 月に発売された 『Java エンジニア養成読本 [現場で役立つ最新知識、満載!]』 を読みました。 これだけを読んで Java がわかるわけではないけど、歴史から Java EE、周辺技術に至るまで説明されていて、Java 初心者が全体を俯瞰するのに良さそう…

【Retrofit を読む】 利用者が定義したインターフェイスに実装を提供する Java ライブラリの作り方 【リフクレション】

この記事は、はてなエンジニアアドベントカレンダー 2014 の 15 日目のエントリです。 昨日は id:chris4403 による 「開発合宿で何を考えてどう作ったか」 でした。このエントリでは、Android アプリおよび Java アプリケーション用の REST クライアントライ…

google-http-java-client 入門

Java で HTTP 通信するときのクライアントライブラリを何にするかいつも悩むのですが、最近 google-http-java-client が気になってたのでちょっと使ってみました。 汎用的に HTTP 通信ができればよい、というような用途にはちょうど良さそうです。数年前から…

「うらがみが Java まわりの ORM を知りたい会」 に参加してきた

うらがみがJavaまわりのORMを知りたい会 - connpass Java の O/R マッパーまわりの話を知りたかったので、6/14 に行われた勉強会 「うらがみが Java まわりの ORM を知りたい会」 に参加してきました。 会場は和室でした。Java まわりの O/R マッパー、あん…

JAX-RS アプリケーションで PreMatching フィルタを使ってリクエスト URL を書きかえる

JAX-RS アプリケーションを書いているときに、リクエストされた URI のパスを書きかえて、対応するリソースを書き替えたい場合があります。 そのような時には、PreMatching フィルタを使用できます。 JAX-RS 2.0 のドキュメント: JSR-000339 JAX-RS 2.0 - Fi…

JAX-RS アプリケーションの 404 Not Found のカスタマイズ (リソースが見つからない場合)

JAX-RS アプリケーションでリソースが見つからない場合に表示される 404 Not Found のレスポンスの内容を変更したい場合にどうすればいいか、という話。 JAX-RS 2.0 のドキュメント: JAX-RS: Java™ API for RESTful Web Services Version 2.0 リソースが見つ…

読んだ: Java 並行処理プログラミング / ブライアン・ゲーツ、ダグ・リー、他 著、岩谷宏 訳

Java の並行処理プログラミングについての書籍を読みました。 2006 年の本なので結構古いですが、内容的には今でも十分通用するものですし、世間からも高く評価されてるみたいですね。 内容的にはかなり良かったです。Java並行処理プログラミング ―その「基…

Java Persistence API (JPA) 実践入門

この記事は Java EE Advent Calendar 2013 の 24 日目の記事です。 昨日は nabedge さんの 「JAX-RSのビューとしてMixer2を使ってみる」 でした。 明日は eller86 さんの 「ウェブアプリケーションサーバでよくあるクラスローダのトラブル」 です! 概要 これ…

Gradle 1.9 がリリースされました

昨日、Gradle 1.9 がリリースされました!! Android Gradle プラグインでおなじみの build variant の仕組みが Gradle 本体にも入ったようです。 その他、Gradle デーモン使用時のビルド効率が向上したり、Java の並行ビルドができるようになっていたりJava …

JPA 2 の Entity クラスをかたどるための Metamodel API (Java EE 7)

最近 Java Persistence API (JPA) を使ってみてます。 まだ使いこなせてはないですがなかなかいいですね。 今まで触ったことのある O/R マッパー *1 の設計が嫌いだったので O/R マッパーにはあんまりいい印象持ってなかったんですが、JPA の設計はよく考え…

Java でファイルの中身を読み込む方法 (Java SE 7 版)

なんとなくネットサーフィン (死語) してたら次の記事を見つけました。 確かに Java のファイル読み込みはいろいろややこしいですよね。 今時なJavaでテキストファイルを読みこむ方法 - /dev/null 「Java ファイル 読み込み」 とかで検索しても FileInputStr…

Java における web アプリケーション開発ことはじめ (JAX-RS 2.0 / Jersey 2.4)

JAX-RS を使って Java で web アプリケーションを開発したい、と思っても、Java EE 周りに詳しくないと何をどうすればいいか全然わかんないですよね! そんなことないですか? 少なくとも私はよくわかんなかったです。そんなわけなので、JAX-RS を使って web …