JavaとFlexの連携その2(前準備)
前回のエントリーで、Merapiを使って、AIRとJavaでメッセージをやり取りできた。
ただ諸々の理由(勘違いかもしれないけど)でMerapiの採用はやめた。
そもそもAdobeさんはFlexとJavaを繋げられる機能を提供している。
それがAdobe LiveCycle Data Services(LCDS)。
LCDSの機能限定版のBlazeDSの方が、なじみがあるかもしれない。
一般的にBlazeDSはTomcatなどのサーブレットコンテナ上で動かすのだが、
今回はこれを使うために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と連携してない…
参考サイト