[Flex] RemoteClass 메타데이타 태그(Metadata tag) 사용시 매핑(mapping)이 안되나요?
[공지]이미지나 링크가 깨졌다면 댓글 부탁드립니다.
ColdFusion CFC 또는 Java(LCDS와 BlazeDS)를 이용해 AMF3 통신시 서버측의 객체와 ActionScript 객체 끼리 맵핑(mapping)(직렬화라고도 합니다.)을 시켜주기 위해 자주 사용하는 것이 RemoteClass 메타데이타 태그(Metadata tag)죠?
만약 서버측에 com.jidolstar.MyObject 클래스가 정의되어 있다면 ActionScript 쪽에 매핑할 클래스 이름 위에 [RemoteClass(alias="com.jidolstar.MyObject")] 를 넣어주면 RemoteObject로 서버측 객체를 받아올때 자동으로 ActionScript에서 정의한 클래스의 객체에 맵핑됩니다.
RemoteClass 메타데이타 태그를 사용하지 않으면 Flex는 어떤형인지 알지 못해 그냥 Object 값으로 받아와 버립니다. 물론 사용할 수 있지만 Object 특성상 포퍼먼스에 제약이 있고 또한 Object를 이용하면 탄탄한 설계 바탕이라고 말할 수 없겠지요.
근데... 문제는 이렇게 좋은 맵핑 기능을 사용할려고 하는데도 안되는 경우가 있습니다.
- ActionScript 클래스에 [RemoteClass(alias="YourObjectPath")] 를 포함하지 않은 경우
당연한 결과겠죠? - 애플리케이션 안에 ActionScript 클래스를 전혀 사용하지 않은 경우
이 경우는 RemoteClass메타데이타 태그를 사용한 ActionScript 클래스를 정의를 했어도 애플리케이션에서 전혀 사용하지 않는다면 컴파일시 이 클래스가 포함되지 않아 실제 프로그램을 돌릴때 맵핑되지 않겠죠?
저 방금 이래서 삽질했습니다. ^^ - 서버 사이드 객체와 ActionScript 객체의 속성 명이 틀린경우
틀리면 당연히 맵핑 안됩니다. - 서버사이드 객체의 속성이 ActionScript 객체의 속성에 없는 경우
위 3번과 동일하다고 보면 되겠죠? 적어도 서버사이드 객체의 속성이 ActionScript 객체에 같은 이름의 속성이 반드시 있어야 맵핑됩니다. 참고로 서버사이드 객체 속성 수와 ActionScript 객체 속성수가 다르다고 맵핑이 안되는 것은 아닙니다. 적어도 서버사이드 객체의 속성이 ActionScript 객체의 속성과 같은 것이 반드시 있어야 된다는 조건만 맞으면 됩니다. - [RemoteClass("YourObjectPath")] 와 같이 alias를 뺀 경우
이래놓구선 안된다고 뻘짓한 적 있습니다. - [RemoteClass]가 아닌 [RemoteObject]로 사용한 경우
이런 실수도 가끔 했습니다 ㅡㅡ; - [RemoteClass] 메타데이타 태그를 클래스 명 위가 아닌 import 문 위에 넣은 경우
클래스 명과 [RemoteClass] 사이에 import가 들어가면 안되겠죠?
위 문제들은 Flex 컴파일러가 잡아주지 않기 때문에 주의를 기울여서 확인해야 합니다. 컴파일러에 너무 의지하다 보면 헛발짚는 경우가 다분해지더라구요. 저처럼요 ㅎㅎㅎ
위 7가지 조건만 어느정도 맞으면 서버 사이드 객체와 ActionScript 객체간에 AMF3 통신을 통해 맵핑이 잘 될겁니다.
맵핑이 되는지 어떻게 아냐구요? 그건 Debugging을 해보시면 압니다. RemoteObject의 ResultEvent.RESULT 이벤트가 발생할때 event.result 를 확인해보세요. Object로 뜨면 맵핑이 안된겁니다.
자 그럼 저처럼 실수 마시고 열 Flex 해요~~
관련글
RemoteClass 메타데이터를 이용한 것을 직렬화라고 하는 군요.
ActionScript 3.0 데이터 유형 및 직렬화(serialization)
Shallow copy 와 Deep copy : flash.net.registerClassAlias 활용
지돌스타 블로그내에 메타데이타 태그 정리한거
Metadata tag 소개
DefaultProperty Metadata tag
ExcludeClass Metadata tag
PercentProxy Metadata tag
Flex Component 간에 종속성을 없애보자.(Event Metadata tag 내용 있음)
글쓴이 : 지돌스타(http://blog.jidolstar.com/390 )
'Adobe Flash Platform' 카테고리의 다른 글
| [Flex, ActionScript 3] 최적화된 for와 for each 문 사용법 (11) | 2008/10/22 |
|---|---|
| "Adobe AIR 인 액션" 서적을 구입하다. (4) | 2008/10/18 |
| [Flex] RemoteClass 메타데이타 태그(Metadata tag) 사용시 매핑(mapping)이 안되나요? (9) | 2008/10/17 |
| Adobe Flash Player 10 정식 배포 (8) | 2008/10/15 |
| Flex 애플리케이션 배포시 RSL 경로 문제 해결 팁 : Embed 또는 Object 태그에 Base 속성 설정하기 (8) | 2008/10/14 |
| [Flex] Flex에서 움직이는 GIF 로딩 (3) | 2008/10/13 |




경험에서 우러나오는 글이군요! ;)
ㅎㅎ 너무 디어서~~
정리했습니다. ^^
"RemoteClass 메타데이타 태그를 사용하지 않으면 Flex는 어떤형인지 알지 못해 그냥 Object 값으로 받아와 버립니다. 물론 사용할 수 있지만 Object 특성상 포퍼먼스에 제약이 있고 또한 Object를 이용하면 탄탄한 설계 바탕이라고 말할 수 없겠지요."
이부분이 궁금한데요..혹시 퍼포먼스에 제약이 있다는게 어떤건지 알고싶어용..
저는 object로 그냥 받는경우가 많아서요..
http://blog.jidolstar.com/399
를 참고해 보세요. ^^
궁금한점이 있습니다....
java의 enum은 어떻게 맵핑시켜야 할까요??
http://livedocs.adobe.com/flex/3/html/help.html?content=data_access_4.html
를 봐주시길 바랍니다.
잘보고 갑니다. ASObject로 받아서 일일히 다 형변환 해줬었는데..-.-;;
덕분에 말끔히 처리됐네요~ㅋ
맵핑이 계속 안되서 패닉상태에 있던중
이글읽고 맵핑했습니다.. =ㅅ=;
지돌님 감사해용 호호호
도움이 되셨다니 다행입니다.
즐 Flex하세요.