JavaとFlexの連携その2(前準備)

前回のエントリーで、Merapiを使って、AIRJavaでメッセージをやり取りできた。
ただ諸々の理由(勘違いかもしれないけど)でMerapiの採用はやめた。


そもそもAdobeさんはFlexJavaを繋げられる機能を提供している。
それがAdobe LiveCycle Data Services(LCDS)
LCDSの機能限定版のBlazeDSの方が、なじみがあるかもしれない。

一般的にBlazeDSTomcatなどのサーブレットコンテナ上で動かすのだが、
今回はこれを使うためにJava側のプログラムはローカルWebサーバプログラムとしてつくり、
その上にBlazeDSを動作させることにした。


なので、今回はローカルWebサーバプログラムの作り方。
と言っても、待ち受けSocketを作って…、とWebサーバをゼロから作るのではなく、
JavaプログラムにWebサーバ機能を組み込む、と言うアプローチで作る。


Webサーバ機能を組み込む、と言えば、
そう、Jetty(流れが乱暴ですか?)。
Jettyと言えば、最近Javaが動くようになったGoogle App EngineサーブレットコンテナがJettyだったらしいので、話題としても旬だろう。


論より証拠ってことで、ソースコード

import java.util.HashMap;

import org.mortbay.jetty.Server;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.servlet.Context;
import org.mortbay.jetty.servlet.ServletHolder;

public class HttpDeamon {

    public static void main(String[] args) {

        SelectChannelConnector connector = new SelectChannelConnector();

        // コネクタに待ち受けポート番号を設定
        // ここでは8888番ポートを指定した
        connector.setPort(8888);

        // サーブレットを作成
        // ここでは「HogeServlet」というクラスを使用
        ServletHolder hogeServletHolder = new ServletHolder(HogeServlet.class);

        // サーブレットに初期パラメータを渡す場合は、以下の処理でできる
        // まずはHashMapで初期パラメータを作成
        HashMap<String, String> servletInitMap = new HashMap<String, String>();
        servletInitMap.put(
            "parameter.name.1",
            "parameter.value.1",
        );
        servletInitMap.put(
            "parameter.name.2",
            "parameter.value.2",
        );
        // サーブレットに初期パラメータ用HashMapで設定
        hogeServletHolder.setInitParameters(servletInitMap);

        Server server = new Server();

        // Serverオブジェクトにコネクタを設定
        server.addConnector(connector);

        Context hogeContext = new Context(server, "/", Context.SESSIONS);

        // サーブレットを追加
        // "/hoge"というパスにhogeServletHolder(つまりHogeServlet)を割り当てる
        hogeContext.addServlet(hogeServletHolder, "/hoge/*");

        // Jetty起動
        server.start();
        server.join();
    }
}


以上の流れで、自分が作ったJavaプログラムにWebアプリケーション機能を組み込むことができた。


今回、これを作るにあたり調べたのが、サーブレットへの初期化パラメータの渡し方。
上のやり方だとサーブレットのweb.xmlをこう書いたのと同じ。

<web-app>

    <servlet> 
        <servlet-name>HogeServlet</servlet-name> 
        <servlet-class>HogeServlet</servlet-class> 
        <init-param> 
            <param-name>parameter.name.1</param-name> 
            <param-value>parameter.value.1</param-value> 
        </init-param> 
    </servlet> 

    <servlet-mapping> 
        <servlet-name>HogeServlet</servlet-name> 
        <url-pattern>/hoge/*</url-pattern> 
    </servlet-mapping> 
</web-app>

この後、BlazeDSをJettyに設定することになるが、また次に。
# Flexと連携してない…

参考サイト