ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

AsakusaFW Viewから1レコード取得する方法

2021-12-18 23:34:16 | PG(分散処理)

AsakusaFW & Tsurugi Advent Calendar 2021の18日目です。

AsakusaFWにはViewというものがあって、少量データが対象ですが、ユーザー演算子でデータを自由に読むのに使えます。(GroupViewはキーあり、Viewはキー無しという位置づけ)
Viewは複数レコードを対象としていて、JavaのIterableを継承しているので、Iteratorパターンやfor文でループして扱うのが基本です。

for(Iterator i = view.iterator(); i.hasNext();;) {
  DataModel model = i.next();
  ~
}

for(DataModel model : view) {
  ~
}

一方、Viewは読み込み専用のグローバル変数のようなものを扱いたいときに便利で、そういう使い方をするときは、必ず1レコードだけ存在していると想定してよいでしょう。
そうすると、わざわざループで1レコード取得するのはちょっと冗長です。
ViewはIteratorを取得できるので、view.iterator().next();として1レコード取得したいところですが、AsakusaFWのViewはhasNext()を必ず呼ぶ想定になっているようで、例外が発生してしまいますorz
(この事象はけっこう昔に発見していて、もう直ってると思っていたのに、直っていなかったようですorz)
現状では、地道にループさせるしか方法が無いようです。(ループして1レコードだけ返すメソッドを用意しておけばいい話ではありますが^^;)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

static importできないメソッド

2021-12-18 18:32:33 | PG(Java)

Java Advent Calendar 2021の17日目です。

Asakusa Frameworkという、Javaで分散処理して高速化するバッチアプリケーションを開発・実行するフレームワークがあります。

AsakusaFWでは、Operatorと呼ぶクラスをJavaでコーディングするのですが、このOperatorクラスは他クラスから継承してはいけないことになっています。(継承すると警告が出る)
個人的には、共通的に使われる便利メソッドを親クラスに定義しておいて、子クラスから呼び出すのが好きなんですが、オブジェクト指向原理主義者からは糾弾される行いみたいですねorz
親クラスに書いておけば、同名メソッドをオーバーライドして特別な場合だけ別処理にすることも出来て便利なんですけどねぇ。

そういうメソッドはstatic importしろということらしいです。
ところが、JavaではtoStringという名前のメソッドはstatic importできないらしいです!!
「String toString(Hoge hoge)」こそ、用意しておきたいメソッドだったのにぃ!

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

AsakusaFWはLog4jを使っていないそうです

2021-12-17 22:36:00 | PG(分散処理)

AsakusaFW & Tsurugi Advent Calendar 2021の17日目です。

なんでも、Log4j2に深刻な脆弱性(CVE-2021-44228)が見つかったとかで、問題になっています。
外部から渡された値をLog4j2でログ出力していると、任意のコードを実行される可能性があるのだそうです。

しかしAsakusaFWはLogbackを使っていてLog4jは使っていないそうなので、関係なさそうです。

AsakusaFWがビルドツールとして使っているGradleはLog4jを使っているらしいですが、ビルドツールだし、外部から渡された値をログ出力するシチュエーションは無い気がするので、問題無いと思われます。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

AsakusaFWとSQLのNULL

2021-12-16 18:00:13 | PG(分散処理)

AsakusaFW & Tsurugi Advent Calendar 2021の16日目です。

昨日のKurosawaさんのアドベントカレンダー『好きなSQL嫌いなSQL』を見て、ちょっと笑ってしまいましたw
SQLのNULLって、ほんと面倒ですよねorz

特に論理値(boolean)にNULLが混じると大変で、三値論理は鬼門です。
AsakusaFWはJavaなので、nullとnullは等しいという扱いですが、SQLはNULL=NULLはfalseなので、まともに扱おうとするとほんと面倒ですorz
基本的にはnotが出てこない限りは、NULLとの比較は全部false扱いにすればいいんですが。
SQLのA = Bは、AやBがnullの場合はfalseですが、not(A = B)もfalseですよね。
頭こんがらがるorz

コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

AsakusaFWでLocalDateTime

2021-12-14 00:00:00 | PG(分散処理)

AsakusaFW & Tsurugi Advent Calendar 2021の14日目です。

AsakusaFWはJava8なので、Java8の日付時刻APIのLocalDateTime等を使用することは出来ます。

ただ、AsakusaFWが用意しているDateUtilは、java.util.Dateやjava.util.Calendarとの変換メソッドは提供されていますが、日付時刻APIのものは提供されていないんですよね。
AsakusaFWのDateTimeも日付時刻APIのLocalDateTimeもyear,month,day,hour,minute,secondの取得やそれによる値の設定は出来るので、それを使うのが確実です。(が、実行効率的に、もうちょっと良い方法がありそうな気はします^^;)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする