サポート > Wagby Developer Network(R8) > 移行 > R6/R7からR8への移行

R8.0で変更された仕様を説明します。

R7.8 よりWagbyが内部で保持する複合キーの文字列表現が $ から $SEP$ に変更されました。

R7.8以前 R7.8以後
主キー1$主キー2$主キー3.. 主キー1$SEP$主キー2$SEP$主キー3..

この変更により、自動生成されるコードが変わります。これまでソースコード中にハードコードされていた"$"は、PrimaryKeyUtils.PKEY_SEPARATOR() になります。カスタマイズしたソースコード内にこの箇所があった場合、適切に置換してください。

R7.10 より、画面レイアウトにおいてグループの表示方法が未指定の場合の扱いが変わりました。

R7.10以前 R7.10以後
最初のレイアウト名は、グループの表示方法の指定にかかわらず四角で囲む。 最初のレイアウト名も、グループの表示方法の指定が有効となる。

この変更により、自動生成される JSP ファイルが変わります。

R7.10より、変更履歴機能におけるファイル型項目は、実ファイル名のみが変更履歴ログに記録されるように仕様が変更されました。それまでは upload_dirを起点とする相対パス表記となっていました。

R8 へバージョンアップ後は、変更履歴機能のファイル型項目の表記が(実ファイル名のみが記録されるように)変更されます。

JavaScriptエンジンはNashornに統一

R6/R7では Java 6/7 環境を利用できたため、サーバサイドJavaScriptエンジンに Rhino を利用できました。R8 では Java 8 以上となったため、サーバサイドJavaScriptエンジンはNashornのみとなります。Rhinoを前提にしていたスクリプトはNashorn用に修正してください。

HSQLDBのバージョンアップによる影響

R7.10 より HSQLDB を 2.0.0 から 2.3.4 へバージョンアップしています。その影響で SELECT COUNT() の戻り値が、これまでは Integer でしたが、これが BigInteger へ変更されています。

いずれも java.lang.Number インタフェースの実装クラスですが、JavaScript での厳密等価演算子(===)利用時には注意が必要となります。

厳密等価演算子では同じ 0 という値を持っていても Integer と BigInteger は型が異なるため等価という判定とはなりません。 スクリプト内に記述した数値は Nashorn が自動的に java.lang.Double、java.lang.Long または java.lang.Integer オブジェクトとして解釈する仕様です。 https://docs.oracle.com/javase/jp/8/docs/technotes/guides/scripting/nashorn/api.html#sthref22

このため、スクリプトに次のように記載したコードは影響があります。

var recordCount = session.createSQLQuery(
   "SELECT COUNT(*) FROM \"model1\" WHERE \"pkey\" = " + pkey).uniqueResult();
if ( recordCount === 0 ) {
...

ここで「if ( recordCount === 0 ) { 」の "0" は Nashorn 側で Integer と解釈されたため、HSQLDB 2.0.0 では SELECT COUNT(*) の戻り値が同じ Integer となり、厳密等価演算子でうまく動作していましたが、HSQLDB 2.3.4 では Integer と BigInteger との比較となり等価と判定されなくなります。

対応方法

数字との比較では、厳密等価演算子を使わないことで回避できます。

if ( recordCount == 0 ) {

メール送信処理のスクリプト

R7 でメール送信のスクリプトで次のように $${{...}} と記述していた箇所を、${...} に変更してください。

旧表記

replaceMap.put("$${{message}}", "Hello Wagby");

新表記

replaceMap.put("${message}", "Hello Wagby");

BaseActionの廃止

BaseActionクラスは R7.10 で廃止されました。このクラスは Struts に依存していたためです。カスタマイズコードで直接、BaseAction を利用していた場合は、次の手順に従って書き換えてください。

BaseAction.getCsvEncoding()

JfcConfigクラスが代替します。次のコードをご利用ください。

p.appctx.getBean(jp.jasminesoft.jfc.service.JfcConfig.class).getCsvEncoding()

BaseAction.getJspEncoding()

JfcConfigクラスが代替します。次のコードをご利用ください。

p.appctx.getBean(jp.jasminesoft.jfc.service.JfcConfig.class).getJspEncoding()

BaseAction.getJFCErrorManager()

BaseAction.getJFCErrorManager()は、applicationContextから取得してください。 ActionParameter クラスのインスタンス p が使える場合、次のように記述することができます。

p.appctx.getBean(JFCErrorManager.class)

ShowListXXXControllerなど、jp.jasminesoft.jfc.controller.BaseController を継承したクラスであれば、次のように記述できます。

getJFCErrorManager()

HelperやProcessBeanなどSpringのbeanとして指定されている場合、下記のようにAutowiredでbeanが作成された際にセットすることができます。

import org.springframework.beans.factory.annotation.Autowired;
...
   private JFCErrorManager errorManager;
...
   @Autowired
   public void setJFCErrorManager(JFCErrorManager errorManager) {
       this.errorManager = errorManager;
   }

BaseAction.MultiPagemapName

jp.jasminesoft.jfc.controller.BaseControllerクラスのMultiPagemapNameフィールドを利用してください。

BaseAction.isDeniedNullForwardRequestName

BaseAction に用意されていた定数は BaseController クラスが管理します。

jp.jasminesoft.jfc.controller.BaseController.isDeniedNullForwardRequestName

HibernateUtilクラスのunbindCurrentSessionメソッド

HibernateUtil#getCurrentSession() を使って、HibernateSession を取得した場合に、HibernateUtil#unbindCurrentSession() の呼び出しが必要でしたが、R8 では HibernateUtil#getCurrentSession() が廃止となったため、unbindCurrentSession() の呼び出しも不要となります。

カスタマイズコードで unbindCurrentSession() を呼び出していた部分は、R8 では何もする必要はありません。

JFCDataAccessManagerクラスのclearCountAllメソッド

R8 では JFCDataAccessManager#clearCountAll() を呼び出す処理が不要となります。

例えば次のようなコードを記述していた場合、これをそのまま削除してください。

/* R8 では不要となったコード */
JFCDataAccessManager dam =
  (JFCDataAccessManager)p.appctx.getBean(
   "JFCDataAccessManager");

if (dam == null) {
  logger.error("failed get JFCDataAccessManager");
} else {
  dam.clearCountAll(p);
}

ジョブ定義の変更

「バッチ処理 > 自作クラスをジョブスケジューラに登録する」を行っている場合、applicationContext に登録する bean 定義ファイルに変更が生じます。Spring Framework のバージョンが 3 から 4 へバージョンアップされたため、org.springframework.scheduling.quartz.JobDetailBean クラスが廃止されました。代わりにorg.springframework.scheduling.quartz.JobDetailFactoryBean クラスを指定するようにしてください。[詳細...]

p.con の廃止

R8.0 よりフレームワーク内の DbActionParameter クラスが廃止されました。これまで "p" というオブジェクトは DbActionParameter クラスのインスタンスでしたが、これが ActionParameter クラスのインスタンスになります。この変更でp.conというオブジェクトが廃止されました。

p.con の実体はデータベースコネクションオブジェクトです。カスタマイズコードで p.con を使っていた場合、これに変わる方法として HibernateUtil.openSession() を使って Hibernate Session を取得し、HQL (Hibernate で利用できるSQL) を使うように変更してください。

import jp.jasminesoft.jfc.app.HibernateUtil;
...
    {
        org.hibernate.Session session = HibernateUtil.openSession();
        String hql = ...HQLで記述されたDML...;
        Query query = session.createQuery(hql);
    }

HQL プログラミングの詳細は Hibernate のドキュメントをお読みください。Wagby R8 系に同梱されている Hibernate のバージョンは 5.1 です。

Hibernate のバージョンアップ

R8.0 に同梱される Hibernate は 5.1 となっています。旧版の Hibernate に依存していたコードがあった場合、これを 5.1 で動作するように修正してください。

FilterManagerのbean化8.0.3

入力フィルタを管理するクラス JFCFilterManager を Spring の bean としました。この影響で FilterHelper クラスの次のメソッドが廃止されています。filter メソッドは必ず引数の最後に ActionParameter 型のインスタンス変数 p が必要となります。

  • public void filter(T t, Set<String> itemSet);
  • public void filter(T t, FilterManager filterman0, Set<String> itemSet);
  • 開発者は customize/java/jp/jasminesoft/wagby/app/MyJFCFilterManager.java を用意することで、FilterManager クラスの getFilter メソッドをオーバーライドすることができます。

R7 で設定していた "CAS" による LDAP/ActiveDirectory の設定は無効になりました。本設定は R8 方式として再度、改めて行なってください。

"CAS" に代わって "Spring Security" を用います。Spring Security の詳細はこちらをお読みください。

バージョン

R7では REST API に v1 と v2 モードが存在していました。R8 では v2 モードのみとなりました。Designer で選択することはできません。

バージョン 1 (旧方式)

R7.10.3までの形式です。JSONオブジェクトのキー名はキャメルケース形式になります。

例えば項目名 "user_address" は、JSONオブジェクトのキー名が "userAddress" になります。

バージョン 2 (標準方式)

R7.11以降の形式です。JSONオブジェクトのキー名をキャメルケース形式から、項目名をそのまま出力します。

例えば項目名 "user_address" は、JSONオブジェクトのキー名も同じ "user_address" になります。

バージョン1を使う場合 [非推奨]

REST API を利用する際にHTTPヘッダ X-Wagby-RESTAPIVersion: v1 を指定することができます。この場合、モデルのREST API Version が v2 でも、このアクセスにのみ v1 を使うことができます。v1 を使う必要があるがモデル定義を変更したくない場合は、この方式をご利用ください。(ただし本方式は将来の Wagby で削除されます。あらかじめご了承ください。)

仕様変更

  • /rest/session でログオンする場合の method は PUT に変更されました。R7 までは POST でしたが、これが変わっています。

Wagby R8 は Spring Boot 1.5 を組み込んでいます。この影響で R7 と変わった点は次のとおりです。

Wagby の Spring Boot 対応とは、Spring Boot 形式の War ファイルを作成できるようになったという視点で行なっています。STS でアプリケーションを作成できるという意味ではありませんので、ご注意ください。(Wagby を使うため、STS で Java コードを書くというプログラミングを行うことはありません。)
  • Designerの環境設定で、Tomcatの「JVM最大永続世代ヒープメモリサイズ」「JVM初期永続世代ヒープメモリサイズ」設定欄は廃止されました。Java8以降では利用されないためです。
Wagby Developer Day 2018