알 수 있듯이 BlazeDS (LiveCycle Data Services의 오픈 소스 버전)는 서버 측 Java 및 클라이언트 측 Flex 응용 프로그램을 함께 재생할 수있는 좋은 방법입니다. 불행히도 수정해야 할 몇 가지 함정이 있습니다. 나는 그들 중 하나를 여기서 설명하려고 노력할 것이다.BlazeDS를 사용하여 런타임에 채널을 만드는 방법은 무엇입니까?
모든 BlazeDS 구성은 웹 응용 프로그램의 flex/
폴더에있는 XML 파일을 통해 작성됩니다. 기본 이름은 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이지만 은 웹 응용 프로그램이 시작될 때 채널이 이미 존재하는 경우에만 작동합니다. 나는 그런 종류의 패배를 느낀다.
제 질문은 클라이언트와 서버가 모두 자신의 존재를 인식 할 수 있도록 어떻게 채널을 동적으로 만들 수 있습니까?
음, 그것은 약간의 도움이된다. 그러나 아주 거기에 없다. 이것이 내가 할 수있게 해주는 것은'context.root'를 동적으로 얻는 것이지만, 서버 상에 엔드 포인트를 만드는 방법에 대해서는 전혀 설명하지 않는다. 본질적으로 종점에 대한 URI를'services-config.xml'에 하드 코딩해야하기 때문에 서버가 알고있는 한'context.root'가 어떻게 바뀌 었는지 나는 알 수 없습니다. – duckworthd