2010-08-12 41 views
2

因此,您可能会也可能不知道,BlazeDS(LiveCycle Data Services的开放源代码版本)是让您的服务器端Java和客户端Flex应用程序一起玩的好方法。不幸的是,它有几个缺陷需要纠正。我会尽力在这里解释其中的一个。如何在运行时使用BlazeDS创建通道?

所有BlazeDS的配置都是通过XML文件写入您的web应用程序的flex/文件夹中。为了清楚起见,默认名称是分开的,例如services-config.xml,remoting-config.xml,messaging-config.xml等。在这些配置文件(特别是services-config.xml)中,定义了通道;这些设置URI和对象用于在服务器和客户端之间捕获和发送信息。在这些配置文件,这是很常见的使用像这样的句法:

<channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel"> 
     <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/> 
     <properties> 
      <add-no-cache-headers>false</add-no-cache-headers> 
     </properties> 
    </channel-definition> 

不幸的是,他们不告诉你的是,一些关键的替代品(即:{} context.root)在执行时不会被动态替换,而是编译您想要分发的WAR文件。切换域名时显然不是一个好主意。

因此,我试图动态定义这些通道。根据文档that's all good and fine,但是只有在webapp启动时通道已存在才有效。我觉得这种说法有点失败。

所以我的问题是,你如何真正创建渠道动态,使客户端和服务器都认识到他们的存在?

回答

0

阅读本文blog post;我相信这是你所追求的。

我相信这些xml配置文件与服务器根本没有直接关系。它们用于告诉SWF如何找到服务器。

在您的Flex应用程序的编译期间;服务配置信息本质上是硬编码到SWF中的。

+0

嗯,它有助于一点,但它不是那里。它允许我动态获取'context.root',但它完全没有解释如何在服务器上创建端点;因为我必须将端点的URI硬编码到“services-config.xml”中,所以我没有看到我可以如何改变'context.root'到服务器知道的程度。 – duckworthd 2010-08-12 19:06:51