Java

需要はほぼ無い EntityGraph からの Subgraph 取得

はじめに EntityGraph からの Subgraph 取得 はじめに JPA の EntityGraph を使うことで、クエリーで取得する対象をカスタマイズすることができます。 同じ Entity から様々なデータの見せ方が必要で、パフォーマンスの為に最小限のデータセットのみを取得し…

【Modern Java】Java18で追加された Code Snippets in Java API Documentation (JEP 413)

JEP 413: Code Snippets in Java API Documentation インラインスニペット ハイライト リンク テキストの置き換え 外部スニペット(External snippets) source-path オプションの設定 外部スニペットのスニペットパス指定 ハイブリッドスニペット snippet タ…

Java Bean マッパーのコードジェネレータ MapStruct の基本

MapStruct とは MapStruct の導入 MapStruct の簡単な使い方 @Mapping でプロパティをマップする 様々な @Mapping 定義 @MappingTarget でオブジェクトを更新する @Mapper インスタンスの取得 まとめ MapStruct とは Java Bean 間のプロパティのコピーを簡素…

Java のオブジェクトグラフストレージエンジン MicroStream の使い方

はじめに MicroStream とは Hello World 設定 オブジェクトの操作 データのロード クエリ ObjectCopier バックエンドにデータベースを使う まとめ はじめに MicroStream 5.0 からOSS化された、オブジェクトグラフストレージエンジンの使い方の紹介です。 Mic…

現場で良く使う Java Stream イディオム

キャスト null 除外 否定フィルタ Streamから配列へ 配列からStreamへ リストの集約 リストからマップへ変換 コレクションの変更 任意キーでグルーピング 任意キーでソート カンマ区切り プリミティブRangeからリストへ オブジェクト型の合計 BigDecimal の…

Java Stream を任意順序でソートする

はじめに Java8 Stream での任意順序ソート 未知のキーを末尾に持ってくる はじめに 以下のような Item を top -> middle -> bottom の順序でソートしたい。 List<Item> list = Arrays.asList( new Item(1, "bottom"), new Item(2, "top"), new Item(3, "middle"),</item>…

いつも忘れる CollectionUtils の集合演算

和集合 A ∪ B 差集合 A ー B 積集合 A ∩ B 排他的論理和 A ⊕ B Apache Commons Collections の CollectionUtils。 Collection 同士の集合演算はメソッド名が分かりにくくて、よく忘れるのでメモです。 色付きのものが結果に含まれます。 和集合 A ∪ B Collec…

リファクタリングを行うべきクラスを教えてくれる RefactorFirst

RefactorFirst とは RefactorFirst を使ってみる RefactorFirst レポート まとめ RefactorFirst とは どのクラスからリファクタリングを開始すべきかを教えてくれる Java 用のツールです。 現在のバージョンは 0.2 となっています。 github.com クラスの大き…

Quarkus CLI による Panache CRUD アプリケーションの作り方

はじめに プロジェクトの作成 開発モードの起動 Entity を作成する JAX-RS リソースを作成する Continuous Testing CRUD メソッドの追加 OpenAPI と Swagger UI まとめ blog1.mammb.com はじめに 今回は、Quarkus CLI を使ったアプリケーション作成の流れに…

Quarkus 2.2.0 で変更された RESTEasy Reactive のスレッド割当ルール

RESTEasy Reactive とは RESTEasy Reactive は Quarkus 1.11 で追加された拡張です。RESTEasyReactive では、 JAX-RS API を利用したまま、リクエストをイベントループ(Quarkus ではこれを I/Oスレッドと呼びます)で処理することでスループットを大幅に向上…

JPA の EntityGraph は、@MappedSuperclass が考慮されていない

EntityGraph とは @MappedSuperclass のフィールドは指定できない EntityGraph の API バグと回避法 EntityGraph とは JPA 2.1 で標準化された、Entity のフェッチ戦略として EAGER / LAZY を個別に設定できる EntityGraph。 EntityGraph<Employee> graph = em.createE</employee>…

ディープラーニングを Deeplearning4j でカジュアルに始める(その3)

はじめに Deeplearning4j のプロジェクトを準備する MNIST データベース データセットの定義 ネットワークモデル モデルの保存と復元 サーバの実装 アプリケーションの起動 まとめ はじめに 本稿では Deeplearning4j を使った、ディープラーニングについて説…

Quarkus 関連記事の一覧

リリースノート Quarkus リリースノート一覧 導入編 Quarkus による初めてのアプリケーション作成(Quarkus 0.23) Quarkus を Gradleではじめる(Quarkus 1.0) Quarkus CLI の使い方(Quarkus 2.2) 活用編 Quarkus によるJPAアプリケーション作成(Quarkus 0.23)…

ディープラーニングを Deeplearning4j でカジュアルに始める(その2)

はじめに 損失関数 損失関数の勾配と誤差伝搬法 勾配消失 重みの初期値 過学習と正規化 手書き数字の画像認識の実装 はじめに 本稿では Deeplearning4j を使った、ディープラーニングについて説明します。厳密な定義や数式には立ち入らず、意味合いと利用方…

ディープラーニングを Deeplearning4j でカジュアルに始める(その1)

はじめに Deeplearning4j とは Deeplearning4j によるニューラル・ネットワーク構築の流れ ディープラーニングとニューラル・ネットワーク 活性関数(Activation function) ニューラル・ネットワークのパラメータ MNIST画像データ 訓練用データセット ニュー…

JDK 16 : stream.toList() に見るAPI設計の難しさ

はじめに JDK 16 で導入された stream.toList() Collectors.toList() の API と実装 stream.toList() の API と実装 stream.toList() には安易に切り替えられない はじめに JDK 16 で追加された stream.toList()。 タイプ量が減るのは良いのですが、API 設計…

【Modern Java】Java16で正式リリースとなった instanceof パターンマッチング (JEP 394: Pattern Matching for instanceof)

JEP 394: Pattern Matching for instanceof パターン変数のスコープ パターン変数によるシャドーイング まとめ blog1.mammb.com JEP 394: Pattern Matching for instanceof インスタンスの型を判断して処理を行う instanceof-and-cast イディオム以下のよう…

【Modern Java】Java16で正式リリースとなった Records (JEP 395: Records)

JEP 395: Records レコードクラス宣言 レコードクラスのルール レコードクラスで出来ないこと レコードクラスでできること カノニカル・コンストラクタにパラメータ検証を追加する 引数の異なるコンストラクタを定義する ローカルレコードクラス アノテーシ…

Java で .tar.gz の圧縮・解凍

はじめに 対象ディレクトリ配下を .tar.gz .tar.gz を解凍 はじめに 成熟した Commons Compress を使うのがベスト。 dependencies { implementation 'org.apache.commons:commons-compress:1.20' } <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.20</version> </dependency> 対象ディレク…

WebSocket によるサーバサイドレンダリングなテトリスの作り方(その3)

はじめに テトロミノ ゲーム盤面上のブロック ゲームの実装 WebSocket エンドポイント WebSocket クライアント ゲームの実行 まとめ はじめに 前回からの続きです。 blog1.mammb.com 前回は Java API for WebSocket について見てきました。 今回は、前回の内…

WebSocket によるサーバサイドレンダリングなテトリスの作り方(その2)

はじめに エンドポイントの構成 ライフサイクルアノテーション @OnOpen @OnMessage @OnClose @OnError Session コネクションのクローズ User Properties すべての Session へ通知 RemoteEndpoint Encoder と Decoder サーバから定期的にPushするエンドポイン…

WebSocket によるサーバサイドレンダリングなテトリスの作り方(その1)

はじめに WebSocket とは Java API for WebSocket エンドポイント Tyrus サーバ WebSocket クライアント サーバの実装 まとめ はじめに WebSocket の利用方法について説明します。 サーバ側には JSR 356 Java API for WebSocket を使い、クライアント側には …

JOL で Java オブジェクトのメモリ情報を取得する

はじめに Java Object Layout (JOL)とは JOL の導入 JOL の使い方 GraphLayout ClassLayout VM まとめ はじめに Java にはオブジェクトが使用するメモリ容量を得る演算子がありません。 例えば、C や C++ における sizeof であったり、Rust における std::me…

JCenter は2022年2月で終了するので Gradle プロジェクトは早めの対応を!

JCenter の終了 どうすれば良いか JCenter への依存の確認方法 JCenter の終了 JFrog の以下の発表によると、JCenter は 2022年2月1日 で利用できなくなるとのことです。 jfrog.com 当初は 2021年5月1日 で終了でしたが、2022年2月1日 まで延期されました。 …

POI で巨大なExcelファイルを操作する

はじめに Usermodel 低メモリフットプリントなAPI Event API Streaming Usermodel API SAX Event API はじめに POI による Excel 操作はメモリ消費が激しいため、大きなファイルを操作する場合には注意が必要です。 xlsx 形式のファイル読み込みには SAX Eve…

h2database に見る Assertion スイッチによる初期化

h2database のソース見てたら以下のようなコードがあった Assertion (表明) Assertion スイッチによる初期化 h2database のソース見てたら以下のようなコードがあった private static final boolean ASSERT; static { boolean a = false; // Intentional sid…

JSF Bean Validation のエラー表示を Bootstrap で

はじめに 入力フォーム BeanValidation はじめに JSF における Bean Validation でのエラー表示についての小ネタです。。 入力フォーム 以下のようなテキスト入力を考えます。 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:jsf="http://xmlns.jcp.org/jsf"> ... <form jsf:id="form"> <div class="mb-3"> </div></form></html>

JSF HTML5-Friendly Markup における selectManyCheckbox の扱い方

はじめに selectManyCheckbox タグ selectBooleanCheckbox タグで代替する HTML5-Friendly Markup はじめに JSF の <h:selectManyCheckbox> タグは使わずに、<h:selectBooleanCheckbox> タグで代替しましょう という話です。 selectManyCheckbox タグ JSF の HTML BASIC タグである selectManyCheckbox のレ</h:selectbooleancheckbox></h:selectmanycheckbox>…

JSF Facelet タグライブラリのXMLネームスペースについて

はじめに XMLネームスペース 定義ファイルの所在 Facelet タグライブラリの定義 DOCTYPE の設定 はじめに JSF2.2 (JSR-344 2013年) から Facelet タグライブラリのXMLネームスペースが変更になりました。となりました。Sun 時代のネームスペースは下位互換の…

Logback でログが出力されなくなる時の対処法

結論 Logback の LogbackServletContainerInitializer 自動登録の無効化 ロガーの終了 まとめ 結論 Logback は自動的に ServletContextListener を登録しており、サーブレットのシャットダウンやアンデプロイにより contextDestroyed() イベントでロガーを s…