Top > SAStrutsあれこれ > BlazeDSのFMSを体験しましょう2
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 
 
 
 
 
 
-
|
|
|
-
|
|
|
|
!
|
|
|
-
|
|
|
!
!
package samples.servlet;
 
import javax.servlet.*;
import javax.servlet.http.*;
import org.seasar.framework.container.SingletonS2Container;
import samples.service.FeedService;
 
public class StartFeedServlet extends HttpServlet {
 
    // 初期化処理
    @Override
    public void init() throws ServletException {
        FeedService feedService = SingletonS2Container.getComponent(FeedService.class);
        feedService.start();
 
        System.out.println("FeedServiceを開始しました。");
    }
    
    // Tomcatが停止する時に呼ばれます。
    @Override
    public void destroy() {
        //S2Containerがスレッドを停止してくれるので、コメントオフしています。
        //FeedService feedService = SingletonS2Container.getComponent(FeedService.class);
        //feedService.stop();
    }
}
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
-
-
|
|
!
!
|
|
|
|
|
-
-
|
|
!
!
|
|
|
|
|
-
|
|
|
|
|
|
-
|
|
|
|
|
|
-
|
|
|
-
|
-
|
!
|
|
|
|
|
|
|
|
-
|
|
-
!
!
!
!
!
package samples.service;
 
import java.util.Random;
import org.seasar.framework.container.annotation.tiger.Component;
import org.seasar.framework.container.annotation.tiger.DestroyMethod;
import org.seasar.framework.container.annotation.tiger.InstanceType;
import flex.messaging.MessageBroker;
import flex.messaging.messages.AsyncMessage;
import flex.messaging.util.UUIDUtils;
 
@Component(instance = InstanceType.SINGLETON)
public class FeedService {
 
    /**
     * Feed用のスレッドです。
     */
    protected FeedThread thread;
 
    /**
     * Feedを開始します。
     */
    public synchronized void start() {
        if (thread  * null) {
            thread = new FeedThread();
            thread.start();
        }
    }
 
    /**
     * Feedを終了します。
     */
    @DestroyMethod
    public synchronized void stop() {
        if (thread != null) {
            thread.running = false;
            thread = null;
        }
    }
 
    /**
     * Feed用のスレッドです。
     * 
     */
    protected static class FeedThread extends Thread {
 
        /**
         * 稼動中かどうかです。
         */
        protected boolean running = true;
 
        public void run() {
            MessageBroker msgBroker = MessageBroker.getMessageBroker(null);
            String clientID = UUIDUtils.createUUID();
            Random random = new Random();
            double initialValue = 35;
            double currentValue = 35;
            double maxChange = initialValue * 0.005;
            while (running) {
                double change = maxChange - random.nextDouble() * maxChange * 2;
                double newValue = currentValue + change;
                if (currentValue < initialValue + initialValue * 0.15
                        && currentValue > initialValue - initialValue * 0.15) {
                    currentValue = newValue;
                } else {
                    currentValue -= change;
                }
                AsyncMessage msg = new AsyncMessage();
                msg.setDestination("feed");
                msg.setClientId(clientID);
                msg.setMessageId(UUIDUtils.createUUID());
                msg.setTimestamp(System.currentTimeMillis());
                msg.setBody(new Double(currentValue));
                msgBroker.routeMessageToService(msg, null);
                //System.out.println("" + currentValue);
                try {
                    //1秒毎にプッシュします。
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                }
            }
        }
    }
}
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="#FFFFFF">
    
    <mx:Script>
        <![CDATA[
            import mx.messaging.messages.IMessage;
            
            private function messageHandler(message:IMessage):void {
                pushedValue.text = ""+ message.body;    
            }
        ]]>
    </mx:Script>
    
    <mx:Consumer id="consumer" destination="feed" message="messageHandler(event.message)"/>
    
    <mx:Button label="Subscribe to 'feed' destination" click="consumer.subscribe()" enabled="{!consumer.subscribed}"/>
    <mx:Button label="Unsubscribe from 'feed' destination" click="consumer.unsubscribe()" enabled="{consumer.subscribed}"/>
    
    <mx:TextInput id="pushedValue"/>
        
</mx:Application>
  0
  1
  2
  3
    <servlet>
        <servlet-name>StartFeedServlet</servlet-name>
        <servlet-class>samples.servlet.StartFeedServlet</servlet-class>
        <load-on-startup>4</load-on-startup>
    </servlet>

添付ファイル: fileblaze_fms2_1.jpg 266件 [詳細]

リロード   新規 編集 凍結解除 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2012-08-08 (水) 23:25:57 (2921d)