2009-10-26 60 views
0

您好我有一個java類,它已被部署爲WAR Web應用程序在一個坐在JBOSS上的BlazeDS/Spring服務器。WAR文件中的BlazeDS和Java類

除了將訪問WAR文件的Flex應用程序外,我還需要啓動一些服務器端進程,它將通過AMF消息傳遞將BlazeDS「推送」到Flex客戶端。

實現此服務器端過程的最佳方式是什麼? - 它應該只是一個在WAR文件中使用main()方法從命令行調用的類嗎?可以這樣做 - 不知道你可以從命令行的WAR文件中運行一個類嗎? - 它應該只是一個在命令行調用的JAR文件中帶有main()方法的類嗎?

不知道這裏的標準做法是什麼。關鍵是這個過程需要在BlazeDS服務器上啓動以推出數據(而不是在Flex客戶端上)。

任何幫助將他appreacited 邁克

回答

0

首先,您使用的是最新的Spring/BlazeDS的整合?如果沒有,我強烈建議檢查一下here。它可以大大簡化設置推送消息的消息目的地。它還將允許您使用JMS和Spring Integration消息目標,並且如果您願意,可以集成Spring Security。

現在回答你的問題。您的數據推送服務的生命週期要求是什麼?你是否希望能夠控制其他類的數據推送參數(即開始和停止它,頻率等)?使用Spring創建此服務將允許您將其注入到其他bean中,以便根據需要進行控制。

我目前有一個類似的使用案例,我使用BlazeDS消息目的地將遙測數據「推送」到客戶端瀏覽器。我設置了一個由Spring實例化的「服務」類作爲單例實例。

如果你不需要這個單例的外部控制,那麼我建議你使用一個帶註釋的@PostConstruct或「init」方法來創建一個Thread,並用一個代表你的主循環的匿名Runnable來啓動它。如果您的服務需要以預定義的頻率推送數據,則可以考慮使用java.util.concurrent.ScheduledExecutorService。

無論哪種方式,您還需要設置一個註釋的@PreDestory或「destroy」方法,該方法將在單例實例被銷燬之前執行。這將允許您插入代碼來安全地停止Thread或ScheduledFuture循環,並在Spring容器關閉之前清理所有必需的資源。

如果您想要與您的服務進一步交互,可以使用服務接口從其他類(如Web控制器等)操作它。讓你的類實現這個接口,並使用這個接口將你的類注入到其他類中。對於更大膽的解決方案,您可以考慮使用dm服務器或其他OSGi容器並創建OSGi服務。

請讓我知道如果您需要進一步的幫助關於這個過程,或者如果有具體的細節,我可以進一步闡明。

0

馬歇爾你的明星 - 謝謝你!

我正在使用Spring @PostConstruct,這是一種享受。看起來,Monitoring類正在被Spring自動實例化,然後調用@PostConstruct方法。

我還必須包括在Spring配置文件下面來得到這個工作:

的xmlns:上下文= springframework.org /模式/上下文 springframework.org/schema/context springframework.org/schema/context/spring-context-2.5.xsd

在@PostConstruct方法中,我實現了一個簡單的java.util.Timer,它將數據按常規間隔推送到Flex客戶端。 (我仍然需要通過Spring將它設置爲單例 - 我是一位Spring新手!)

ScheduledExecutorService是否爲我的目的提供Timer類之上的任何好處?

再次感謝 Regards Michael