mike-neckのブログ

Java or Groovy or Swift or Golang

Java

Mono<Void> は常に empty

当然といえば当然ですが、意外と気づかない。 例えば、特定の条件を満たさないとリクエストを処理しないような WebFilter を記述する。 @Bean WebFilter webFilter() { return (exchange, chain) -> { Optional<String> requestDate = extractRequestDate(exchange);</string>…

resilience4j の RateLimiter を少しだけいじった

resilience4j の RateLimiter を少しだけいじったので、そのメモ。 ここの実装はダメな実装になってるので、ちゃんとした使い方を調べてる人は他をあたった方が良い(強く推奨)。

loom の JDK をビルドしてみた

表題の通り、 project loom の JDK をビルドしてみた。 環境 以下の環境でビルドした。癖で(バーストしない方がよいかなと思って)インスタンスタイプは m5a.large にしたけど、 t3a.micro とかでもいいかもしれない(よくわからん)。 マシン : aws ec2 m5a.la…

JJUG CCC 2019 Spring で 「Collections Framework 入門」というタイトルで発表してきました #jjug_ccc

表題の通り、発表してきました。 jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1 from Shinya Mochida www.slideshare.net いくつか質問を発表後にいただきましたので、ここであらためて回答します (Q) 資料のコードの…

JMH の細かい実行制御

JMH で何かしらの処理のパフォーマンスを計測する時に、すべての計測対象が必ずしもステートレスにできないケースがある。 例えば、 List<String> にデータが 1万レコードほどある時に、 add(int, String) の呼び出しのパフォーマンスを計測する場合など。 この例の</string>…

今更な Effective Java 番号1. コンストラクターより static ファクトリーメソッドを選ぶ

今勤めてる企業で質問された際に、うろ覚えで答えたので、もっかい Effective Java 読んだので、そのメモ 番号1. コンストラクターより static ファクトリーメソッドを選ぶ pros コンストラクターとは異なって、名前を持てる コンストラクターとは異なり、イ…

pixela-java-client のバージョン 0.3 を maven central repository にリリースしました

なるべく 月1度リリースしようと心がけてはいますが、ちょっと時間が経ってしまいました。 ということで、 pixela-java-client のバージョン0.3 を maven central repository にリリースしました。 https://search.maven.org/search?q=pixela github.com ↑ C…

JJUG ナイトセミナー 「JVM言語を作ろう! GraalVMで遊ぼう!」に参加してきた #jjug

表題の通りの勉強会に参加してきた。 jjug.doorkeeper.jp 今回も参加したときにはキャンセル待ちで、参加申し込みの段階で 50人待ちオーバー、2日前の時点で 45 人待ち、前日 26人待ちの状態でしたが、当日に参加できるようになりました。キャンセルしてくだ…

Reactor-Netty の http クライアントを Kotlin Coroutine とともにいじってみる

Reactor-Netty と Kotlin coroutine を同時にいじっているブログ記事を見かけなかったので、勉強がてらブログを書いてみることにしました。

JSUG勉強会 - 「Spring Boot ベースの DDD サンプル徹底解説」に行ってきた話

JSUG 勉強会 Spring Boot ベースの DDD サンプル徹底解説 に行ってきました。 jsug.doorkeeper.jp DDD については、考え方的にはわかっているところもあるのですが、実際のコードを見てがっかりしたり、コードの例が理想的すぎて現実味がないといったことか…

pixela-java-client の version 0.2 を maven repository にリリースしました

version 0.1 のアップロードについてブログを書くのを忘れていましたが、ブログを書かないうちに version 0.2 をリリースしました。

Pixela の Java クライアントを書いてみた

くさ 先月に合同勉強会 in 大都会岡山に行った時に、草を生やす Pixela というサービスが面白そうだったので、 Java のクライアントがないか探してみたところ、なさそうだったので作ってみました。 github.com

try-with-resources に複数のリソースを指定した場合の close の実行順

年末年始に書いていたコードで気になったことがあったので調べた。 結論だけ先に書くと、 try-with-resources に選択したリソースの順番の逆順になる。 Java9 以降で使えるようになった effevtively-final variables in try-with-resources の実行順がどうな…

JJUG CCC 2018 (Winterでなく)Fall に参加してきた

表記の通り、 JJUG CCC 2018 (もう 12 月だけど) Fall に参加してきた www.java-users.jp で、恒例のそのメモ Pivotal認定講師によるSpring Framework 5.1ハンズオン! 日本で唯一の Pivotal 認定講師カサレアルの 多田さん とカサレアルのスタッフによる Sp…

JEP-330 Single-FIle Source-Code Programs って何? Java ファイルが java コマンドで実行できるってホント?! shebang でどう指定するの?調べてみた!

Java11 で取り込まれている JEP-330 すでにきしださんがブログにしている古い機能ですが、自分用のメモ。 (『古い機能』という表現はその手の界隈に人達への忖度表現) TL;DR ってなんだ??? Java 11 にとりこまれた JEP-330 は 1つの java ファイルを java…

AWS Lambda のカスタムランタイムにて Java のカスタムランタイムで関数を動かす

これは Java Advent Calendar 2018 の 7 日目のエントリーです。 Java をラムダで動かす Lambda SDK を使って、チュートリアルどおりに作成します。以上。 そうではないですね。 今回やりたいのは AWS Lambda のカスタムランタイムで 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 の時点ですでに組み込まれていましたが、コマーシャルな機能であったため、 使っている人は少…