WAR文件中的BlazeDS和Java类

时间:2009-10-26 20:11:53

标签: java flex class blazeds war

您好我有一个java类,它已经在位于JBOSS上的BlazeDS / Spring服务器中部署为WAR Web应用程序。

除了将访问WAR文件的Flex应用程序之外,我还需要启动一些服务器端进程,这将启动BlazeDS通过AMF消息传递“推送”到Flex客户端。

实施此服务器端流程的最佳方法是什么? - 它应该只是一个在WAR文件中带有main()方法的类,它从命令行调用吗?可以这样做 - 不确定您是否可以从命令行在WAR文件中运行类? - 它应该只是一个在JAR文件中带有main()方法的类,它从命令行调用吗?

不确定这里的标准做法是什么。关键是需要在BlazeDS服务器上启动进程以将数据推出(而不是在Flex客户端上)。

他会有任何帮助 麦克

2 个答案:

答案 0 :(得分: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 Server或其他OSGi容器并创建OSGi服务。

如果您需要有关此流程的进一步帮助,或者有详细说明我可以进一步说明,请与我们联系。

答案 1 :(得分: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类的任何好处?

再次感谢 问候 迈克尔