블로그 이미지
Max.

calendar

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

Notice

2011.09.01 08:40 개발관련

1) ExternalInterface.call 예제

최초 Flex App이 웹화면에 띄워질때 Javascript function을 읽어 들인다. 

mxml

private function getData(event:MouseEvent):void{
searchDate = ExternalInterface.call( "getFlexDate", "test");
if(searchDate.context == null){
searchDate = new Object();
searchDate.context = "http://localhost:8088";
searchDate.startDate = "2011-08-01";
searchDate.endDate = "2011-08-29";
searchDate.selectId="";
}
searchDate.context = searchDate.context + amf;
//Alert.show(searchDate.context + " : " + searchDate.startDate + " ~ " + searchDate.endDate); 
callChanel(searchDate);
}
private function callChanel(sd:Object):void{
var ch:AMFChannel = new AMFChannel();
ch.url = sd.context;
ch.id = "amf";
remotingChannels  = new ChannelSet();
remotingChannels.addChannel(ch);
channelHandler(sd.startDate, sd.endDate);


Html(Javascript)

function getFlexDate(txt){
var searchDate = new Object();
searchDate.startDate = "2011-08-01";
searchDate.endDate = "2011-08-19";
searchDate.context="http://localhost:8088";
searchDate.country="";
return searchDate;
}


최초 시작시 관련 값을 읽을때 편리한다. 

 
2)  ExternalInterface.addCallback  예제

Javascript 로 특정 Flex(Actionscript) function을 호출 하고자 할때, 예를 들어 검색폼이 Html이고, 그값을 Flex에 전달하고 싶을때 사용한다.

mxml

       //creationComplete="init()" 이 상단에 선언되 있음.

            [Bindable] public var searchDate:Object;
    public var realFunction:Function = callFlexReal;
 
private function init():void{
ExternalInterface.addCallback("callFlex", realFunction);
}
 
  public function callFlexReal(sd:Object):void {
sd.context = sd.context + amf;
searchDate = sd;
//Alert.show(searchDate.context + " : " + searchDate.startDate + " ~ " + searchDate.endDate); 
callChanel(searchDate);
}


Html(Javascript)


function callFlex() {
            var searchDate = new Object();
searchDate.context = "http://localhost:8088";
searchDate.startDate = "2011-08-01";
searchDate.endDate = "2011-08-29";
searchDate.country="";
alert(searchDate);
            getMovieName("${application}").callFlex(searchDate); 
            }

            function getMovieName(movieName) {
           if (navigator.appName.indexOf("Microsoft") != -1) {
            return window[movieName]
           }else {
            return document[movieName]
           }
            }

<a href="#" onclick="callFlex()">callFlex()</a>


 
 ${application}는 flash object tag 아이디 명이다. flex builder를 사용한다면, index.template.html 에당 코드를 볼수 있고, 대략 정의하면 된다.   ExternalInterface.addCallback은 한번에 안되었는데, 이유가 이 플래시 Object 아이디명을 정확하게 설정하지 않아서 였다.
저작자 표시
신고
posted by Max.
2009.12.08 16:46 개발관련
배경
항상 새로운 기술을 처음 실무에 적용할때는 떨립니다. 알고 있는 지식의 한계에 대한 불확실성과 어떤 경우가 발생할지 몰라서 처음 부터 다시 시작할 각오를 해야 하는 두려움이 공존해서 말이죠. 가끔은 이런 수고까지 하면서 이래야 하는가 하는 의구심이 들때가 한두번이 아니죠. 그냥 그동안의 얄팍한 지식으로 진행해도 별무리 없으니까요.

그런데 저같은 공상논자는 무리한 도전을 즐기는면이 있어서, 이번에도 그런 기질이 작용했지 않나 싶습니다. 어쨌든 아직 정식 릴리즈도 되지 않은 Spring Roo로 프로젝트를 진행했습니다. 다행히 개발 기술적인 것은 저 혼자 해야하는 좋은(?) 경우여서 시도하게 되었던것 같습니다.(사실 혼자가 아니면 사용할 엄두도 못내었을지도 모르죠)


진행
여차 저차 해서 프로젝트에 대한 컨셉과 프로토타입 문서가 나왔고, 디자인 및 Html까지 나왔습니다. 이제 개발하여, 보여주면 되는 상황인거죠. 대략 결과적으로 생성된 테이블수는 40여개가 되었고(개발하는 도중에는 테이블에 거의 신경쓸 일어 없었습니다.), 도메인 객체 모델링 및 Controller까지 구현은 2주 정도 걸렸습니다. 사실 비지니스까지 걸리는 시간의 대부분은 Roo에 대한 사용법이 미숙해서 걸리거나, OOP 개념 특히 Hibernate에 대한 미숙함으로 걸리는 시간이 대부분이 이였고, 순수 코드 작성에 걸리는 시간은 2일도 안되는것 같습니다. 그만큼 CURD 및 Finder에 대한 구현 자체의 시간의 거의 없었고, 그 Action에 '무엇이 담겨야 하고, 무엇과 연관되어야 하는가'가 많은 시간을 허비하게 했는데, 이것은 개발자에게 말 그대로 도메인에 집중하게 하는 효과를 내지 않았나 하는 생각 입니다.

총 프로젝트는 대략 한달 정도 걸렸는데, 대부분의 시간은 UI 즉,  Html로 된 디자인 파일을 적용하는  것에 시간을 허비하게 되었습니다. 이부분은 사용자 화면과 관리자 화면으로 나누는데, 사용자화면은 디자인이 적용되니 어쩔수 없다고 치더라도, 관리자 화면 역시 시간이 많이 소비되었는데, 이유는 Spring JS(Dojo)를 그대로 사용하지 못했고(IE에서의 스크립트 오류), 다 제거하고, 타일즈도 역시 제거하는 과정(SiteMesh 적용)에서 UI는 Roo의 혜택을 거의 받지 못하게 되었던것 같습니다.

어쨌든, 결과적으로 Roo를 사용하는 것은 프로젝트 시간을 단축하는 효과를 볼수있었습니다. UI 부분은 아직 상당한 부분 응용하기 어려웠고(아마도 이것은 저의 도메인 환경에 대한 제약 때문일 것입니다.), 도메인 변경(필드추가,관계 설정/변경 등)은 어렵지 않았습니다. 하지만, 관계들이 많아져서 복잡해 지니까, 전체적인 그림을 그리는(비주얼한) 무언가가 있어야 할것 같다는 생각이 들었습니다. Roo 는 DB 테이블 구조 보다는 관계 구조를 먼저 떠오르게 하는데, 그 관계를 비주얼하게 볼수 있으면, 전체적인 소스코드 분석에 도움이 될것 같은데, 그것을 보여주는 것이 없어서, 객체 설계자가 아니면, 이해하기 힘들수도 있겠다 하는 생각을 했습니다.


결론
저는 이번 작업을 통해서 Roo는 실무 적용에 문제가 없다는 것입니다. 특히 도메인이나 비지니스 이하 계층에서는 말이죠. Service나 Facade 같은게 없다고 해서, 너무 단편적일 것이라고 생각할수도 있지만, 필요하면 만들어 적용할수 있으니, Roo 때문에 무엇은 안되는거 아닌가? 하는생각은 좀더 고민을 해보시고 판단하는것을 조심스럽게 권합니다. 사실 이번 프로젝트에서도 Service 는 거의 작성하지 않았습니다. 외부로 유출되어야 할 메서드(DWR, Spring BlazeDS Integration 관련)만 작성 했지요. 신기하게도 Roo를 사용하면, Roo에 집중하는게 아니라 Roo 이외의 부분에 집중하게 만들어 줍니다.

( 개발 도중 Version 캡쳐)

앞으로
최근 저의 직업적 환경 변화가 주로 개발에 대한 관리를 하게 되는데, 시간이 허락하는 한 소규모 개발을 진행하려고 합니다. 이번에 또다른 개발을 하게 될것 같은데 역시 Roo 사용해볼까 합니다. 이번 개발에서는 Roo가 기술적 이슈가 아니라 Flex 입니다. 늦게 배운 도둑질이 밤새는줄 모른다고, 최근에 제마음을 흔들어 놓은 것 중에 하나가 Flex 입니다. 이번 프로젝트는 좀더 SI적인 냄새가 날것 같은데, Flex와 Roo 이용한 개발이 재미 있을것 같습니다. 

Spring Roo에 대한 소감을 한마디로 요약하면,
"빠르게 Rich 도메인을 실무에 적용할수 었어서 좋았다."
입니다.  잊지 말아야 할것은  Roo는 그냥 툴이라는 것입니다. 은총알을 기대하진 말아야 합니다.
저작자 표시
신고
posted by Max.
TAG flex, ROO, Spring
2009.11.26 09:07 개발관련

Spring Roo 1.0 RC3 부터는 Spring Security 3.0 RC1을 지원하고 있습니다. 즉 Spring3.0 RC1 의 특징을 살려서 설정을 할수 있다는 이야기가 되겠죠. 여기까지는 설정이나 개발에 문제가 일반적으로 없습니다. 하지만 Spring Flex( Spring BlazeDS Intergration)을 붙일려면 문제가 발생합니다. 바로 버전 호환성에 문제가 나옵니다. 아무레도 SpringFlex가 다른 프로젝트에 비해 지원이 약한듯 합니다.


현재 SpringFlex는 1.0.1 릴리즈 버전이 최신 버전입니다. 헌데 Spring Security 연동에서는 2.x 버전만 지원하고 있습니다. Security3.x 버전은 기능 뿐만 아니라, 패키지 구조가 많이 바뀌어서 관련된 참조가 모두 ClassNotFoundException 를 발생시킵니다.(이슈-FLEX65 참조) Roo에서는 Security3으로 스크립트가 빌드되고, SpringFlex에서는 Security3을 지원 안하고 참 거시기 하게 생겼습니다.


그래도 위대한 Spring 재단에서 조만간 지원하겠지 하며, 살펴보니 1.0.x 버전에서는 지원할 의사가 없고, 1.5.x에서나 지원 할것이라고 합니다. 1.5.x는 아직 JIRA엔 스케줄도 잡히지 않았습니다. 당분간 Spring Security3 은 사용할 엄두도 내지 말라는 소리가 되겠지요. 혹시나 해서 Spring BlazeDS Intergration1.5.0.CI-350  개발중인 통합 버전을 Maven에 빌드하여 돌려 봤는데, 역시나 아직 관련된 작업이 이루어 지지 않은것 같습니다.  1.5.0 M1 버전에 대한 예정은 내년 그러니까 2010년 1/4분기에나 볼수 있다고 합니다. OTL...


혹시나 저같이 둘을 어떻게 조합해보겠다고 용쓰시는 분이 있을까하여 써봤습니다. 현재는 Spring Roo1.0 RC4 + Spring Secutiry2.0.5 + Spring BlazeDS Intergration1.0.1 정도의 조합이 최선일듯 합니다.
저작자 표시
신고
posted by Max.
2009.09.28 15:36 개발관련
뒤늦게 배운 도둑질 날세는지 모른다고 했던가? 이번이 두번째 시도다. 이번엔 성공해야 할텐데. 메인 홈 페이지는 http://www.springsource.org/spring-flex 이다. 홈페이지엔 관련 뉴스, 메뉴얼, 각종 예제, 블로그글 등이 링크되어 있어 다양한 정보를 얻을수 있다. 물론 다운로드(http://www.springsource.org/node/1998) 링크도 있다.
(레퍼던스 문서가 PDF 링크는 되어 있는게 없다. Html문서에서 대충 감으로 사이트 URL를 쳐보니 PDF파일이 있다. http://static.springsource.org/spring-flex/docs/1.0.x/reference/pdf/spring-flex-reference.pdf  ^^*)


그런데 언제부터 Spring By Example 사이트가 직접 링크되는 일이 생겼을까? 관련 예제를 해당 사이트로 연결시켜 놓았는데 신기하다.( http://www.springbyexample.org/examples/simple-flex-webapp.html) 배워야 할께많군...

SPRING BLAZEDS INTEGRATION CHANGELOG
=========================
http://www.springsource.org/spring-flex

Changes in version 1.0.1.RELEASE (09.23.2009)
-----------------------------------------
General
* The bundled Test Drive sample has undergone a good bit of general cleanup.  Most notably, it has been configured
to no longer run as the root web application, the naming conventions of the Spring configuration files has changed to
align with the conventions used in SpringSource Tool Suite project templates, and the Spring Security example has been
expanded to show how to take advantage of the extended functionality that the Spring Security integration provides over
the traditional BlazeDS security mechanisms.  See the specific Jira issues referenced below for further details.

Enhancements
* FLEX-59 - Set the 'source' property on RemotingDestinations to better support Adobe tooling
* FLEX-62 - Configure the testdrive sample to not be deployed as the root web application.
* FLEX-67 - Provide bundles that can wire to Spring 3
* FLEX-72 - Enhance the Spring Security demo to show more typical use cases
* FLEX-73 - Update the naming conventions used in the Test Drive sample to be consistent with STS project templates
* FLEX-74 - Refactor the Authentication translation logic from LoginMessageInterceptor into a re-usable utils class
* FLEX-75 - Add HttpFlexSession configuration to the sample app's web.xml to reduce confusion
* FLEX-76 - Add some further detail to the Security integration docs on configuration recommendations

Bug Fixes
* FLEX-60 - Direct dependence on xalan API causes unnecessary configuration problems
* FLEX-61 - Handle resource cleanup after MessageBroker startup failure.
* FLEX-64 - Flex bundle has a mandatory import for a spring integration package but declares the dependency as optional in its ivy.xml and pom.xml
* FLEX-69 - Exceptions thrown by java back to flex are not handled correctly by Spring BlazeDS integration
* FLEX-70 - Problems with message-broker services-config-path
* FLEX-77 - Spring Security session fixation protection integration not working when security is defined in a parent context

Changes in version 1.0.0.RELEASE (06.09.2009)
-----------------------------------------
General
* Maven central compatible POMs will be mirrored to http://repo1.maven.org
* Marked Jackson and CGLib dependencies as required in ivy and pom configurations since they are almost always needed in practice
* Added documentation about using Spring MVC controllers alongside Spring BlazeDS Integration in the same application.

Enhancements
* FLEX-51 - Extract FlexMessage body for Spring Integration Message payload by default
* FLEX-55 - Map Flex Message id, timestamp, and timeToLive directly into Spring Integration Message
* FLEX-57 - Add tooling metadata to the XML config schema.
* FLEX-58 - Refactor the XML parsing subsystem to always use the ErrorReporter API to report configuration problems

Changes in version 1.0.0.RC2 (05.19.2009)
-----------------------------------------
General
* The Test Drive samples are now included in the distribution and configured for use with Eclipse WTP
* Maven central compatible POMs have been published to the repository at http://maven.springframework.org/milestone/
* Minor revisions to the documentation including a new chapter on working with the test drive sample 

Enhancements
* FLEX-49 - @RemotingDestination should be able to be used on beans in the parent application context

Bug Fixes
* FLEX-37 - Flex schema missing from SpringFramework.org
* FLEX-46 - Spring Security's filter chain not being detected correctly
* FLEX-47 - Jackson is getting set as optional in the auto-generated pom.xml
* FLEX-48 - Multiple consumers created per JmsAdapter instance

Changes in version 1.0.0.RC1 (04.24.2009)
-----------------------------------------
General
* Refactored destination management code to provide a common foundation for Remoting and Message destinations
* Complete messaging support for AMF, JMS, and Spring Integration messaging protocols.
* Annotation-based configuration support for remoting destinations
* Changed remote-service tag name to remoting-destination to be more consistent with BlazeDS nomenclature
* Integration tests now use Fluint instead of FlexUnit (with an eye towards running these tests in CI in the near future)
* Docs updated to cover all new features and reflect changes to existing features

New Features
* FLEX-12 - Allow MessageService destinations to be configured in a Spring WebApplicationContext
* FLEX-13 - Provide a JMSTemplate-based MessagingAdapter
* FLEX-17 - Exporting Beans as Flex Remoting Destination using annotations
* FLEX-18 - BlazeDS commons-logging integration
* FLEX-20 - Add messaging support based on Spring Integration
* FLEX-27 - Add support for messaging features to the flex configuration namespace
* FLEX-30 - Generic hook for catching exceptions and translating them into BlazeDS MessageExceptions
* FLEX-35 - Add GrantedAuthority[] from UserDetails on successful login result message
* FLEX-42 - Configure MessageService on demand if none exists

Enhancements
* FLEX-28 - Support for LiveCycle Data Services ES
* FLEX-33 - Add log to the FlexRemotingServiceExporter in order to see the destinations created in the messageBroker
* FLEX-37 - Allow order to be specified on the default handler mapping installed when using the namespace config
* FLEX-40 - Programmatic Configuration of MessageDestinationFactory
* FLEX-41 - Ensure proper integration with Spring Security when using Flex per-client authentication setting

Bug Fixes
* FLEX-22 - Session invalidation on login broken with BlazeDS in use
* FLEX-26 - JavaAdapters initialize method is not called
* FLEX-32 - SpringSecurityExceptions not always getting properly translated
* FLEX-38 - Ensure that @RemotingDestination annotation works with a bean with an @Autowired constructor.

Changes in version 1.0.0.M2 (03.04.2009)
----------------------------------------
General
* Updated reference manual to cover the new xml config namespace and security integration
* Added an xml config schema with complete documentation of all elements and attributes 
* Added an integration test module (only distributed in source form with the release) that uses FlexUnit

New Features
* FLEX-8 - Configure RemotingService on demand if none exists (i.e., there is no remoting-config.xml) 
* FLEX-10 - Add a <flex:> spring configuration namespace to further simplify configuration
* FLEX-11 - Integration with Spring Security
* FLEX-23 - Create a Spring Security based BlazeDS LoginCommand
* FLEX-24 - Provide an automatic SpringSecurityException to BlazeDS SecurityException translation mechanism 
* FLEX-25 - Add a mechanism for securing BlazeDS Endpoints similar to Spring Security's URL-based security

Enhancements
* FLEX-15 - Add a channel property to FlexRemotingServiceExporter

Bug Fixes
* FLEX-19 - FlexConfigurationManager should be configurable as a Spring bean
* FLEX-21 - FlexConfigurationManager.configurationPath shouldn't require slash (/)

Changes in version 1.0.0.M1 (12.15.2008)
----------------------------------------
General
* Performed an initial code drop at http://src.springframework.org/svn/spring-flex
* Organized project structure to use spring-build and create OSGi-ready build artifacts
* Added an initial draft of the reference manual

New Features
* Configure and bootstrap the BlazeDS MessageBroker as a Spring-managed object
* Allow Flex remoting messages to be routed to a Spring-managed MessageBroker through the DispatcherServlet
* Use Spring's ResourceLoader abstraction to load BlazeDS xml configuration files
* Support for exporting Spring beans for Flex remoting
* Specify included and excluded methods when exporting Spring beans for Flex remoting


저작자 표시
신고
posted by Max.
TAG BlazeDS, flex
prev 1 next

티스토리 툴바