intra-mart Accel Platform スクリプト開発モデル プログラミングガイド 第17版 2021-12-01

自作Javaクラスとの連携方法

自作Javaクラス との連携を行う場合、Javaクラス ファイルの配置と自作Javaクラス側、サーバサイドJavaScript 側の双方に特別な記述方法が必要です。
本項では、これらの設定方法や利用方法などを紹介します。

前提条件

  • intra-mart e Builder for Accel Platform をインストール済みであること。
  • モジュール・プロジェクトの作成が完了していること。

自作 Javaクラス との連携手順

以下の手順で自作の Javaクラス との連携を行います。

ステップ1:Javaクラス ファイルの配置

自作Java Class ファイル、または jarファイルを、既定のフォルダに配置することで、 intra-mart Accel Platform 上で動作させることができます。
この例では、プロジェクトの src/main/java/ に 「sample」パッケージを作成し 「SampleClass.java」を作成します。
SampleClass.java
ファイルに内容を加えます。
//パッケージ定義
package sample;

//クラス定義
public class SampleClass {

    // 処理を追加します。

    public static String staticMethod() {
        return "staticMethod";
    }

    public boolean getTrue() {
        return true;
    }
}

ステップ2:サーバサイドJavaScript 側の記述方法

サーバサイドJavaScript を作成する場合は、自作Javaクラス を JavaScript オブジェクトとして生成する場合、Java の package名の前に必ず「Packages」句を記述します。
function init(request){
	// インスタンス生成する必要がある場合は new 演算子を用いる事でコンストラクタを呼び出します。
	var instance = new Packages.sample.SampleClass();
	// static method なのでそのまま使えます。
	var static = Packages.sample.SampleClass().staticMethod();
	Debug.browse(instance.getTrue(),static);
}

ステップ3:intra-mart Accel Platform の再起動

intra-mart Accel Platform を再起動します。

Packagesの利用に関しての注意事項

注意

Packages を利用することで処理速度が出ない場合があります。
Packages.foo.bar.baz等の形式で記述した場合は以下のフローで処理が行われます。
  1. Packageの中にfooが存在するかを確認 (synchronized)
  2. fooの中にbarが存在するのかを確認
  3. barの中にbazが存在するのかを確認
これらの確認を行う際に、Javaクラスの呼び出し(Packagesを利用した呼び出し方法)では、全て確認処理部分が同期化されます。
従って、大量のリクエストがある場合、全てのリクエスト処理においてこの存在するかを確認する部分で同期化が走り処理速度が出ない場合があります。
以下のサンプルを参考にご利用の際には同期化を減らす等を検討してみてください。
  • 事前に変数に代入する
    // 処理の度に Packages を宣言せずに事前に変数に代入しておく
    var baz = Packages.foo.bar.baz; 
    baz.XXX();
    
  • グローバル関数の初期化時に変数に代入する
    // init.jsの中で確保しておく, グローバル関数の初期化時に事前に変数に代入しておく
    var baz = Packages.foo.bar.baz;                        
    function global_baz(){
        return baz();
    }
    
    /**
     * Initialize function for user-application.
     * @param nothing
     * @return void
     */
    function init(){
    	return;
    }
    
    
    /* END OF FILE */