
BlazeDSのServiceAdapterを拡張する
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
前回に引き続き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! の後に時刻が表示されたら成功です。












