0

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

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

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

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

他会感谢迈克的任何帮助

4

2 回答 2

0

首先,您使用的是最新的 Spring/BlazeDS 集成吗?如果没有,我强烈建议在这里查看。它可以大大简化为推送消息设置消息目的地。如果您愿意,它还将允许您使用 JMS 和 Spring Integration 消息目标以及集成 Spring Security。

现在回答你的问题。您的数据推送服务的生命周期要求是什么?您是否希望能够从其他类控制此数据推送的参数(即启动和停止、频率等)?使用 Spring 创建此服务将允许您根据需要将其注入其他 bean 以进行控制。

我目前有一个类似的用例,我使用 BlazeDS 消息目标将遥测数据“推送”到客户端浏览器。我设置了一个由 Spring 实例化为单例实例的“服务”类。

如果您不需要对此单例进行外部控制,那么我建议您使用带注释的@PostConstruct 或“init”方法来创建线程并使用代表主循环的匿名 Runnable 启动它。如果您的服务需要以预定义的频率推送数据,您可以考虑使用 java.util.concurrent.ScheduledExecutorService。

无论哪种方式,您还需要设置一个带注释的@PreDestory 或“destroy”方法,该方法将在单例实例被销毁之前执行。这将允许您插入代码以安全地停止循环 Thread 或 ScheduledFuture 并在 Spring 容器关闭之前清理任何必要的资源。

如果您希望与您的服务进行进一步的交互,您可以使用服务接口从其他类(例如 Web 控制器等)对其进行操作。让您的类实现此接口并使用此接口将您的类注入其他类。对于更大胆的解决方案,您可以考虑使用 dm Server 或其他 OSGi 容器并创建 OSGi 服务。

如果您需要有关此过程的进一步帮助,或者是否有我可以进一步说明的具体细节,请告诉我。

于 2009-10-27T03:19:46.863 回答
0

马歇尔你的明星 - 谢谢!

我正在使用 Spring @PostConstruct,这是一种享受。似乎 Monitoring 类正在由 Spring 自动实例化,然后调用 @PostConstruct 方法。

我还必须在 Spring 配置文件中包含以下内容才能使其正常工作:

xmlns:context=springframework.org/schema/context springframework.org/schema/context springframework.org/schema/context/spring-context-2.5.xsd

在@PostConstruct 方法中,我实现了一个简单的java.util.Timer,它定期将数据推送到Flex 客户端。(我仍然需要通过 Spring 将其设置为单例 - 我是 Spring 新手!)

出于我的目的,ScheduledExecutorService 是否提供了 Timer 类之上的任何好处?

再次感谢问候迈克尔

于 2009-10-27T17:55:26.713 回答