Messaging中にRemoteObjectの処理をする

Messaging中にRemoteObjectにデータを保存したり、メソッド実行したりする際にRemotingObjectにアクセスする方法を忘れないようにメモ。

  • パッケージ名:packagename
  • Messagingをするクラス名:MessagingAdapter(ServiceAdapterのサブクラス)
  • Messagingのadapter-definition id:hoge-messaging-adapter
  • RemoteObjectのクラス名:ClassName
  • RemoteObjectのdestination id:hoge-remote-object

FlexContext.getServletContext()で取得したServletContextから、getAttribute('destination id')でRemoteObjectの参照を取得する。
これでメッセージングする度にRemoteObjectのsetDataにmessageのbodyが渡されるようになる。
あとは煮るなり焼くなり・・・

package packagename;

import packagename.ClassName;

import flex.messaging.config.ConfigMap;
import flex.messaging.messages.Message;
import flex.messaging.FlexContext;
import flex.messaging.MessageBroker;
import flex.messaging.services.MessageService;
import flex.messaging.services.ServiceAdapter;

import java.util.HashMap;

import javax.servlet.ServletContext;

public class MessagingAdapter extends ServiceAdapter {
	private MessageBroker messageBroker;
	private MessageService messageService;
	private ServletContext servletContext;
	private ClassName remoteObject;

	@Override
	public void initialize(String id, ConfigMap properties) {

	}

	@Override
	public void start() {
		// MessagingService取得
		messageBroker = MessageBroker.getMessageBroker(null);
		messageService = (MessageService) messageBroker.getService("hoge-messaging-service");

		// RemoteObject取得
		servletContext = FlexContext.getServletContext();
		remoteObject = (IconManager) servletContext.getAttribute("hoge-remote-object");
	}

	@Override
	public void stop() {

	}

	@Override
	public Object invoke(Message message) {
		// Messaging配信
		messageService.pushMessageToClients(message, true);
		messageService.sendPushMessageFromPeer(message, true);

		// RemoteObjectへmessageのbodyを渡す
		HashMap hmMessage = (HashMap) message.getBody();
		remoteObject.setData(hmMessage);

		return null;
	}

}
  1. package packagename;
  2.  
  3. import packagename.ClassName;
  4.  
  5. import flex.messaging.config.ConfigMap;
  6. import flex.messaging.messages.Message;
  7. import flex.messaging.FlexContext;
  8. import flex.messaging.MessageBroker;
  9. import flex.messaging.services.MessageService;
  10. import flex.messaging.services.ServiceAdapter;
  11.  
  12. import java.util.HashMap;
  13.  
  14. import javax.servlet.ServletContext;
  15.  
  16. public class MessagingAdapter extends ServiceAdapter {
  17.     private MessageBroker messageBroker;
  18.     private MessageService messageService;
  19.     private ServletContext servletContext;
  20.     private ClassName remoteObject;
  21.  
  22.     @Override
  23.     public void initialize(String id, ConfigMap properties) {
  24.  
  25.     }
  26.  
  27.     @Override
  28.     public void start() {
  29.         // MessagingService取得
  30.         messageBroker = MessageBroker.getMessageBroker(null);
  31.         messageService = (MessageService) messageBroker.getService("hoge-messaging-service");
  32.  
  33.         // RemoteObject取得
  34.         servletContext = FlexContext.getServletContext();
  35.         remoteObject = (IconManager) servletContext.getAttribute("hoge-remote-object");
  36.     }
  37.  
  38.     @Override
  39.     public void stop() {
  40.  
  41.     }
  42.  
  43.     @Override
  44.     public Object invoke(Message message) {
  45.         // Messaging配信
  46.         messageService.pushMessageToClients(message, true);
  47.         messageService.sendPushMessageFromPeer(message, true);
  48.  
  49.         // RemoteObjectへmessageのbodyを渡す
  50.         HashMap hmMessage = (HashMap) message.getBody();
  51.         remoteObject.setData(hmMessage);
  52.  
  53.         return null;
  54.     }
  55.  
  56. }

ちなみにこの時の*-config.xmlたちはこんな感じ。

  • XML
  • messaging-config.xml
  • Source




	
		
		
	

	

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <service id="hoge-messaging-service"
  4.     class="flex.messaging.services.MessageService">
  5.  
  6.     <adapters>
  7.         <adapter-definition id="actionscript"
  8.             class="flex.messaging.services.messaging.adapters.ActionScriptAdapter"
  9.             default="true" />
  10.         <adapter-definition id="hoge-messaging-service"
  11.             class="packagename.MessagingAdapter" />
  12.     </adapters>
  13.  
  14.     <!-- ...中略... -->
  15.  
  16. </service>

  • XML
  • remoting-config.xml
  • Source




	

	
		
			packagename.ClassName
			application
		
	

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <service id="hoge-remoting-service" class="flex.messaging.services.RemotingService">
  4.  
  5.     <!-- ...中略... -->
  6.  
  7.     <destination id="hoge-remote-object">
  8.         <properties>
  9.             <source>packagename.ClassName</source>
  10.             <scope>application</scope>
  11.         </properties>
  12.     </destination>
  13.  
  14. </service>


About this entry