Merapiを利用したサンプルプログラム

それでは、実際に簡単なアプリケーションを作成してみよう。公式サイトにあるサンプルプログラムも合わせて参照していただきたい。今回はAIR側をFlex SDK 3を利用して、Java側をJava SE 6を利用して作成する。

まず、Java側のプログラムは次のようにした。MerapiSampleクラス自身がIMessageHandlerをimplementsしており、AIRからメッセージを受信したら、それに反応して返事を返すようになっている。

import merapi.Bridge;
import merapi.messages.Message;
import merapi.messages.IMessage;
import merapi.messages.IMessageHandler;

public class MerapiSample implements IMessageHandler
{
        public static void main(String[] args) {
                System.out.println("Merapi sample started...");
                // メッセージハンドラを登録
                Bridge.getInstance().registerMessageHandler("merapiSample", new MerapiSample());
        }

        /**
         * メッセージハンドラ
         */
        public void handleMessage(IMessage message) {
                try {
                        // メッセージを受け取って表示
                        System.out.println("Get data from flex: " + ((Message)message).getData());

                        // メッセージを作成して送信
                        Message response = new Message("merapiSample", "Hello Merapi from Java.");
                        Bridge.getInstance().sendMessage(response);
                }
                catch(Exception e) {
                        e.printStackTrace();
                }
        }
}

コンパイルおよび実行には、Merapiで提供されるmerapi-core-0.0.80.jar、flex-messaging-core.jar;C:\software\merapi-0.0.90、flex-messaging-common.jar、tools.jarの4つのJARファイルが必要。

> javac -classpath [PATH_TO_JAR_FILES] MerapiSample.java

AIR側の本体はMerapiSample.mxmlというファイル名で以下のようにした。このプログラムはボタンをクリックする度にメッセージを送信し、返ってきたメッセージを受け取る。

<?xml version="1.0" encoding='UTF-8'?>
<mx:WindowedApplication 
   xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:merapi="merapi.*">
  <mx:Script>
    <![CDATA[
        import merapi.messages.Message;
        import mx.rpc.events.ResultEvent;

        private function handleResult(event:ResultEvent): void {
            // メッセージを受け取って表示
            var message:Message = event.result as Message;
            if (message.data != null) {
                var data:Object = message.data
                resultText.text += data + '\n';
            }
        }

        private function sendMessage(): void {
            // メッセージを作成して送信
            var message:Message = new Message("merapiSample", "Hello Merapi from Flex");
            bridge.sendMessage(message);
        }
    ]]>
  </mx:Script>

  <merapi:BridgeInstance id="bridge" result="handleResult(event)"/>
  <mx:Button x="20" y="10" label="SendMessage" id="button" click="sendMessage();"/>
  <mx:Text id="resultText" x="20" y="40"/>
</mx:WindowedApplication>

これを、次のようにMerapiで提供されるmerapi-core-0.0.80.swcをライブラリパスに含めてコンパイルする。

> amxmlc -library-path+=merapi-core-0.0.80.swc -- MerapiSample.mxml

アプリケーション記述ファイルはMerapiSample-app.xmlというファイル名で次のようにする。

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://ns.adobe.com/air/application/1.5">
    <id>MerapiSample</id>
    <version>v1</version>
    <filename>MerapiSample</filename>
    <initialWindow>
        <content>MerapiSample.swf</content>
        <visible>true</visible>
        <systemChrome>none</systemChrome>
        <transparent>true</transparent>
        <width>400</width>
        <height>200</height>
    </initialWindow>
</application>

以上で完成だ。AIRアプリケーションとしてAIRデバッガーランチャー(ADL)を用いて実行してみよう。インストールする前にまず、先にJava側のプログラムを起動する。

> java -classpath [PATH_TO_JAR_FILES] MerapiSample
Merapi sample started...

続いて、adlコマンドを使ってAIRアプリケーションを実行する。

> adl MerapiSample-app.xml

すると、以下のようにウィンドウが表示され、ボタンを押したらJava側のコンソールに「Hello Merapi from Flex」と表示されて、AIR側にメッセージが返って「Hello Merapi from Java」という文字列が出れば連携成功だ。

Merapiを利用したAIRアプリケーションの実行例

あとはadtコマンドを使って、AIR側のアプリケーションをパッケージ化すればよい。まずはパスワードを指定して自己証明書ファイルを生成し、それを用いてインストーラファイルを生成する。

> adt -certificate -cn SelfSigned 1024-RSA myCert.pfx [PASSWORD]
> adt -package -storetype pkcs12 -keystore myCert.pfx MerapiSample.air MerapiSample-app.xml MerapiSample.swf
password:

成功すると「MerapiSample.air」というファイルが生成されるので、これを実行すれば作成したAIRアプリケーションがローカルのマシンにインストールされる。あとは先程と同様にJava側のプログラムを起動した上で、インストールされたAIRアプリケーションを実行すればよい。

* * *

以上、Merapiを利用してAIRとJavaを連携させる簡単な例をお見せした。

AIR、Javaの基本的な知識があれば、ここまで試すのに1時間はかからないだろう。Merapiはそれくらい手軽に使うことができるツールなのだ。Merapiを仲介にしてAIRとJavaのパワーを最大限に活用すれば、様々な魅力的なアプリケーションを実現することができるだろう。まだ開発初期段階だが、今後の発展を期待して試してみる価値のあるツールである。