2010-08-12 21 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