BlazeDSのServiceAdapterを拡張する

2011.09.05

前回に引き続きBlazeDSです。

Push通信する際にサーバサイドで何か処理をしたい場合はServiceAdapterを拡張したクラスを作ります。
先日作ったサンプルはクライアント間でメッセージをやりとりするだけでしたが、今回はメッセージの後に時刻を表示してみます。
先日作ったPush通信のサンプルは以下になります。
BlazeDSの設定とAMF通信のサンプル

サーバ側のソースになります。
SampleBlazeDS/WEB-INF/src/adapter以下に実装して下さい。

package adapter;

import java.text.SimpleDateFormat;
import java.util.Date;

import flex.messaging.messages.Message;
import flex.messaging.services.MessageService;
import flex.messaging.services.ServiceAdapter;

public class CustomServiceAdapter extends ServiceAdapter {

	@Override
	public Object invoke(Message message) {
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		message.setBody(message.getBody() + "  " + sdf.format(new Date()));
		
		MessageService msgService = (MessageService)getDestination().getService();
		msgService.pushMessageToClients(message, true);
		msgService.sendPushMessageFromPeer(message, true);
		return null;
	}
}


次にSampleBlazeDS/WEB-INF/flex以下にあるmessaging-config.xmlを修正します。

修正点は
①adaptersタグの中でアダプターを定義する。
②destinationタグの中で定義したアダプターと紐づける。
の2点です。

<?xml version="1.0" encoding="UTF-8"?>
<service id="message-service" 
    class="flex.messaging.services.MessageService">

    <adapters>
        <adapter-definition id="actionscript" class="flex.messaging.services.messaging.adapters.ActionScriptAdapter" default="true" />
        <!-- <adapter-definition id="jms" class="flex.messaging.services.messaging.adapters.JMSAdapter"/> -->
        <adapter-definition id="customAdapter" class="adapter.CustomServiceAdapter"/>
    </adapters>

    <default-channels>
        <channel ref="my-polling-amf"/>
    </default-channels>

	<destination id="sample2">  
		<channels>  
			<channel ref="my-polling-amf"/>
		</channels>  
		<adapter ref="customAdapter"/>  
	</destination>
</service>


Tomcatを再起動してからPush通信のサンプルクライアントのボタンを押して、
Hello World2! の後に時刻が表示されたら成功です。