覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

Java

MavenプロジェクトでOracleのJDBCドライバを使いたい

Mavenプロジェクトで開発している場合にOracleのJDBCドライバを使いたい場合もあると思います。 OracleのJDBCドライバのjarはMaven Central Repositoryに登録されていないので単純にpom.xmlへ依存関係を記述するだけでの利用はできません。 以下手順に従って…

Lombok - IntelliJ IDEAのLombok Pluginによる操作

以前のエントリでIntelliJ IDEAへLombok Pluginをインストール手順を記載しました。 このPluginを利用することでIntelliJ IDEA上で、Lombokの操作を一部補助してくれます。 Lombokのアノテーションの貼り付け メニューからの選択操作でコード上にLombokのア…

Spring Day 2016 に行ってきた

Spring Day 2016に参加してきました。 以下自分用のメモ 概要 日程: 2016年11月18日 場所: グラントウキョウサウスタワー41F Spring Framework 5.0 Themes & Trends Stephane Nicoll 氏 (Pivotal) Last 4.x feature release 4.3 2016 June Release JDK6, 7, …

stubby4j - Basic認証

stubby4jを、Basic認証を行うサーバとして振る舞わせることができます。 stubby4jの実行方法等は、はじめてのstubby4jを参照ください。 本エントリでは、リクエストの送信結果を確認するためにDHCを使用しています Basic認証用の設定方法 ■定義 YAMLファイル…

stubby4j - リクエスト順に応じたレスポンスを返す

stubby4jでは特定のurlにアクセスされた際に、アクセスされる毎に異なるレスポンスを返すようにすることも可能です。 以下ではアクセスごとに異なるレスポンスを返すサンプルを記載しています。 stubby4jの実行方法等は、はじめてのstubby4jを参照ください。…

stubby4j - POSTのリクエストをハンドリングする

これまでstubby4jの利用サンプルではGETのHTTPリクエストのみを対象としてきましたが、stubby4jは、その他のメソッドにも対応しています。 本エントリではPOSTメソッドのリクエストのハンドリングのサンプルを記載します。 stubby4jの実行方法等は、はじめて…

Lombok - delombok

Lombokを利用すると各種アノテーションを付与するだけでJavaのお決まりのコード(ボイラープレートコード)を削減することができます。 Lombokを使用している場合に、実際に生成されるコードを確認したい場合などがあります。 そのような際にはdelombokの機…

Lombokを開発環境にインストールする(IntelliJ IDEA)

以前のエントリでLombokを、Eclipseへインストールして利用する手順を紹介しました。 本エントリでは、IntelliJ IDEAでLombokを利用するための設定手順を説明します。 設定はすべてIntelliJ IDEAで行います。IntelliJ IDEAを起動した上で実施してください。 …

com.google.common.primitives.Longs

Guavaのcom.google.common.primitives.Longsの利用サンプルです。 Longsクラスはlong型の値に対するユーティリティメソッドなどを提供しています。 サンプルコードで試したのは以下の通りです。 long配列 ⇒ List<Long> の変換 ■API Longs#asList ■サンプル long[] </long>…

com.google.common.math.IntMath(LongMath)

Guavaのcom.google.common.math.IntMath, com.google.common.math.LongMathの利用サンプルです。 数値計算に関する機能を提供するクラスです。 例えば、以下のAPIなどを利用することでオーバーフローをチェックしながら足し算や掛け算などの算術を行うことが…

streamsupportはStream操作以外にも色々提供してくれる

streamsupportは基本的にJavaのStream APIを代替する機能を提供してくれますが、それに留まらずStream API以外のJava8の機能やJava9で追加される機能もバックポートしています。 それら機能について以下紹介していきます。 以下内容については、Mavenを利用…

streamsupport - Stream APIのバックポートライブラリ

Java8のStream APIと同等の機能を提供するライブラリとして、Lightweight-Stream-APIの紹介エントリを書きましたが、 これ以外にもStream APIと同等の機能を提供するライブラリとしてstreamsupportというものも存在しています。 Lightweight-Stream-APIと立…

Lightweight-Stream-API - 色々なStream操作

Lightweight-Stream-APIを使うことでJava6やJava7でもStream APIを利用可能となります。 が、Lightweight-Stream-APIは単純にStream APIを代替するだけでなく、Java標準では提供されていないStream操作も提供してくれています。 本エントリでは、Java標準で…

Lightweight-Stream-API - Java6・7でもStream APIを使いたい

Java8から提供されているStream APIをJava6やJava7でも利用可能にしてくれるライブラリとしてLightweight-Stream-APIが存在しています。 このライブラリを使うことでJava8と同等かそれ以上の操作を利用することが可能となります。 Lightweight-Stream-APIの…

Java Casual #2に行ってきたよ

Java Casual #2に参加してきました。 以下自分用のメモ 概要 日時: 2016/11/07(月) 19:30~ 会場: LINE株式会社 27F カフェ jcmd便利 @sugarlife jcmd #javacasual from Yuji Kubota JDK9からの診断ツール jcmdとjhsdbを使う jinfo, ihat, jmap ⇒ Experime…

Retrolambda - Java6・7でもラムダ式を使いたい

Java8がリリースされて結構な期間が過ぎました。実行環境が全てJava8ならいいのですが、世の中色々な制約がありますのでJava7やJava6が実行環境になっている場合も多々あります。 その実行環境で動作するJavaアプリケーションを開発する側は当然のようにJava…

com.google.common.primitives.Primitives

Guavaのcom.google.common.primitives.Primitivesの利用サンプルです。 Primitivesクラスはプリミティブ型とプリミティブラッパークラスのClassの変換(ラップ・アンラップ)メソッドなどを提供しています。 サンプルコードで試したのは以下の通りです。 全…

JMHでJavaのマイクロベンチマークを取得する

JMHは、Java用のマイクロベンチマーク取得ツールです。 基本的な使い方 計測時の初期化処理や終了処理を行いたい場合 計測の実行条件の指定 JMHを用いた計測サンプル

JMH - 計測結果のレポートをファイルに出力

JMHを使用した計測を行った場合、通常は計測結果はコンソールに出力されますが、 オプションの指定で計測結果をファイルに出力することができます。 また、出力する形式(CSV, JSON, ...)を指定することも可能です。 ファイル名指定で計測結果のレポートを…

JMH - fork数の指定

JMHでは、fork数というものを指定することができます。 fork数は、Benchmarkの取得(ウォームアップ開始から計測終了までの)処理の実行回数に対応します。 fork数が1であれば、1回だけベンチマークの取得を行い、fork数が2であればベンチマークの取得を2回…

JMH - 複数スレッドで実行した場合のベンチマーク

JMHでは、デフォルトではベンチマークの対象の処理を1スレッドで実行して計測を行いますが、 オプションでスレッド数を指定することができます。そうすることで複数スレッドで実行した場合のベンチ―マークを取得することができます。 スレッド数はコード上…

JMH - 実行条件をアノテーションで記述する

本ブログ内で、JMHを使ってベンチマークの取得をいくつか実施してきましたが、実行条件は(mainメソッドの中で)OptionsBuilderのメソッドを実行して指定してきました。 JMHには、実行条件の指定をするためのアノテーションも用意されています。 それらアノテ…

fuse-jna - Javaで作る仮想ファイルシステム

fuse-jnaとは FUSEを用いたファイルシステムをJavaで実装可能とするためのライブラリがいくつか存在していますが、その中の一つにfuse-jnaが存在しています "fuse-jna"というライブラリのその名の通りですが、JNAと組み合わせて利用します fuse-jnaを使用し…

JMH - 計測モード

JMHでの計測を本ブログ内でいくつか行いましたが、全てThroughput(Mode.Throughput)というモードで実施しました。 Throughputは、単位時間辺りに対象の処理を何回実行できるかを取得するものです。 JMHにはThroughput以外の計測モードも用意されています。 T…

JOL - Javaオブジェクトのメモリサイズを取得する

JOLは、Javaのオブジェクトがメモリ上にどうレイアウトされているかを確認するためのツールで、OpenJDK のサイトで公開されています。 JOLはJava Object Layout の略です。 利用準備 JOLを利用するために複雑なセットアップは不要です。JOLのjarを実行環境の…

Javaオブジェクトのメモリサイズを取得するためのツール群

Javaでの開発をしている際に、Javaオブジェクト(インスタンス)のメモリサイズを把握したい場合があると思います。そのような場合に役に立つツール群を以下に記載しました。これらを使えば少しコードを書くだけで簡単にメモリサイズを取得することができま…

JMH - 初期化処理・終了処理を行う

JMHを使ってベンチマークの取得を行っている際に、計測処理の外側で初期化処理や終了処理を行いたい場合があると思います。 そのために用意されているのが以下のアノテーションになります @Setup(org.openjdk.jmh.annotations.Setup) - 初期化処理用のアノテ…

Lombok - @SneakyThrows

Lombokの@SneakyThrows(lombok.SneakyThrows)アノテーションの利用サンプルです Javaの例外は、チェック例外と実行時例外の2つに大別されます。 チェック例外が発生する場面では、try-catchで処理するかthrows節に記述して上位へスローするかの対処が必要…

Lombok - @Cleanup

Lombokの@Cleanup(lombok.Cleanup)アノテーションの利用サンプルです JavaでI/O処理のためにInputStreamやOutputStreamを利用している場合、必ずfinally句で順番にリソースをcloseするという処理を記述することになります。 これは処理の本質ではないので…

Lombok - @ExtensionMethod

Lombokの@ExtensionMethod(lombok.experimental.ExtensionMethod)アノテーションの利用サンプルです。 JavaにおいてString(java.lnag.String)クラスに対して、メソッドを追加することはできません。Stringに対する新しい操作がほしい場合は、Apache Comm…

Lombok - @Wither

Lombokの@Wither(lombok.experimental.Wither)アノテーションの利用サンプルです。 Immutableなクラスでは、クラス内のメンバの値を変更したい場合にwithXXXXというメソッドを定義することがあります。 withメソッドは、元のインスタンスの内容は変更せず…

Lombok - @UtilityClass

Lombokの@UtilityClass(lombok.experimental.UtilityClass)アノテーションの利用サンプルです。 Javaでユーティリティ用のクラスを作成する際には、一般的に以下のようなコードを記述する必要があります クラスは継承されないようにfinalにする インスタン…

Lombok - @Accessors

Lombokの@Accessors(lombok.experimental.Accessors)アノテーションの利用サンプルです。 クラスに@Accessorsアノテーションを付与してパラメータを指定することで、@Getter/@Setterで生成されるgetter/setterをカスタマイズすることができます。 @Accesso…

Gson vs Genson vs Fastjson (2)

以下記事に続いて、Gson, Genson, Fastjson, JSONIC のベンチマークをJMHを用いて取得しました。 JSONの項目数が1, 2, 4, 8個の場合のそれぞれについて以下操作を実施して測定してみました Javaオブジェクト⇒JSON文字列の変換(Serialize) JSON文字列⇒Javaオ…

com.google.common.primitives.Doubles

Guavaのcom.google.common.primitives.Doublesの利用サンプルです。 Doublesクラスはdouble型の値に対するユーティリティメソッドなどを提供しています。 サンプルコードで試したのは以下の通りです。 double配列 ⇒ List<Double> の変換 ■API Doubles#asList ■サンプ</double>…

com.google.common.primitives.Booleans

Guavaのcom.google.common.primitives.Booleansの利用サンプルです。 Booleansクラスはboolean型の値に対するユーティリティメソッドなどを提供しています。 サンプルコードで試したのは以下の通りです。 boolean配列 ⇒ List<Boolean> の変換 ■API Booleans#asList ■</boolean>…

Lombok - @Synchronized

Lombokの@Synchronized(lombok.Synchronized)アノテーションの利用サンプルです @Synchronizedをメソッドに付与すると自動生成されたロックオブジェクトでsynchronizedブロックが生成された状態になります。 @Synchronizedを利用すると以下を省略すること…

Lombok - @Log

Lombokから提供されるロギング(ロガー)用のアノテーションのサンプルです https://projectlombok.org/features/Log.html ロガーを利用する際の普通のコード 業務アプリケーションで、ロガーを利用してアプリケーションログを出力するというのはごくごく一…

Date and Time API(JSR-310)で日付操作

Date and Time API(JSR-310)についての利用サンプル色々 APIの利用サンプル java.time.LocalDateTime java.time.LocalDate java.time.LocalTime その他 ThreeTen Backport Java6やJava7でもDate and Time API(JSR-310)を使いたい場合は、ThreeTen Backport…

Lombokを使った開発ひと巡り

Lombokを利用することでJavaのボイラープレートコードをシンプルに記述することができます。 開発の準備 ■LombokをEclipseにインストールする ■LombokをIntelliJ IDEAにインストールする Lombok - 利用頻度の高いアノテーション Lombok - アノテーション詳細…

Lombok - @Builder

Lombokの@Builder(lombok.Builder)アノテーションの利用サンプルです。 対象クラスを生成するためのBuilderクラスを自動的に生成してくれます。@Valueアノテーションと組み合わせると強力です @Builderを付与してみる @Builderをクラスに付与して自動的にB…

Lombok - @EqualsAndHashCode

Lombokの@EqualsAndHashCode(lombok.EqualsAndHashCode)アノテーションの利用サンプルです。 クラスに@EqualsAndHashCodeアノテーションを付与することで、対象クラスのequalsメソッドとhashCodeメソッドがクラス内のメンバに応じて適切にオーバーライドさ…

Lombok - コンストラクタの生成(xArgsConstructor)

Lombokのコンストラクタに関する以下のアノテーションの利用サンプルです。 @NoArgsConstructor(lombok.NoArgsConstructor) @AllArgsConstructor(lombok.AllArgsConstructor) @RequiredArgsConstructor(lombok.RequiredArgsConstructor) デフォルトコンスト…

Lombok - @Getter / @Setter

Lombokの@Getter(lombok.Getter)と @Setter(lombok.Setter)アノテーションの利用サンプルです。 @Getter/@Setterはその名の通り、getter/setterを自動生成するためのアノテーションです。 @Getter/@Setterをクラスに付与 @Getter, @Setterをクラスに付与…

Lombok - @Value

Lombokの@Value(lombok.Value)アノテーションの利用サンプルです。 クラスに@Valueアノテーションを付与することで、対象クラスをImmutableの状態にすることができます。 @Valueアノテーションを付与すると、@Getter, @ToString, @EqualsAndHashCode, @All…

com.google.common.base.Preconditions

​Guavaのcom.google.common.base.Preconditionsの利用サンプルです。 メソッドの引数をチェックしてNullPointerExceptionをスローさせたり、IllegalArgumentExceptionをスローさせたりすることがあると思いますが、そのような事前条件のチェックを補助してく…

Lombok - @NonNull

Lombokの@NonNull(lombok.NonNull)アノテーションの利用サンプルです。 @NonNullアノテーションをクラスのメンバやメソッドの引数に付与することでnullチェックが自動で挿入されます。 @NonNullが付与されたメンバや引数にnullを渡そうとするとNullPointer…

com.google.common.collect.BiMap

Guavaのcom.google.common.collect.BiMapの利用サンプルです。 BiMapはいわゆる双方向Mapってやつです。 通常のMapはkeyからvalueを取得するという流れになりますが、BiMapではそれに加えて、valueからkeyを取得するということも可能です。 上記の件を実現す…

Lombok - @Data (2)

Lombokの@Data(lombok.Data)アノテーションの利用サンプルです。 @Dataアノテーションにより、JavaBeansを簡単に記述することができます。 以下記事に続いて@Dataを利用したコードをもう少し色々書いてみました。 本エントリでは主に、@Dataによって作成さ…

Lombok - valでローカル変数の型を省略する

Lombokのlombok.valの利用サンプルです。 https://projectlombok.org/features/val.html ローカル変数を扱う場合に、通常であれば変数の型を明確に記述する必要がありますが、 Lombokのvalを使うと型を明示的に書かずに済みます。 ちなみにvalの変数はfinal…