0. 참조 문서

blazeDS 개발자 가이드 : http://livedocs.adobe.com/blazeds/1/blazeds_devguide/

blazeDS 다운로드 : http://opensource.adobe.com/wiki/display/blazeds/download+blazeds+3



1. blazeds.war 파일 다운로드 이후 Eclipse or Tomcat Import


2. 중요 참조 [jre 5.0 이상에서만 동작함에 유의 !]


blazeds.war 파일을 초기 import 하면 WEB-INF 폴더가 생성됩니다.

WEB-INF
└flex
  └ services-config.xml : 전반적인 서비스 설정을 포함.
  └ messaging-config.xml : Message Push 서비스 등 메시지 관련 서비스 설정을 포함.
  └ remoting-config.xml : Remote Object 호출 서비스 설정을 포함.
  └ proxy-config.xml : 프록시 서비스를 사용할 때
└lib - Flex에서 사용되는 library 파일이 존재하는 폴더
└web.xml - Flex Session Management, MessageBroker Servlet 설정에 대한 내용 포함.

3. services-config.xml


: 기본 채널의 설정 및 포함하는 서비스 파일의 경로를 확인 할 수 있다.
my-amf, my-secure-amf, my-polling-amf ..

4. 나머지 .xml 파일


- 설정된 해당 서비스를 확인할 수 있다.
- destination id 설정을 통해 flex에서 접근할 수 있도록 설정한다.

ex)

ㄱ. MessagePush : 해당 채널에 대한 종착점 id를 설정한다.
<destination id="realMsg"/>

ㄴ. Remote Object : 해당 원격지 클래스를 호출하기 위한 종착점 id를 설정한다.
<destination id="fruitRO">
        <properties>
            <source>wonsama.test.FruitManager</source>
        </properties>
</destination>

5. 기타 확인사항


ㄱ. <default-channels> 하위 노드에 여러개의 채널이 선언된 경우
맨 위쪽 부터 처리하며, 채널이 동작하지 않는 경우 다음 채널 서비스를 실행한다.

    <default-channels>
        <channel ref="my-streaming-amf"/> <!-- 처음 실행됨 -->
      <channel ref="my-polling-amf"/> <!-- 위 채널이 동작하지 않으면 동작 -->
    </default-channels>

ㄴ. StreamingAMFChannel 사용 시 <properties>의 하위노드가 1개 이상 존재해야 한다.
==> 존재하지 않으면 Explore에서 정상적으로 MessagePush가 동작하지 않음. (버그인듯?)

ex)
<channel-definition id="my-streaming-amf"
    class="mx.messaging.channels.StreamingAMFChannel">
    <endpoint
        url="http://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf"
        class="flex.messaging.endpoints.StreamingAMFEndpoint" />
    <properties>
        <idle-timeout-minutes>0</idle-timeout-minutes>
        <max-streaming-clients>10</max-streaming-clients>
        <server-to-client-heartbeat-millis>5000    </server-to-client-heartbeat-millis>
        <user-agent-settings>
            <user-agent match-on="MSIE" kickstart-bytes="2048"
                        max-streaming-connections-per-session="3" />
            <user-agent match-on="Firefox" kickstart-bytes="2048"
                        max-streaming-connections-per-session="3" />
        </user-agent-settings>
    </properties>
</channel-definition>

ㄷ. 익스플로러에서 모든 창을 종료하지 않으면 Messaging Service에서 Lock이 발생되어 실시간 메시지 수신을 할 수 없다(약 10초 ~ ???초). (MessageBroker쪽)

파폭에서는 발생하지 않지만 익스플로러에서는 위와 같은 문제가 발생하네여 아.... 초난감 ;;
24시간 시간 모니터링 툴을 제작시 반드시 고려를 하시기 바랍니다. 프로젝트 3개월 차에 이런 버그를 발견해 내서리 쩝...

고객사에는 뭐 끄지마세요 이런식으로 -_-; 아.... 중요 정보 인것 같아 이전 포스트에 덧칠하여 다시 올려 봅니다.





요즘 실시간 모니터링 관련 DASHBOARD를 만들고 있는데.. 관련하여 차트를 만들고 있습니다.

1. RO를 통한 데이터 수신

//    2초단위 작업 시 발생 어러 ConcurrentModificationException
//
//    [참조] 실제 개수 = 개수 * 서버수(10) * 자료수(3)
//
//    시간(초)    서버        개수        결과        RO 수신시간
//    2,000    10        43200    ERROR        -
//    4,000    10        21600    OK        9.359
//    10,000    10        8640    OK        3.531
//    20,000    10        4320    OK        1.688
//    30,000    10        2880    OK        1.172
//    60,000    10        1440    OK        0.578
//
//    작업 진행은 시간 계산이 편한 10초 단위로 진행함.

위 표를 보면 알 수 있듯이 너무 많은 량의 데이터를 수신하려 한다면 flex messaging 처리 부분에서 힙 메모리 오버 플로우 애러가 발생하네요. 그래서 어쩔 수 없이 데이터를 줄여서 처리 했습니다. 맨 위 삽입한 차트가 1분(60초) 단위로 처리한 데이터를 RO를 통해 한번에 수신한 것인데 ... 그래도 차트 자체가 빡빡하네여 실제 적용할 때에는 20~30분 단위로 처리한다음 구간 SELECT 형태로 바꿔야 깔끔한 처리가 가능할 거 같습니다.

2. message-push 를 통한 데이터 수신 처리

RO를 통해 오늘-어제 데이터를 수신한 다음 실시간 데이터를 넣으면서 어제 데이터를 오늘 날짜로 업데이트 하는 형태의 차트 입니다. 위와 같이 처리를 하려 하니 차트 업데이트 과정에서 약간의 시간 지연 현상이 발생하는 거 같더군요 데이터 량이 많아 그런지 ㅡ,.ㅡ;

그리고 제가 전에 한 blazeDS 관련 포스팅 . message-push 서비스 사용시 channel-definition 에서 properties가 존재하지 않으면 ie7, ie8 에서는 정상적으로 message-push가 동작하지 않는거 잊지 말기 바랍니다. 아마도 요거 버그 같은데 ... 뭐 물어볼 분도 없구 ㅡ,.ㅡ blazeDS관련 국내 커뮤니티는 찾기 힘든거 같네요 ^^

3. 결론

ㄱ. RO 사용시 많은 량의 데이터 수신은 속도 저하를 가져옴. 적절하게 필요한 데이터만 사용하자 !
ㄴ. Messaging 서비스는 다수의 데이터 서비스 사용시 설계를 잘 해야 된다.
(자바쪽에서 스레드 내부에서 메시지 생성시 타입, 데이터 형태로 메시지를 만들어 보내는것이 무난 하기는 한거 같음)

차트 관련 주저리 플젝 완료 될때까징 주우욱... 해보렵니다.
메시지 푸시를 테스트 하는데 일종의 버그가 발견되어 리포트 해본다.

serverces-config.xml 에서 스트리밍 관련 설정을 할 때

channel-definition에서 properties의 하위 항목이 존재하지 않을 경우

파폭, 크롬, 사파리에서는 정상적으로 작동하나....
익스7,8에서는 메시지를 수신할 수 없는(subscribe가 안됨 -_-;) 현상이 발생된다.

[ 아래 예제 코드에서 properties의 Child가 1개라도 존재하지 않는 경우 .... 익스만 문제 발생 !!! ]

        <channel-definition id="my-streaming-amf"
            class="mx.messaging.channels.StreamingAMFChannel">
            <endpoint
                url="http://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf"
                class="flex.messaging.endpoints.StreamingAMFEndpoint" />
            <properties>
                <max-streaming-clients>10</max-streaming-clients>
                <idle-timeout-minutes>0</idle-timeout-minutes>
                <server-to-client-heartbeat-millis>5000</server-to-client-heartbeat-millis>
                <user-agent-settings>
                    <user-agent match-on="MSIE" kickstart-bytes="2048"
                                max-streaming-connections-per-session="3" />
                    <user-agent match-on="Firefox" kickstart-bytes="2048"
                                max-streaming-connections-per-session="3" />
                </user-agent-settings>
            </properties>
        </channel-definition>

이거땜시 1주일 정도 해맨듯... ㅡ.,ㅡ;



BlazeDS 최신버전 다운로드

:  http://opensource.adobe.com/wiki/display/blazeds/Release+Builds


참조용 LIVE DOC

: http://livedocs.adobe.com/blazeds/1/blazeds_devguide/help.html


블레이즈 DS 개발 가이드 북
blazeds_devguide.pdf

원문 포스팅 >>>> http://blog.naver.com/zoom7810/50032372125



    설치하는 방법


=== Eclipse 설정 ===


1. BlazeDS 파일 다운로드

http://opensource.adobe.com/wiki/display/blazeds/Release+Builds 로 접속하여 최신 버전을 다운 받는다.


2. 다운로드 받은 zip 파일의 압출을 풀어 blazeds.war 파일을 Eclipse 에서 import 한다


3. WebContent 디렉토리 하위에  web 폴더를 생성 (FLEX bin-debug 폴더와 동기화 할 폴더)


4. WEB-INF 폴더 하위에 classes 폴더 생성


5. Default Output 폴더 변경

(프로젝트 선택 오른쪽 -> properties -> java build path -> source folder 탭 선택)

(조금 전 생성한 WEF-INF 폴더 밑에 classes 폴더로 교체한다)


6. log4j 다운로드 (로그 관리를 위해서... 옵션임)

다운로드 :  http://logging.apache.org/log4j/1.2/download.html

설 정관련 참조 포스팅 : http://blog.naver.com/PostView.nhn?blogId=zoom7810&logNo=50032106915&categoryNo=0&viewdate=&cpage=1&listtype=0


7. log4j 설정
- 다운 받은 zip 파일을 압축 해제한 이후 log4j.jar 파일을 복사하여 WEF-INF\lib 폴더에 붙여 넣는다.
- WEB-INF 폴더 하위에 refrence 폴더를 생성한 다음 log4j.properties 파일을 복사한다.

- reference 폴더를 Default Path로 추가 설정한다.
- log4j.properties 파일 예시

log4j.rootLogger = DEBUG, stdout, dailyfile

 

log4j.appender.stdout = org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n

 

log4j.appender.dailyfile.Threshold = DEBUG

log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender

log4j.appender.dailyfile.File = logfile.log

log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout

log4j.appender.dailyfile.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n


=== FLEX 설정 ===


8. 플렉스 프로젝트 생성


- J2EE 프로젝트 생성
- Server 지정
- Output Folder 지정


9. 확인하기

(Eclipse에서 web폴더를 보면 파일이 Flex와 공유된 것을 확인할 수 있다.)

+ Recent posts