ポリグロット・ローコードリソース
このチュートリアルでは、Netuno 用のネイティブリソースを作成します。つまり、Netuno のベースディレクトリに配置され、apps フォルダ内の任意のアプリケーションから _foo.methodName(ars) という構文で利用できる Java クラスを作成します。
前のチュートリアルに従い、ここで作成する例は _keisan リソースです。これは簡単な算術演算を実行するためのサンプルリソースです。
まず、プロジェクトのフォルダ構造を作成する必要があります。この例では、プロジェクトが Keisan というフォルダ内に作成されるものとします。次に、パッケージ名(この例では org.netuno.addon.keisan)を反映したフォルダ構造を作成します。したがって、フォルダ構造は次のようになります。
Keisan/src/main/java/org/netuno/addon/keisan/resource/
この構造内に、カスタムネイティブリソースを定義する KeisanResource という Java クラスを作成します。
Keisan/src/main/java/org/netuno/addon/keisan/resource/KeisanResource.java
すると、クラス内で定義されるパッケージは次のようになります。
package org.netuno.addon.keisan.resource;
クラスがカスタムネイティブリソースを定義するには、そのクラスに org.netuno.tritao.ResourceBase アノテーションを付ける必要があります。name パラメータはリソース名になり、名前にアンダースコア(_)を付けてアクセスできます(この例では _keisan)。リソースを作成する最も簡単な方法は、org.netuno.tritao.resource.ResourceBase クラスを継承することです。
package org.netuno.addon.keisan.resource;
import org.netuno.tritao.resource.Resource;
import org.netuno.tritao.resource.ResourceBase;
@Resource(name = "keisan")
public class KeisanResource extends ResourceBase {
// ...
}
ResourceBase クラスを継承すると、リソースを初期化する必要がなくなり、正しい引数で super を呼び出すだけで済みます。
package org.netuno.addon.keisan.resource;
import org.netuno.proteu.Proteu;
import org.netuno.tritao.hili.Hili;
import org.netuno.tritao.resource.Resource;
import org.netuno.tritao.resource.ResourceBase;
@Resource(name = "keisan")
public class KeisanResource extends ResourceBase {
// ...
public KeisanResource(Proteu proteu, Hili hili) {
super(proteu, hili);
}
}
init 関数は必須で、その中で親クラスの getter を使って自クラスのコンストラクタを呼び出し、リソースを初期化します。
package org.netuno.addon.keisan.resource;
import org.netuno.proteu.Proteu;
import org.netuno.tritao.hili.Hili;
import org.netuno.tritao.resource.Resource;
import org.netuno.tritao.resource.ResourceBase;
@Resource(name = "keisan")
public class KeisanResource extends ResourceBase {
// ...
public KeisanResource(Proteu proteu, Hili hili) {
super(proteu, hili);
}
public KeisanResource init() {
return new KeisanResource(getProteu(), getHili());
}
}
その後、独自のフィールドと関数を定義します。
package org.netuno.addon.keisan.resource;
import org.netuno.proteu.Proteu;
import org.netuno.tritao.hili.Hili;
import org.netuno.tritao.resource.Resource;
import org.netuno.tritao.resource.ResourceBase;
@Resource(name = "keisan")
public class KeisanResource extends ResourceBase {
public double value = 0;
public KeisanResource(Proteu proteu, Hili hili) {
super(proteu, hili);
}
public KeisanResource init() {
return new KeisanResource(getProteu(), getHili());
}
public KeisanResource set(double v) {
value = v;
return this;
}
public KeisanResource plus(double v) {
value += v;
return this;
}
public KeisanResource minus(double v) {
value -= v;
return this;
}
public double get() {
return value;
}
}
あとはクラスをコンパイルし、KeisanResource.class ファイルが次のフォルダにあることを確認するだけです。
netuno/core/web/WEB-INF/classes/org/netuno/addon/keisan/resource/
または JAR ファイルを作成し、それが次のフォルダにあることを確認します。
netuno/lib/
このリソースを使用するテストアプリケーションを作成しましょう。
./netuno app name=keisan
このアプリケーションに、リソースを使用するサービスも作成しましょう。
例では、netuno/apps/keisan/server/services/keisan-test.js ファイルを作成します。
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
_keisan.set(10);
_keisan.plus(120);
_out.println(_keisan.get());
_keisan.set(10);
_keisan.plus(120);
_out.println(_keisan.get());
_keisan.set(10)
_keisan.plus(120)
_out.println(_keisan.get())
_keisan.set(10)
_keisan.plus(120)
_out.println(_keisan.get())
_keisan.set(10)
_keisan.plus(120)
_out.println(_keisan.get())
_keisan.set(10)
_keisan.plus(120)
_out.println(_keisan.get())
アプリケーションを起動します。
./netuno server app=keisan
これで、このサービスに次のリクエストを送ると、
http://localhost:9000/services/keisan-test
値 130 が返されます。
Java コードでリソースを使用するには、org.netuno.tritao.Web や org.netuno.tritao.event.EventBase のようないくつかのクラスが提供する resource 関数を使います。この関数がリソースを初期化します。
keisan リソースを使用したいクラスでは、次のようにします。
import org.netuno.addon.keisan.resource.KeisanResource;
// ...
KeisanResource keisan = resource(KeisanResource.class);
keisan.set(10);
keisan.plus(120);
System.out.println(keisan.get());
// ...
プロジェクトの完全なファイルはこちらのリンクで確認できます。