JDK21 の変更点まとめ(JEP外)

blog1.mammb.com JEP 外の JDK 21 における変更点を、開発時に覚えておきたいものに絞りまとめておきます。 Math.clamp() メソッドの追加 範囲指定可能な String.indexOf() 区切り文字を含めて分割する String.splitWithDelimiters() StringBuilder.repeat U…

マイクロサービス・フレームワーク Armeria の始め方

Armeria とは Armeria の始め方 サービス Route デコレータ DecoratingHttpServiceFunction SimpleDecoratingHttpService DecoratingService クライアント クライアント デコレータ gRPC サービス まとめ Armeria とは マイクロサービス用のネットワーク・ラ…

AWS SDK for Java 2.x の使い方

はじめに S3 SDK 利用の流れ クレデンシャル S3クライアントの作成 オブジェクトのアップロード オブジェクトの取得 オブジェクトの一覧 オブジェクトの削除 S3 Transfer Manager S3 Transfer Manager によるアップロード S3 Transfer Manager によるダウン…

Jakarta EE 11 で追加される Jakarta Data 1.0 概説

はじめに Jakarta Data 1.0 により提供されるもの Repository クエリ定義 @Query アノテーション メソッド名によるクエリ定義 パラメータによるクエリ定義 ページング キーセット・ページネーション @StaticMetamodel まとめ はじめに 2024年3月末にリリース…

【Rust】Shift-JIS ファイルを UTF-8 へ変換

encoding_rs クレートを利用。 バイトバッファ経由での処理となるが、Shift-JISは1〜2バイト、UTF-8は1〜4バイトで、変換後のバイト数が読めないので意外と面倒。 use std::process; use std::error::Error; use std::io::Write; use std::io::Read; use std…

JUnit 5 の Temporary Directory サポート

はじめに JUnit 5 における一時ディレクトリサポート @TempDir の使い方 一時ディレクトリのクリーンアップ 一時ディレクトリ生成のカスタマイズ まとめ はじめに ファイルを利用したテストを行う際に、ファイルのクリーンアップを行うのは面倒な作業です。 …

JDK21 で追加された Emoji サポート深掘り

JDK21 の Emoji サポート Emoji Character Properties Emoji_Presentation Emoji_Modifier と Emoji_Modifier_Base Emoji_Component emoji keycap sequence emoji flag sequence emoji tag sequence (ETS) emoji ZWJ sequence まとめ JDK21 の Emoji サポー…

jlink によるカスタムJREイメージ

はじめに Hello World アプリの準備 Hello World アプリのコンパイルと実行 jlink でカスタムJREを生成する モジュールイメージ ランチャーを生成 Gradle からイメージを作成 jlink-gradle プラグイン まとめ はじめに Java Platform Module System (JPMS) …

Gradle アプリケーションプラグインでデバッグ実行する

blog1.mammb.com アプリケーションプラグインの run タスクをデバッグ実行するには以下のようにJVM引数を渡します。 application { applicationDefaultJvmArgs = listOf("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005") } デバッグ…

Gradle Plugin for GraalVM Native Image の使い方(Windows platform)

はじめに Visual Studio Build Tools の準備 プロジェクトの準備 単純なアプリをネイティブイメージ化 リフレクションを利用したアプリをネイティブイメージ化 まとめ はじめに GraalVM 公式のGradleネイティブイメージプラグインの使い方です。 Gradleネイ…

macOS で Gradle Plugin for GraalVM Native Image を動かすための抜け道

はじめに Gradle のツールチェーンでプロビジョニングした GraalVM はシンボリックリンクが壊れている Native Image Plugin(0.9.25)は、Gradle 8.3 では動かない Native Image Plugin のトレースエージェントは GRAALVM_HOME / JAVA_HOME が必須 はじめに ma…

JavaFX の Uber Jar から GraalVM ネイティブイメージを生成(Windows platform)

はじめに サンプル JavaFx アプリケーションの準備 Visual Studio Build Tools の準備 GraalVM の準備 ネイティブイメージの作成(フォールバックイメージ) リフレクション構成ファイルとネイティブイメージの生成 ネイティブイメージ実行時のコマンドプロン…

【Java】ArrayList のコンストラクタ参照にご用心

例えば、sRGB の10進定数をフィールドに持つ Item があったとして、 public static int RED = Integer.parseInt("FF0000", 16); public static int GREEN = Integer.parseInt("00FF00", 16); public static int BLUE = Integer.parseInt("0000FF", 16); priv…

JavaFx の Node クラス階層

はじめに Node クラス階層 javafx.scene.Node javafx.scene.Parent javafx.scene.layout.Region javafx.scene.layout.Pane javafx.scene.control.Control javafx.scene.Group javafx.scene.shape.Shape はじめに JavaFx では javafx.scene.Node で表される木…

JavaFx の3つの矩形境界 LayoutBounds, BoundsInLocal, BoundsInParent の違い

はじめに Transformation と effect Plain Transformation effect まとめ はじめに JavaFx のさわり始めに、必ず混乱する 3つの矩形境界 LayoutBounds, BoundsInLocal, BoundsInParent について説明します。 Transformation と effect テキスト Text を作成…

Ora2Pg による Oracle から PostgreSQL へのデータ移行手順

はじめに 基本的な作業の流れ Ora2Pg 設定ファイルの準備 Oracle への接続確認 テーブル定義のエクスポート シーケンスのエクスポート 各種エクスポートオプション テーブル名のリマップ カラム名のリマップ boolean型への変換 データのエクスポート テーブ…

Podman で Oracle Database 23c Free

はじめに Oracle 23c コンテナの起動 カスタム・スクリプト コンテナ内から sqlplus で接続 コンテナ外から sqlplus で接続 Pod 化 はじめに Oracle 23c から Docker コンテナイメージが提供されるようになりました。 旧来の Oracle express edition では、…

【PostgreSQL】全テーブルの制約を一時無効化する

はじめに session_replication_role の設定 制約の削除/再作成 トリガの無効化/有効化 制約の遅延化 はじめに データのインポート操作やテストデータ投入時など、制約を一時的に無効化したい場合はよくある。 一律設定レベルで変更することはできず、以下の3…

【Podman】Payara と PostgreSQL の JavaEE Web アプリ Pod 作成方法

Podman インストール Payara Docker イメージのビルド postgres ドライバ post-boot-commands.asadmin イメージビルド PostgreSQL イメージ Pod の作成 Payara コンテナ Postgres コンテナ 起動確認 K8s の YAML からのPod起動 Java EE の WAR を Payara 4 …

Java21 でプレビュー公開された Unnamed Classes and Instance Main Methods

はじめに instance main メソッド unnamed class プレビュー機能の有効化 blog1.mammb.com はじめに Java21 で、JEP 445 Unnamed Classes and Instance Main Methods がプレビュー公開されました。 この JEP では以下を実現します。 Java言語の初心者に対し…

Gradle で Uber Jar(Fat Jar)を作る

blog1.mammb.com Uber Jar タスクの作成 ビルド時に Uber Jar を作成する Jar タスクで Uber Jar を作成する Uber Jar を実行可能 Jar にする Uber Jar タスクの作成 新規で Uber Jar 作成のタスクを登録。 tasks.register<Jar>("uberJar") { duplicatesStrategy </jar>…

郵便番号データ ken_all.csv の改定は、本質的に未だ何の解決にもなっていない

はじめに 郵便番号データ改定の経緯 町域名の問題点 郵便番号データの泥臭い編集 まとめ はじめに 2023年6月より、日本郵政の公開する郵便番号データ、通称 ken_all.csv の改定版が公開されました。 旧来の ken_all.csv に加えて、「住所の郵便番号(1レコー…

Podman チートシート

インストール Podman machine イメージ コンテナ Volume Pod 確認 No connection could be made because the target machine actively refused it エラー Example postgresql Oracle Database 23c free インストール macOS $ brew install podman Windows > …

Gradle で Uber Jar(Fat Jar) の Source Jar を作成する

blog1.mammb.com sourcesJar タスク sourcesJar へのソース追加 sourcesJar タスク Source Jar は、Java Plugin で 提供される withSourcesJar() メソッドにより、 sourcesJar タスクを追加することができる(プロジェクトに sourcesJar という名前の既タスク…

イチオシな負荷テストツール k6 の始め方

k6 とは インストール MacOS Windoes Docker バージョン確認 簡単な負荷テストの例 出力メトリクス xk6-dashboard テストスクリプトの構成 実行オプション HTTP リクエスト HTTP レスポンスのCheck スクリプトの自動生成 k6 とは Go で書かれた開発者フレン…

Gradle で Jar ファイルをマニュアルダウンロードする

blog1.mammb.com Jar ファイルを任意ディレクトリに配備する Jar ファイルを任意ディレクトリに配備する Configuration を作成して依存定義 Copy タスクで任意ディレクトリにJarをコピー val copyJar: Configuration by configurations.creating dependencie…

Windows Package Manager - winget クイックマニュアル

winget とは バージョン確認 利用可能なコマンド インストール済みパッケージの確認 パッケージの検索 アプリケーションのインストール アプリケーションのアップグレード アプリケーションのアンインストール 導入パッケージのエクスポート/インポート wing…

Gradle で OS と アーキテクチャを判定する

blog1.mammb.com システムプロパティから取得 OS Detector Plugin DefaultNativePlatform システムプロパティから取得 単純にシステムプロパティから判定できる。 val os = System.getProperty("os.name") val targetOs = when { os == "Mac OS X" -> "macos…

Gradle のビルドスクリプトで IDEA による読み込みかどうか判定する

blog1.mammb.com システムプロパティによる判定 オプションの設定箇所 システムプロパティによる判定 val idea = System.getProperty("idea.active") == "true" || System.getProperty("idea.sync.active") == "true" if (idea) { // } IDEA から Gradle タ…

区切り文字を含めて文字列分割する

はじめに ゼロ幅分割 ゼロ幅 (zero-length) とは JDK21 の String.splitWithDelimiters() はじめに 以下のような文字列を : で分割する。 var string = "aa:bb::cc"; split を使うと : で分割され、分割文字である : は含まれない。 string.split(":"); // A…