SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webフレームワーク「Alinous-Core」でアプリケーション開発をはじめよう

Alinous-CoreにおけるJava Connectorの紹介

MVCのモデル部分はJavaのオブジェクト指向で


  • X ポスト
  • このエントリーをはてなブックマークに追加

Java Connectorの解説

 では次に、Java Connectorがどのように構成されているかを解説します。

フォルダ構成について

 前節で次の図4のようなプロジェクトが作成されます。

図4.サンプルプロジェクトの構成
図4.サンプルプロジェクトの構成

ALINOUS_HOMEフォルダ

 ALINOUS_HOMEフォルダは、このAlinous-Coreサーバがエクスポートするドキュメントルートです。通常のAlinous-Coreプロジェクトと同様です。

ALINOUS_HOME/libフォルダ

 このフォルダにJava Connectorで利用するjarファイルを置くことで、Alinous-Coreは置かれたjarファイルを自動で検知してホットデプロイを行います。必要なjarファイルは全てこのフォルダに置きます。また、1度デプロイしたjarファイルをアンデプロイするためには、このフォルダから削除します。すると、Alinous-Coreサーバが削除されたことを検出し、自動的にアンデプロイします。

srcフォルダについて

 「src」フォルダは、一般的なJavaのためのソースフォルダです。サンプルで利用するJavaのソースコードはこの中に全て入っています。

Java Connectorのビルド

 Java Connectorのビルドは、プロジェクトのルートにある「build.xml」ファイルを実行することによって行われます。「build.xml」ファイルの内容はリスト1のようになっています。

 「build.xml」には、コンパイルされたJavaのクラスをアーカイブしたjarファイルをAntのjarコマンドで作成し、先ほど述べた「ALINOUS_HOME/lib/」フォルダに「functions.jar」という名前をつけて保存するという操作が実装されています。Alinous-Coreは、ホットデプロイに対応しているので、サーバが立ち上がっている場合には、ビルド後、自動的にデプロイされます。

リスト1.build.xmlの内容
<project basedir="." name="AlinousJavaCore" default="make_jar">
  <target name="make_jar">
    <delete file="ALINOUS_HOME/lib/functions.jar" />
    <jar destfile="ALINOUS_HOME/lib/functions.jar" update="true">
      <fileset dir="bin/">
        <include name="**"/>
      </fileset>
    </jar>
  </target>
</project>

Javaの実装

 次に、Javaの部分の実装を見ていきます。まずは、「src」フォルダの中身を見てみましょう。

図5.srcフォルダの構成
図5.srcフォルダの構成

 「src」フォルダには3つのファイルがあります。このうち、「IAlinousFunction.java」は、Alinous-Coreのライブラリーの一部ですので、今回のサンプルで、実際にユーザーが作成する部分は、「org.example」パッケージ内にある2つのファイルのみとなります。「SampleConnector.java」が今回Java Connectorを使ってAlinous-Coreにエクスポートするメソッドを含むクラスです。では、実際に「SampleConnector.java」の内容を見てみましょう。

 リスト2のソースコードの中で、SampleConnectorクラスは、getHello()addArray()getMemberAndYou()という3つのメソッドをエクスポートしています。また、このクラスはIAlinousFunctionを実装しており、このインターフェイスを実装することでAlinous-Coreに対してこのクラスの中のメソッドをエクスポートするということを宣言しています。

リスト2.SampleConnector.java
package org.example;

import java.util.ArrayList;
import java.util.List;

import org.alinous.jdk.IAlinousFunction;

public class SampleConnector implements IAlinousFunction
{
  /**
* Retrun the names of methods to export.
*/
public String[] getFunctions() { return new String[] {"getHello", "addArray", "getMemberAndYou"}; } /**
* Return the name of this function container.
*/
public String getPrefix() { return "Sample"; } public String getHello(String yourName) { return "Hello " + yourName + "."; } /**
* Add new values into array
* @param val
* @param inArray
* @return
*/
public String[] addArray(String val, String[] inArray) { String[] newArray = new String[inArray.length + 1]; for(int i = 0; i < inArray.length; i++) { newArray[i] = inArray[i]; } newArray[inArray.length] = val; return newArray; } /**
*
* @param you
* @return
*/
public SampleBean[] getMemberAndYou(SampleBean you) { System.out.println(you.getName() + " " + you.getEmail()); List<SampleBean> list = new ArrayList<SampleBean>(); list.add(new SampleBean("TOM", "TOM@tomtest.com", new Integer(40))); list.add(new SampleBean("BOB", "BOBBOB@BOBtest.com", new Integer(21))); list.add(you); return list.toArray(new SampleBean[list.size()]); } }

 では、IAlinousFunctionインターフェイスを実装したときにはどのようなメソッドを実装しなくてはならないのでしょうか? リスト3を見てください。IAlinousFunctionインターフェイスを実装したときには、getPrefix()getFunctions()の2つのメソッドの実装が必要です。しかし、逆に言ってしまえば、この2つのメソッドさえ実装してしまえば、後は自動的にメソッドを検出してJava Connector用のメソッドとして登録されます。エクスポートするためのメソッドは引数および戻り値として、

  • String型の変数
  • Integer、 Longなどのプリミティブのラッパークラス
  • それらの値で構成されるJavaBean
  • それらの配列

 を利用することが可能です。

リスト3.IAlinousFunction.java
package org.alinous.jdk;

public interface IAlinousFunction {

  /**
* Return the name of this function container.
* If function's name is "Sample.func()", the prefix is "Sample".
*/
public String getPrefix(); /**
* Retrun the names of methods to export.
*/
public String[] getFunctions(); }

Java Connectorを利用する

 それでは、エクスポートしたメソッドを動かしてみましょう。ALINOUS_HOMEフォルダ内にある「execute.alns」ファイルでこれらのメソッドを関数として呼び出しています。Alinous-Coreにはデバッガーが備え付けられているので、それを利用してステップ実行することで動きを確かめることができます。

 関数の名前は全て、Sampleというプレフィックスがついていますが、これは先ほどのSampleConnectorクラスで、getPrefix()で返した文字列の値に相当しています。後はgetFunctions()で登録した関数名をその後の.(ピリオド)に続いて書くことによって呼び出すことができます。

リスト4.execute.alnsの内容
// standard
$HTLLO_STR = Sample.getHello("Tommy");

// Function with array parameter
$MEMBERS[0] = "TOMMY";
$MEMBERS[1] = "BOB";
$MEMBERS[2] = "MARY";

@MEMBERS = Sample.addArray("NANCY", @MEMBERS);

//
@MEMBERS = Sample.addArray2("TED", @MEMBERS);

$TOM.name = "TOM";
$TOM.email = "tomtom@tomtom.com";
$TOM.age = 16;

@MEMBERS = Sample.getMemberAndYou($TOM);

return 0;

まとめ

 今回の記事で、Alinous-CoreのJava Connectorがどのようなものか分かっていただけたと思います。最近、Alinous-Coreのアプリケーションサーバ自体はどのようなものなのかという質問をよく受けます。実は、Alinous-Coreアプリケーションサーバ自体はサーブレットコンテナ上で動作するwarファイルとして提供されています。そのため、Javaととても相性がよく、今回のようにJavaのメソッドをそのままインポートして実行することができます。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Webフレームワーク「Alinous-Core」でアプリケーション開発をはじめよう連載記事一覧

もっと読む

この記事の著者

飯塚 友裕(イイヅカ トモヒロ)

Eclipse関連のソースコード自動生成プロダクトの開発者。ソースコード自動生成エンジンを他社に供給する技術エンジン会社「CROSSFIRE JAPAN, INC.」で、O/RマッピングツールやJavaによるSQLパーサーを開発。現在、NetBeans.org(米国)のパートナー。最近は、Alinous-Coreを利用したパッケージビジネスを行っています。SEO対策対応ECサイト構築パッケージOpen-ECAlinous-Coreのソースコードダウンロードhttp://sourceforge.jp/projects/alinous-core/はてなブログhttp://d.hatena.ne.jp/i-zuka/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1377 2008/09/03 13:59

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング