mike-neckのブログ

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

Java

Stream の実行順

今更なテーマだが、たまに忘れてしまうのでメモ 次のようなインターフェースとクラスがあるものとする。 RequestValidation ある要求 T を受け付けるか拒否するか判定するインターフェース。判定した結果リクエストを受け付けられない場合は R を返す。リク…

RSocket の request-stream のサーバー/クライアントを作る

RSocket で request-stream のサーバーおよびクライアントを組み立てるときのコード例 サーバー サーバーの構築 final Disposable server = RSocketFactory.receive() .acceptor(new MySocketAcceptor()) .transport(TcpServerTransport.create("localhost",…

RSocket の Channel のクライアントとサーバーを書く

RSocket のクライアントとサーバーを書くポイント。 サーバー サーバーは requestChannel(Publisher<Payload>) を実装する。戻り値は Flux<Payload> @Override public Flux<Payload> requestChannel(Publisher<Payload> payloads) { return Flux.from(payloads) .map( payload -> DefaultPayload.</payload></payload></payload></payload>…

RSocket をちょっとだけ試してみた

Spring Fest で Spring の今後の話題としてあげられていたアイテムに RSocket というのがありました。 公式ページ (https://rsocket.io/) によると、 RSocket はTCP、WebSocket、Aeron(UDPのプロトコル)のようなバイトストリームによる伝送するためのバイナ…

Reactor の Flux を flatten する3つのパターン

ここ最近 Reactor をいじって一定間隔の無限ストリームを生成するなどしていたこともあって、まとめることにした。タイトルに数字が入っていると読まれやすいっぽいので、タイトルには「3つのパターン」と書いたが、実際に flatMap 、 flatMapSequential 、 …

Netty で HTTP クライアントを記述する

Netty で HTTP クライアントの書き方を調べてみたら、意外なことにほとんど見つからなかったので、ブログに書くことにしました。 ChannelInitializer Pipeline に加えるハンドラーと順番は次のとおり SslHandler HttpClientCodec HttpContentDecompressor Ht…

reactor-netty コールドリーディング(4)

ChannelOperationsHandler reactor-netty が提供している ChannelHandler の実装クラス 内部に ContextHandler を持ち、これを通じて処理の登録などを行っている模様 channelActive(ChannelHandlerContext) ContextHandler#createOperations(Channel, Object…

reactor-netty コールドリーディング(3)

HttpRequest の組み立て HttpClient#get などのメソッドから HttpClient#request メソッドを呼び出し HttpClient#request にて Mono<HttpClientResponse> を返すが、実体は MonoHttpClientResponse 2.の際に HttpClient#handler というメソッドが呼び出され、 Function<HttpClientRequest,Publisher<Void>> が MonoH</httpclientrequest,publisher<void></httpclientresponse>…

reactor-netty コールドリーディング(2)

Bootstrap の組み立て Bootstrap は以下の2箇所のいずれかで組み立てる PoolResources#selectOrCreate(SocketAddress,Supplier,Consumer,EventLoopGroup) PoolResources が利用できる場合のみ PoolResources では接続先アドレス(ポート含む)ごとに Channel …

reactor-netty コードリーディング(1)

HttpClient#create(String,int) : アドレスとポートを Consumer<HttpClientOptions.Builder> にラップして(options.host(address).port(port)) HttpClient.Builder#options(Consumer<HttpClientOptions.Builder>) で設定して HttpClient を生成する HttpClientOptions.Builder は ClientOptions.Builder<B extends ClientOptions.Builder<B>> を継承した</b></httpclientoptions.builder></httpclientoptions.builder>…

JJUG CCC 2018 Spring にて発表しました #jjug_ccc

表題の通り 2018/05/26 開催された JJUG CCC にて発表してきました。 www.java-users.jp セッションが1つとLTが1つです。 セッションの方は 「(俺が)はじめての Netty」 で、LT のタイトルは「Spring Boot アプリケーションの起動を速くする 108 の Tips」で…

Java Day Tokyo 2018 のセッションメモ

Java Day Tokyo 2018 に行ってきたので、そのメモ。 キーノート 目黒駅で東京駅南口行きバスのりばを探すのに時間がかかってしまったため、20分遅刻してしまった。 僕が参加したときには Java の新しいリリースモデルの説明。 OpenJDK は 半年間しかサポート…

CompletableFuture の thenApplyAsync メソッドは何度も呼び出せるのか試してみた

最近、自分専用のライブラリーを書いていて、 CompletableFuture#thenApply および CompletableFuture#thenApplyAsync などを複数回呼び出せるのかがわかっていなかったし、 Javadoc にも書いていないようなので実験してみることにしました。 書いたのは次の…

Class Data Sharing を試してみる

Java 10 の Class Data Sharing で Spring Boot の起動を速くしてみます。 Class Data Sharing は異なるJVM上で同一のクラスの情報を共有する仕組みです。 Java 8 の時点ですでに組み込まれていましたが、コマーシャルな機能であったため、 使っている人は少…

Future を Mono に変換する

CompletableFuture<T> から Mono<T> に関しては、 Mono#fromFuture(CompletableFuture) というメソッドがあるのだが、 Future<T> からは Mono<T> への変換メソッドはないし、もっと言えば Future<T> から CompletableFuture<T> への変換メソッドもない。 最初は次のような変換</t></t></t></t></t></t>…

Gradle4.6 からの JUnit5 実行方法

Gradle4.6 がリリースされ、 JUnit5 に対応しました。以下にGradle から JUnit5 のテストを実行するための build.gradle を示しますが、特殊なことをするわけではありません。 build.gradle plugins { id 'java' } repositories { mavenCentral() } test { u…

Reactor Test の StepVerifier の withVirtualTime の使い方

Spring WebFlux で project Reactor が使われていて、まだ手に馴染んでいないので、 チュートリアル をやっていたところ、 StepVerifier#withVirtualTime の使い方がわからず、検索しても要領を得ず、いろいろ試して使い方がわかったので、そのメモ tech.io …

Spring Rest Repositories + JPA で @ManyToOne で指定されているフィールドを用いて検索するリクエストを投げる

ドキュメント探しても、ググってもstack overflowを探しても明確に書かれていなかったっぽいので(本来的には hal の仕様を見るのが正しいかもしれない) 次のような二つのエンティティが存在するものとする。 @Entity class Book { @Id private Integer id; p…

SpringのRestTemplate で Rest Repository が返す application/hal+json からオブジェクトを取得する

何か日本語でなかったため。 実行するのは spring-web が jar にある Java SE 環境(Spring context は存在しない)。 必要なライブラリー org.springframework.hateoas:spring-hateoas とその依存ライブラリー 使ったバージョン spring-core: 4.3.13.RELEASE …

Spring Data REST(+ Spring Data JPA)でPOSTする時のメモ

Spring Data REST + Spring Data JPA で こんなエンティティを作る。 @Entity public class User { @Id @GeneratedValue(strategy = IDENTITY) private Long id; private String name; } @Entity public class Message { @Id @GeneratedValue(strategy = IDE…

JUnit5のNestedクラスを使ってテスト条件をクラスの構造に閉じ込める(テスト小ネタ Advent Calendar 2017 6日目)

JUnit4まででは増えすぎたテストを整理するために、スタティックなメンバークラスを作って整理してきたかと思います。 @RunWith(Enclosed.class) public class Foo { public static class Bar { @Test public void baz() {} } } JUnit5 ではネストしたクラス…

Spring Fest 2017 に行ってきた

記憶を頼りに参加した勉強会についてまとめておくだけ。 2017/11/24 開催の Spring Fest 2017 に参加しました。 springfest2017.springframework.jp 会社ではSpringを使っていないJava EEを改造したフレームワークを利用していますが、独自フレームワークは…

Gradle JUnit5 Starter Pluginをリリースした

JUnit5 がリリースされてだいぶたちますが、そろそろ移行終わりましたか? ちなみに僕が勤務している会社ではJavaのバージョンがあわないので、JUnit4のままです。 ところで、JUnit5を使う時、わりと面倒くさい設定をいろいろと書かなければならず、導入する…

昨日書いたダメなコード

毎日残念なコード書いてるので続けてみる 前提 Java7(今日は関係ない) やりたいこと 指定した範囲のランダムな long の値がほしい 書いたコード 例 : 上限値(long かつ max > 0)を受け取ってランダムな値を返す final Random random = new Random(); long ra…

昨日書いたダメなコード

ヒドイコードを書いたので忘れないようにメモっておく(忘れないとは言ってない) 前提 Java7 guava18.0 使用 やりたいこと Optional の中の値に対して filter して isPresent の結果がほしい 書いたコード 例: Optional<Integer> に対して value > 0 の filter をかけ</integer>…

Java9でGradleを動かす

単なるメモ Javaのバージョンが2017/10/22現在で9.0.1で、Gradleのバージョンが4.2.1以下だとJavaのバージョンをパースできないためにGradleを実行できない Gradle4.2 での実行結果 $ java --version Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 java 9…

git secretsとJavaのserialVersionUIDの相性が悪い

念のためにgit secretsを入れて、aws providerを設定していますが、ちょくちょくJavaのプロジェクトのコミットで失敗が発生してた。 コミットのエラーログを調べると、serialVersionUID private static final long serialVersionUID = -8419924062942848690L…

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技術メモ三…