【jackson-module-kogera】value class関連処理をMethodHandle化するとどれ位高速化するか

jackson-module-kogera 2.19.0-beta25にて、value classのシリアライズ / デシリアライズに関連する処理でMethodHandleを使うように変更しました。 github.com この記事では、変更の効果が最低でどの程度かを確認した結果を紹介します。 value class関連処理…

Junieのクラウドクレジットはライセンスアクティベートから30日単位でリセットされる

TL;DR Junieのクラウドクレジットは、ライセンスアクティベートから30日単位でリセットされる クラウドクレジットの前借・繰越は不可 AI Ultimate契約の場合、サポートに相談できるらしい ※2025/06/25時点の話なので、将来的には変わってるかもしれません。 …

【Intellij IDEA(Ultimate)】プロジェクトのJavaバージョン更新後ビルドが通らなくなった問題への対処【Gradle】

TL;DR 壊れていたのはIntellijのプロジェクト設定だった(元から壊れているものが顕在化した) 基本的にProject StructureからJDKを設定すれば直るはずだが、自分の場合何故か直らなかった 諸事情から.idea配下のファイルを弄って直した プロジェクトをpull…

OSS開発でJunie軽く使ってみたメモ

環境はIntellij IDEA(Ultimate) in Windowsです。 セットアップ PluginsからJunieのプラグインをインストールして始めました。 フリー版の使用感 一応無料枠が有りました。 ただし、ちょっと触っただけなのに一瞬で使い切ったので、正直フリー状態で出来るこ…

【Java】MethodHandleを合成する

TL;DR 「MethodHandle Aからの戻り値 -> MethodHandle Bの引数」という形の合成は、MethodHandles.filterReturnValueを使えば実現できる docs.oracle.com やること 「Method Aを呼び出し、その結果をMethod Bに渡す」というような場合、従来のリフレクション…

【Kotlin】PublishedApiアノテーションを用い、publicなinline関数から呼び出せるinternal関数/クラスを定義する

internal関数/クラスへ@PublishedApiアノテーションを付与すると、publicなinline関数からも呼び出せるようになります。 kotlinlang.org kotlinlang.org ただし、privateな内容には適用できないため、モジュール or プロジェクトレベルで分かれている場合に…

【Spring】ResponseEntityに任意のレスポンスヘッダを設定する

概要 ResponseEntityにはレスポンスヘッダを設定できる レスポンスヘッダはHttpHeadersに格納するのがおすすめ ResponseEntityはヘッダをMultiValueMapで受け取る HttpHeadersは特化した用途のMultiValueMap 単純追加だと基本的にブラウザ側で無視されるため…

【JUnit5】junit-jupiter 5.12へのアプデでテストが動かなくなった問題への対処【Gradle】

TL;DR サンプルプロジェクトを参考に、プロジェクトの構成を見直すのが良さそうです。 junit.org 状況 junit-jupiter 5.11.3 -> junit-jupiter 5.12.xへのアプデでテストが動かなくなりました。 レポートを見ると以下のようなスタックトレースが出ていました…

【Gradle】JacksonのSNAPSHOTバージョンを利用する

JacksonのSNAPSHOTはSonatype NEXUSのSnapshotリポジトリへアップロードされているため、repositoriesへそれを参照する設定を追加すれば利用できます。 repositoriesは上から評価されるため、この設定をmavenCentralより上に書いてしまうと、依存の解決速度…

【GitHub Actions】CIのワークフローをsetup-gradleに移行した際のメモ【Gradle】

TL;DR gradle利用ならsetup-gradleを用いるのがおすすめ setup-gradle利用時はsetup-javaのcache: gradleを消す wrapper-validationはsetup-gradleで自動実行されるため明示的な指定は不要 移行後のWF(抜粋)は以下のようになりました(実際にはcontents: w…

【Maven】maven-surefire-pluginはデフォルトだと特定パターンに名前が合致するクラスのテストしか実行しない

TL;DR maven-surefire-pluginはデフォルトだと特定の命名規則に合致するテストクラスしか実行しない 実行されないテストについては、クラス名を変えるか、パッケージ単位指定などを行う必要がある 状況 jackson-module-kotlinのメンテ中、verifyコマンドでは…

【Intellij IDEA(Ultimate)】invalid value for 'gpg.format': ''でGitツールが動かない状況への対処

TL;DR .gitconfigのgpg.formatが空文字列の状態だと動かなくなるようだった 自分の環境だとformat = sshと修正することで直った 状況 Intellijを使っている時、Copy Link to GitHub Repositoryが動かなくなりました。 Gitツールウィンドウを見た所、invalid …

1年のアウトプットを振り返る

6年目もやっていきます。 wrongwrong163377.hatenablog.com 雑感 今年は引越しを始め土日が潰れる系のイベントが多く、やりたい開発があまりできなかった感が強いです。 また、その間にメンテナンス作業等溜めてしまったので、来年もしばらくはその返済に追…

【Gradle】ビルドがハングして二進も三進も行かない場合、Javaプロセスをkillすれば回復するかも【Kotlin】

TL;DR Javaを利用していそうなアプリケーション(e.g. IDE)を全て閉じた上で、なお生きているJavaプロセスがある場合、それをkillすれば回復する可能性が有ります。 自分はmac環境にて、アクティビティモニタからプロセスを目grep・終了とすることで対処し…

JIS Macでキーボード認識がおかしくなり、ログイン画面でパスワードが正常に入力できない状況への対処

TL;DR 自分の環境では、入力ソースにABCを選ぶことで解決できました(英字と出ている場合不具合が起きている)。 また、以前起きた際はUS配列の外部キーボードなら正常入力できました。 自分は試せていませんが、アクセシビリティキーボード(ソフトウェアキ…

Spring WebFlux/R2DBC/jOOQ/PostgreSQL/Kotlin Coroutines環境でselectクエリがハングする時の個人的対処法3選

Spring WebFlux/R2DBC/jOOQ/PostgreSQL/Kotlin Coroutines環境で、不意にselectクエリがハングする状況が何度か有りました。 関連する内容が多すぎて原因は解析し切れていませんが、そのような状況に対して見出した3つの対処法をまとめます。 何かより良い対…

【Spring WebFlux】jOOQで組み立てたクエリをConnectionFactoryへ直に発行する【R2DBC】

jOOQで組み立てたクエリをConnectionFactoryへ直発行する仕組みを作ったのでまとめます。 なお、これは事情が有って作ったものであり、本来一切推奨できないコードであることはご承知おき下さい。 コード全体は以下の通りです。 基本的にはSelectクエリでの…

【Gradle】finalizedBy("formatKotlin")がTask 'formatKotlinMain' uses this output of task...で失敗する場合、finalizedBy("formatKotlinMain")にすると成功するかも

状況 jOOQのコード生成後にフォーマッティングするため、kotlinterを用いfinalizedBy("formatKotlin")としていたプロジェクトで、nu.studer.jooqからorg.jooq.jooq-codegen-gradleに移行する際、以下のようなエラーが出るようになりました(※編集しているた…

KotlinリポジトリのcodegenTarget8Jvm8Testを実行するとToolProvider.getSystemJavaCompilerがnullを返して一部が失敗する問題への対処

Project StructureのSDKに指定しているJDKバージョンが違うのにcodegenTarget8Jvm8Testを使っていたのがダメだったらしい 指定されているJava 11に合わせ、codegenTarget8Jvm11Testを使うよう変更したら完全に通るようになった 試した限り、codegenTarget8Jv…

【jOOQ】getSqlでプリペアドステートメントが$1, $2, ...形式のクエリを取得する【PostgreSQL】

文脈 jOOQでは、getSqlでパラメータが埋め込まれる前のクエリ文字列を得られます。 このクエリについて、デフォルトでは、select * from table where id = ?というように、プリペアドステートメントが?で表現されています。 一方PostgreSQLでは、select * fr…

【MockK】mock/spyされたオブジェクトを大量に呼び出すと異常な負荷・OOMが生じた【Kotlin】

状況 パターン網羅のために大量の呼び出しを行うようなテストを追加した所、java.lang.OutOfMemoryErrorでテストが失敗する状況が生じました。 外形的な挙動としては、テスト関数が1つ終わってもメモリが解放されず、テストが進むにつれメモリ使用量も線形に…

【Java】Java17以降で整数の完全な16進数文字列を得たいならHexFormatがおすすめ

Long.toStringは上位ビットが0だった場合に削れた文字列を返してしまいます。 完全な16進数表記を得るにはString.format("%016x", number)を利用する例がよく引っかかりますが、内部処理を見ると結構重そうなことをしています。 一方、Java 17からは、このよ…

【jOOQ】UUIDを大量指定する際の省メモリ化【PostgreSQL】

状況 大量のUUIDを指定したin句を発行する際に、メモリ消費量が問題になりました。 見たところ、jOOQではUUID1件当たりcast('b81b8735-6ac8-4b0b-a969-658e70425616' as uuid)みたいな形のクエリになってしまうことが原因のようでした。 対処 応急処置として…

【Java】AWS SDK2で、S3からファイルへgetObjectする際、デフォルトでは失敗時にDL先ファイルが削除される

AsyncClientの方で調査していますが、通常の方も同じ内容が有るはずです。 特にコンフィグ無しでAsyncResponseTransformer.toFileを呼び出した場合、FileTransformerConfigurationはdefaultCreateNewで設定されます。 aws-sdk-java-v2/core/sdk-core/src/mai…

【Kotlin】kotlin-reflectを弄るためのメモ

github.com greadle.propertiesを弄る ビルド・テストで全論理コア使われると他アプリの動作が重くなるので、kotlin.test.junit5.maxParallelForksを全論理コア数 - 最低限確保したい論理コア数にしていいかも。 以前はJDK7以前を無視するオプションも有った…

OpenAPI Generatorで、何でも入れてOKのプロパティの値に型付け(Map<String, String>とかに)する方法

以下のように、additionalPropertiesのtypeを指定すると、値の型を変えられます。 例ではstringを指定しているので、Kotlinで生成した場合Map<String, String>になります。 type: object additionalProperties: type: string type: integerにすればMap<String, Int>になりますし、type: st</string,></string,>…

1年のアウトプットを振り返る

この振り返りも5年目となりましたがやっていきます。 wrongwrong163377.hatenablog.com OSS関連 jackson-module-kotlinのメンテナになった 今年最大の変化はjackson-module-kotlinのメンテナになったことです。 jackson-module-kotlinのメンテナは、2022年中…

【Spring WebFlux】Bean初期化処理でblockすると、lazy-initが有効な場合に実行時エラーになる

以下の追記部で紹介した話です。 qiita.com 本文 lazy-initが無効な場合、Bean初期化処理中であればblockしても特に問題は起きません。 このため、Bean初期化時のwarmup目的でblockすることもできます。 一方、lazy-initが有効な場合、アクセス時のコンテキ…

KotlinlangのSlackでThank Youが明るくなった話

qiita.com この記事はSwift/Kotlin愛好会 Advent Calendar 2023の3日目の記事になりました。 Kotlin言語には、JetBrainsの管理する公式Slackワークスペースが有ります。 kotlinlang.slack.com このワークスペースでは、現在:thank-you-color:として以下のス…

【Gradle】Windows環境でorg.gradle.api.InvalidUserDataException: Source directory ... is not a directory.になる問題への対処

一度ローカルからプロジェクトを消した上で、以下のようにcloneし直すことで解決します。 git clone -c core.symlinks=true https://github.com/<your_name_here>/<your_repository_here> 参考にさせて頂いたサイト github.com github.com 文脈 自分はokioをビルドしようとしてこの問題に当たりまし</your_repository_here></your_name_here>…