SAStrutsでUnsupportedOperationException

Seasar2のサポートはずいぶんと前に終了しましたが、SAStrutsのライブラリを使う機会があり、そこで表題のエラーに遭遇したので記事を書くことにしました。

アクセス解析を見てると、古い技術の記事もたまにアクセスがあったりするので、もしかしたら1,2人くらいには役に立つ情報かもしれません。

 

UnsupportedOperationException

この例外自体はJavaの標準的なExceptionの1つであり、「サポートされていない操作が行われた」という例外です。

多くの場合、意図的にThrowされるExceptionでしょう。非推奨だったAPIがバージョンアップでついに廃止APIになったときとか。

 

今回発生したエラーは以下でした。

java.lang.UnsupportedOperationException: [ESSR0746]エンティティ(XXXX)の検索にFOR UPDATEが指定されましたが、DBMS(hsql)ではサポートされていません。
	at org.seasar.extension.jdbc.query.AutoSelectImpl.forUpdate(AutoSelectImpl.java:1370)

AutoSelectImplはS2JDBCの機能の1つにある「SQLを自動生成するクラス」です。

そこでこのエラーが発生するということは、なんとなく設定の問題なのかなと思いました。

ライブラリである以上、ソースのバグであるなら既に誰かが報告しているでしょう。

 

今回の根本的な原因は「s2jdbc.dicon」のダイアレクトに関する設定の漏れでした。

Seasar2 - S2JDBC - セットアップ

 

使用しているDBに応じて、dialectプロパティを書いてあげる必要がありました。

追記したことで、エラーが発生した処理も正常に動作するようになりました。

 

 

UnsupportedOperationException自体は数多くのライブラリで発生する可能性があるでしょう。

発生した場合は、その次に書かれているであろうThrowしたクラスを見て、そいつがどんなものか調査してみましょう。

 

 

ちなみに、念のため該当箇所のソースを見てみたら、まさにという記述でした。

public AutoSelect forUpdate() {
    final DbmsDialect dialect = getJdbcManager().getDialect();
    if (!dialect.supportsForUpdate(SelectForUpdateType.NORMAL, false)) {
        final EntityMeta entityMeta = getJdbcManager()
                .getEntityMetaFactory().getEntityMeta(baseClass);
        throw new UnsupportedOperationException(MessageFormatter
                .getMessage("ESSR0746", new Object[] {
                        entityMeta.getName(), dialect.getName() }));
    }

    forUpdateType = SelectForUpdateType.NORMAL;
    return this;
}

JDBCManagerからdialectを取得して、DBがfor update文をサポートしているかを判定しています。

ここら辺から、JDBC関連の特にdialectに関する問題であることが推測できます。

ワールドトリガー 第206話を読んで

先月は作者急病のため休載でした。

また、前回の205話までがコミックス第23巻に収録されました。

ということで、それらの続き。

ワールドトリガー 第205話を読んで

worldtrigger.info

立てた予想の答え合わせです。続きはネタバレがあるので注意。

続きを読む

【メルスト】レイドで初カンスト

関連

【メルスト】初心者が最初にやること

【メルスト】初心者が慣れてきたらやること

あんまり詳しくないので上記のふわっとした記事を書いて以降は、のんびりと継続していました。

ギルバトはやらないので、メインのコンテンツはシャペルルルの絵本とレイドです。

絵本はなんとか表を全て回れるようになり、レイドはLv150までルーム協力のもと到達していて、前回は頑張ってLv200までいきました。

 

今回は火属性モンスター「フラウレイン」がレイドボスでしたが、ユニットボーナス対象の★5を2体も持っていたのが大きかったのだと思います。

f:id:azuma006:20210227220410p:plain

こんな補正があるユニットボーナスなんて知らなかったんですが、調べてみたところ七つの大罪コラボ辺りから導入されるようになったようです。たぶん。

その他過去イベント -メルクストーリア - 癒術士と鈴のしらべ -攻略Wiki【メルスト攻略】 - Gamerch

 

 

ユニットボーナスを踏まえて組んだユニットがこちら。

f:id:azuma006:20210227220829p:plain

★5前衛打撃「カイザー」と★5後衛魔法「イライアス」に補正が掛かるので、その2体を主軸に据えました。

最初は中衛回復を入れてエンハンサールーンを使いましたが、何度か戦っていると相手が動かなくなることに気づきました。

どうやら、カイザーのリーチ30よりも相手のリーチが短くて、フィクセイトルーンによる足止めが発揮されていたようです。

なら回復は不要ということで、★4後衛銃弾「リッカリリィ」と★4後衛弓矢「ステラ」を組み込んで、最後の1枠で中衛ボーナス(ミドルソロ)を確保しました。後衛の3体は上位ルーンを装備しています。

最後の1枠は、5体全て異なる武器種にすることで発動するバラエティーズのために斬撃が突撃を入れることにしました。

下記に今回のレイドでのおすすめユニットが紹介されていますが、その中から手持ちの★4前衛斬撃「リムル」、★4中衛斬撃「つらら」、★4中衛突撃「ラインハート」を試したところ、何故かラインハートが一番安定して火力が伸びたため、基本的にはこのユニットで挑戦しました。

【メルスト】第36回レイド、フラウレイン(炎属性) へ向けた準備 | ユガラボ

リムルは上位ルーンが装備できるし、つららはラインハートよりDPSが高そうでしたが、なんででしょうか。レベルはリムルがLv135、つららとラインハートはLv110です。

シードについては「アクアソウル(アラーモウド)」「ファイアブレイク(アトング)」「エクステンドタイム(皇獣ガオウ)」「テラーロアー(地龍皇帝ソドム)」「ファイアイクリーズ(ピラオロス)」を付けています。

基本的には、このソウル+ブレイク+エクステンド+テラロア+イクリーズを属性ごとにセットにしています。今回はフィクセイト効果でテラロア不要だったので、今思えばもっと火力を伸ばせたかもしれません。

 

レイドはレベル帯によって特定の武器種に補正がかかります。

打撃+銃弾や突撃+魔法の場合はこのユニットで問題ないですが、斬撃+弓矢の場合は1人しかいないので、最後の枠をつららに交換していました。

f:id:azuma006:20210227220837p:plain

 

これで、SPや時間をしっかり貯めたうえで自分カンストどころか他人カンストまで達成できました!

f:id:azuma006:20210227223036p:plain

毎回クエスト失敗扱いになってましたが、カンストで撃破すると討伐自体は未完了でも経験値が入ってくるので、なんか凄い勢いでプレイヤーレベルが上がっていきました。

APも回復していくのでBP稼ぎも楽になり、結果的に他人のレイドも積極的に狩りにいって、めっちゃ高いギルド資材以外は全回収も楽でした。とても良い循環。

前回までのレイドでは、時間をフルに使っても4億くらいが限度でした。

ユニットボーナスを得られていなかったり、回復が必要なリーチだったりしたので今回の環境が手持ちとマッチしたのも大きいですが、直前のルーンハントチャレンジでルーンコレクトとアタック、クイック、エグザントのルーンの魔力値を一通り30以上にできたのも効果があったんだと思います。たぶん。

ただ、エグザントのルーンを少数精鋭にしてしまったせいで、今までの救援エグザント部隊の何人かをリストラしなければならなくなりました。

幸い、10人程度でも30秒あればだいたい発動してくれたので問題はなさそうです。救援ユニットは自動ルーン付かないという事実も今回になって初めて知りました。

 

ギルド施設については、祭壇Lv80、訓練所Lv70、他Lv50くらいです。ソロギルドなんでしょうがないですね。他のギルドならもっと火力も伸びると思います。

ひとまず、ベルセルク調整やエンハンサーを使わなくてもカンストできることが実感できたのは嬉しいです。

【デレステ】初回ぶりのLIVE Carnivalイベント SSSランク到達

こつこつと続けているデレステですが、今年はガシャ運が良かったのと、イベントにかけられる時間が増えたことで、初回以来のSSSランクに到達できました。やったね。

初回のイベントは記事にしていました。Googleフォトの仕様変更で過去記事の画像が軒並みリンク切れになっていました。すみません。

【デレステ】新イベント「LIVE Carnival」Sランク突破編

【デレステ】新イベント「LIVE Carnival」SSランク突破編

当時から状況が変わっているのもあって、改めて書いてみようと思いました。

続きを読む

ワールドトリガー 第205話を読んで

先月の続き。

ワールドトリガー 第204話を読んで

worldtrigger.info

立てた予想の答え合わせです。続きはネタバレがあるので注意。

続きを読む

納め(2020年)

今年も1年、お疲れ様でした。

関連:

納め(2013)

納め(2014)

納め(2015年)

納め(2016年)

納め(2017年)

納め(2018年)

納め(2019年)

今年は物凄く変革のあった年となりました。

ここ数年、多忙な日々が続いていましたが、今の情勢でテレワークが主体となり、自分も例にもれず働き方に大きな変化がありました。

その結果、残業というものがほとんど無くなりました。もちろん、テレワークになっただけが原因ではないのですが、無駄なものが省かれてくれたのも事実です。

これまでよりも趣味に割ける時間が増えたので、何かを始めようかとも思っています。

ワールドトリガー 第204話を読んで

かつて週刊少年ジャンプで連載され、今はジャンプSQ.に移籍連載している「ワールドトリガー」。めっちゃ好きなんです。

worldtrigger.info

なんていうか、キャラクターのひとりひとりが勝つために考えながら動いていて、勧善懲悪系にありがちなストーリー進行の足を引っ張るだけの存在がいないのが読みやすいです。

 

少し前にB級ランク戦が一段落し、遠征部隊の選抜試験編が雑誌のほうで始まりつつあるのですが、12月号に掲載された前話では「隊員をシャッフル」して試験を行うという、くっそワクワクする展開で終わりました。

ここから、1月号に掲載された最新話(第204話)を読んで思ったことを書こうと思いました。

普段はネタバレにならない程度でぼそっとインターネットの片隅に感想を流すだけでしたが、この展開は妄想が爆発するあれでしたので、とりあえず未読や単行本派のかたは注意していただければと。

 

 

 

 

 

 

 

続きを読む