2012-03-21 3 views
2

Flex 애플리케이션이 BlazeDS를 구현하는 두 개의 다른 웹 애플리케이션에서 작성된 리소스를 사용할 수있는 시나리오를 설정하려고합니다.BlazeDS에서 둘 이상의 채널

원래는 specifying a channel set in my mxml code으로 작업을 시도한 다음 이것을 mxml의 서비스 채널 세트로 설정했습니다. 그러나이 방법이 효과가 있었지만 중복 된 세션 오류가 발생했습니다.

one of the answers to my question linked to above에서 다른 종단점으로 채널을 설정하는 방법에 대해 살펴볼 수 있습니다. 아마 Flex 애플리케이션은 실제로 볼 때 하나의 서비스에만 연결되지만 서비스는 실제로 다른 위치에서도이 서비스를 제공 할 것입니다.

나는 내 서비스-config.xml 파일에서 다음을 수행하려고 :

 <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> 
      <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/> 
     </channel-definition> 

     <channel-definition id="my-amf2" class="mx.messaging.channels.AMFChannel"> 
      <endpoint url="http://localhost:7001/dataservice1/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/> 
     </channel-definition> 

하지만 내 서버를 시작하려고 할 때 나는 내 웹 로직 콘솔에서 다음과 같은 오류를 얻을.

엔드 포인트를 등록 할 수 없습니다 '내-AMF'때문에 URL, '/ MessageBroker에/AMF'이미 '내-amf2'

엔드 포인트에서 사용하는 "MessageBrokerServlet"이 웹 응용 프로그램 "/ dataservice2"의 시작시 미리로드하지 못했습니다. flex.messaging.config.ConfigurationException : 해당 URL 때문에 '/가/AMF MessageBroker에', '내-amf2'

엔드 포인트에서 사용 이미 '내-AMF' 엔드 포인트를 등록 할 수 없습니다

'_appsdir_DataService2_dir'응용 프로그램의 활성화 상태를 true로 설정할 수 없습니다. weblogic.application.ModuleException : [HTTP : 101216] 서블릿 : "MessageBrokerServlet"이 웹 응용 프로그램의 시작을 에 미리로드하지 못했습니다. "/ dataservice2".

mx.messaging.channels.AMFChannel 클래스가 하나만 있기 때문입니다. 이 올바른지?

일반적으로 내가 겪고있는 문제를 해결할 방법이 있습니까? 나는 다른 솔루션에 열려 있습니다.

나는 인터넷 검색을하고 몇 시간 동안 읽었지만 이것에 대해서는 아무 것도 찾을 수 없습니다.

우리는 모든 응용 프로그램간에 공유되는 공통 기능 서비스와 해당 응용 프로그램과 관련된 서비스를 제공하는 응용 프로그램 특정 서비스를 원합니다.

+0

오류 메시지가 말하는 것처럼 my-amf2에 다른 끝점 URL을 제공해야합니다. 물론 web.xml에 서블릿을 설정해야합니다. – RIAstar

+0

당신은 나의 무지를 변명해야합니다 : 내가 아는 한, URL은 다른 포트를 가지고 있다는 점에서 이미 다릅니다. 나는 무엇을해야할지 잘 모르겠다. 제발 좀 더 자세히 설명해 주시겠습니까? 대단히 감사하겠습니다. –

+0

다른 것이 확실합니까? 내가 볼 수 있듯이'{server.port} '토큰은 같은 포트로 대체 될 수 있습니다. FireBug 또는 [Charles] (http://www.charlesproxy.com/)를 사용하여 연결하려는 주소를 정확히 모니터 할 수 있습니다. – RIAstar

답변

1

다른 독자가 도움이 될 수 있도록 논의한 내용을 요약 해 보겠습니다.

의 오류 메시지를 자세히 살펴 보자 :

엔드 포인트를 등록 할 수 없습니다 '내-AMF'때문에 URL, '/ MessageBroker에/AMF'이미 '내-amf2'

엔드 포인트에서 사용하는

이 메시지는 '/ messagebroker/amf'를 말하고 그 전에 URL의 부분, 즉 포트 번호가있는 부분을 언급하지 않습니다. 이를 통해 BlazeDS는 두 개의 끝점이 동일하거나 유사한지를 확인할 때이 첫 번째 부분을 무시한다는 것을 알 수 있습니다. 따라서 http://localhost:7001/dataservice1/messagebroker/amfhttp://localhost:7002/dataservice2/messagebroker/amf은 다른 인스턴스를 가리 키지 만 동일하게 간주됩니다.

빠른 수정

이 문제에 대한 간단한 수정은 단순히 마지막 슬래시 후 두 번째 엔드 포인트의 이름을 변경하는 것입니다. 예를 들어 http://localhost:7001/dataservice1/messagebroker/amf2은 이미 트릭을해야합니다. MessageBroker 서블릿이이 마지막 슬래시 (/messagebroker/*) 다음에 와일드 카드로 매핑되어 있기 때문에 이렇게 형식화 된 주소를 올바른 서블릿으로 라우트 할 것이므로 걱정할 필요는 없다고 생각합니다.

왜 그렇습니까?

아마 당신은 이것을하려는 이유를 재고해야합니다. BlazeDS가 마지막 부분 만 검사하는 이유는 개발자가 실제로 누군가가 엔드 포인트를 다른 인스턴스로 향하게하려고한다는 사실을 단순히 생각하지 않았기 때문입니다. 또한 설치시이 다른 인스턴스에는 이미 동일한 채널 정의가 있습니다. 첫 번째 인스턴스에서이 라우팅을 수행 할 필요가 없도록 해당 채널에 간단하게 연결할 수 있습니다. 네가 무엇을 성취하려고하는지 전혀 모르겠다. 내가 말할 수있는 것은 틀린 각도에서 접근하고 있다는 것이다.

+0

Up은 지금까지 논의 된 모든 내용에 대한 훌륭한 요약이므로 답변에 투표했습니다. 이후 다른 프로젝트 (장단점이있는) 전반에 걸쳐 사용되는 공통 코드 라이브러리를 사용하여 제안한대로 다른 각도에서 접근하려고했습니다. –

0

주제가 부족하지만 GraniteDS을 사용해 보셨습니까? WebLogic의 비동기 서블릿 (herehere 참조)을 지원하므로 실시간 메시징 성능/확장 성이 훨씬 향상됩니다. 두 개의 메시징 컨텍스트 (채널 정의 등)가 별도의 서블릿 컨텍스트에 저장되므로 서로 다른 두 개의 웹 응용 프로그램에 연결하면 문제가되지 않습니다.