Top > MyPage
 

FlexとJava.springの連携

BlazeDSによるJava、Flex連携

Webアプリケーションにjarファイルを追加

BlazeDSのサイトより本体を入手して、その中のwarファイルを解凍してその中のWEB-INF/libから

  • backport-util-concurrent.jar
  • flex-messaging-common.jar
  • flex-messaging-core.jar
  • flex-messaging-remoting.jar

をtomcatのプロジェクトのWEB-INF/libにコピーする。

BlazeDS関連の設定を追加

WEB-INF/web.xmlに

<listener>
    <listener-class>flex.messaging.HttpFlexSession</listener-class>
  </listener>

  <servlet>
    <servlet-name>MessageBrokerServlet</servlet-name>
    <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
    <init-param>
      <param-name>services.configuration.file</param-name>
      <param-value>/WEB-INF/flex/services-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>MessageBrokerServlet</servlet-name>
    <url-pattern>/messagebroker/*</url-pattern>
  </servlet-mapping>

のようにBlazeDS関連の設定を追加する。

設定ファイルを作成する

設定ファイルはweb.xmlに書いた通りのものを作成する。一般的に、WEB-INF/flex/services-config.xmlとされることが多いようだ。

<?xml version="1.0" encoding="UTF-8"?>
<services-config>
  <services>
    <!-- service要素には何でもいいからIDが要る模様 -->
<service id="remoting-service" \
    class="flex.messaging.services.RemotingService">
      <adapters>
        <adapter-definition id="java-object"
class="flex.messaging.services.remoting.adapters.JavaAdapter" \
    default="true"/>
      </adapters>
      <default-channels>
        <channel ref="my-amf"/>
      </default-channels>

      <!-- destination要素のIDが mx:RemoteObjectの destination プロパティに対応する -->
      <destination id="amftest">
        <properties>
          <!-- リモート呼び出ししたいJava Beansのクラス名 -->
          <source>amftest.AmfTestService</source>
          <!-- 注:この Beanはステートレスである -->
        </properties>
      </destination>
      <!-- リモート呼び出しを可能にしたい Beanの数だけ destination要素を記述する -->

    </service>
  </services>

  <channels>
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
      <!--
        ここで構成されたエンドポイントURLを mx:RemoteObjectの
        endpoint プロパティにセットする
        {}内は実行時に自動で置き換えられるのでこの記述のままで良い。
      -->
<endpoint \
    url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf"
        class="flex.messaging.endpoints.AMFEndpoint"/>
    </channel-definition>
  </channels>
</services-config>

BeansとFlexの作成例

JavaBeans(呼び出される側)の例

package amftest;

public class AmfTestService {
  public String sayHello()
  {
    return "Hello, World!";
  }
}

Flex(呼び出し側)の例

(サーバ側アプリケーションはamftest.warとなってアプリケーションサーバにデプロイされているものとする)

<mx:RemoteObject id="srv" destination="amftest"
  endpoint="http://localhost:8080/amftest/messagebroker/amf">
<mx:TextInput text="{srv.sayHello.lastResult}"/>
<mx:Button label="Say Hello" click="srv.sayHello()"/>

BlazeDSによるSpring、Flex連携

ライブラリ

BlazeDSとSpringを接続するアダプタとなるモジュールは今のところ下記からダウンロード出来る。

http://www.igenko.org/archiva/repository/igenko/com/adobe/flex/blazeds-springここから適当に一番新しそうなblazeds-spring-*.jarを持ってきてWEB-INF/libに入れるといいだろう。

その他Springのjarファイルも入れておく。

web.xmlの書き換え

web.xmlにweb.xmlにContextLoaderListenerが登録されており、Bean定義ファイル(デフォルトではWEB-INF/applicationContext.xml)がロードされるようにする。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>
       org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

services-config.xmlの書き換え

services-config.xmlに、オブジェクトファクトリとしてSpringを使えるようにfactory要素を登録する( services-config要素下)。

さらにdestination要素のプロパティで、クラス名を直接指定している部分をSpringのBean IDを使ってオブジェクトを取得するように書き換える。

<factories>
    <factory id="spring" 
      class="flex.messaging.service.SpringFactory"/>
</factories>
<services>
    <!-- service要素には何でもいいからIDが要る模様 -->
<service id="remoting-service" \
    class="flex.messaging.services.RemotingService">
      <adapters>
         <adapter-definition id="java-object"
class="flex.messaging.services.remoting.adapters.JavaAdapter" \
    default="true"/>
      </adapters>
      <default-channels>
        <channel ref="my-amf"/>
      </default-channels>

      <!-- destination要素のIDが mx:RemoteObjectの destination プロパティに対応する -->
      <destination id="amftest">
        <properties>
          <!-- リモート呼び出ししたいJava Beans -->
          <factory>spring</factory>
          <source>myService</source>
          <!-- 注:この Beanはステートレスである -->
        </properties>
      </destination>
      <!-- リモート呼び出しを可能にしたい Beanの数だけ destination要素を記述する -->

    </service>
</services>

applicationContext.xml

SpringのWEB-INF/applicationContext.xmlには下記のようなBean定義が必要となる。

<bean id="myService" class="com.acme.MyService"/>

ここまで、設定するとbeanがspringから読み込まれるようになる。

TIPS

画面遷移

URLをたたいて、画面遷移のサンプル

var url:String = "http://www.google.co.jp/";

var request:URLRequest = new URLRequest(url);
try {
    navigateToURL(request , "_self");
} catch (e:Error) {
    // handle error here
}