'Spring BlazeDS Integration'에 해당되는 글 1건

  1. 2008.12.27 [Spring/Flex] Spring BlazeDS Integration 1.0.0.M1 삽질 후기-_-; (20)
 
열이 아빠님의 글을 보고 http://koko8829.tistory.com/575 삽질을 시작했습니다.
사실 Spring Bean을 BlazeDS에서 사용하는 것은 이미 다른 사람들이 많이 만들었죠^^ 근데 스프링소스에서 공식적으로 지원을 해주다니 대단합니다^^ 제가 한번 해봤습니다-_-; 스프링과 BlazeDS의 기본만 알고 있어서 하는데에는 무리가 없었습니다-_-;

환경 : JDK 6 U 10 + Tomcat 6.0.18 + BlazeDS 3.2.0.3978 + Spring BlazeDS Integration 1.0.0.M1 + Flex SDK 3.2 + Flex Builder 3.0.2 + SpringFramework 2.5.6

SpringFramework 2.5.6 Download
BlazeDS 3.2.3978 Download
Spring BlazeDS Integration Download

쉬운 개발환경을 위해 플렉스빌더에서.....
New Flex Project -> Project name은 SpringBlazeDS, Web application을 선택하고, Application server type은 J2EE로 합니다 ^^ Next를 하시면 Target runtime은 Tomcat 6.0, Flex WAR파일은 BlazeDS를 다운로드해서 blazeds.war파일을 선택합니다. Finish를 때려줍니다-_-;

프로젝트의 Properties에서 Flex Server에 보면 Context root부분이 /WebContent로 되어있는데, /SpringBlazeDS로 바꿔줍니다.

라이브러리는 Spring에서 spring.jar, spring-webmvc.jar, Spring BlazeDS Integration에서 org.springframework.flex-1.0.0.M1.jar를 WEB-INF/lib폴더에 복사하면 됩니다.

자바쪽 셋팅을 해봅시다.
Webcontent/WEB-INF/web.xml파일을 열어서 수정합니다.
기존에는 MessageBrokerServlet을 사용해서 하는데, Spring BlazeDS Integration에서는 Spring Servlet을 사용합니다. MessageBroker Servlet을 servlet-mapping과 함께 지워주고, Spring Servlet을 선언합니다.
web.xml
[code]<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>SpringBlazeDS</display-name>

    <context-param>
        <param-name>flex.class.path</param-name>
        <param-value>/WEB-INF/flex/hotfixes,/WEB-INF/flex/jars</param-value>
    </context-param>

    <!-- Http Flex Session attribute and binding listener support -->
    <listener>
        <listener-class>flex.messaging.HttpFlexSession</listener-class>
    </listener>

    <!--  Spring Dispatcher Servlet -->
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/messagebroker/*</url-pattern>
    </servlet-mapping>
   
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>
[/code]
설정파일을 작성하기 전에 초간단 스프링 빈을 하나 만들어봅시다.
service패키지를 하나 만들고, HelloService라는 클래스를 만듭시다.
[code]package service;

public class HelloService {
    public String sayHello(String name) {
        return name + "! 메리추석!";
    }
}
[/code]
이제 /WebContent/WEB-INF/applicationContext.xml파일을 생성합니다.
applicationContext.xml
[code]<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
   
    <bean id="mySpringManagedMessageBroker"
        class="org.springframework.flex.messaging.MessageBrokerFactoryBean" />
       
    <!-- Maps request paths at /messagebroker to the BlazeDS MessageBroker -->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
        p:mappings="/*=mySpringManagedMessageBroker" />
   
    <!-- Dispatches requests mapped to a MessageBroker -->
    <bean class="org.springframework.flex.messaging.servlet.MessageBrokerHandlerAdapter"/>
   
    <bean id="helloService" class="service.HelloService" />
   
    <bean id="hello"
        class="org.springframework.flex.messaging.remoting.FlexRemotingServiceExporter"
        p:messageBroker-ref="mySpringManagedMessageBroker"
        p:service-ref="helloService"/>
       
</beans>
[/code]
기존 MessageBroker가 Spring에 의해 관리된 MesssageBroker로 들어있는 것 같습니다. 그래서 Remote요청이 들어오면 Spring MessageBroker가 해당 destination을 찾아서 해주는 것 같습니다. 그리고, Spring Bean인 helloService를 불러오는 방법은 FlexRemotingServiceExporter를 이용해서 하는 것 같습니다. 요청하고 싶은 Bean을 FlexRemotingServiceExporter에 DI를 해서 사용하는 것이군요.
이곳에서 FlexRemotingServiceExporter의 id가 destination입니다^^ 저기서 hello로 정의했으니 Flex에서는 destination을 hello로 맞춰주면 되겠죠? ^^
나중에 destination을 추가하는 것은 service-config.xml에서 하는 것이 아니라 이곳에서 해야겠죠.
제가 잘못 이해하고 있는 것이 좀 많은 것 같아서...원문을 참조하세요~ ^^

이제 service-config.xml에 추가해야할 부분이 있습니다.
[code]<services>
    <service-include file-path="remoting-config.xml" />
    <service-include file-path="proxy-config.xml" />
    <service-include file-path="messaging-config.xml" />   
    <default-channels>
       <channel ref="my-amf"/>
    </default-channels>   
</services>
[/code]
아....중요합니다. default-channels를 추가해야합니다!

이제 클라이언트로 가봅시다.
SpringBlazeDS.xml
[code]<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
    <mx:RemoteObject id="srv" destination="hello" />
    <mx:TextInput id="inputName" />
    <mx:Button label="전송" id="btnConfirm" click="srv.sayHello(inputName.text)" />
    <mx:Label id="labelResult" text="{srv.sayHello.lastResult}" />
</mx:Application>
[/code]
RemoteObject로 sayHello함수를 input에 입력해서 결과를 Label에 쓰는 간단한 프로그램입니다.
서버를 실행시키고 실행해봅시다.
사용자 삽입 이미지
로그도 자세히 남는군요.
2008. 12. 27 오전 2:31:42 org.springframework.flex.messaging.servlet.MessageBrokerHandlerAdapter handle
정보: Channel endpoint my-amf received request.

젠장......어느카테고리에 넣어야 하지-_-; Spring에 넣자-_-;
 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon 열이아빠 2008.12.27 10:20  댓글주소  수정/삭제  댓글쓰기

    저는 이제 막 스프링 공부를 다시 시작하고 있습니다.
    아무래도 무개념 상태라..ㅠㅠ
    내년 정식 릴리즈 전에는 좀 준비를 해야 할텐데요.
    카테고리는 'Spring/Flex' 를 따로 만드셔도 좋지 않을까요.^^

    • 머드초보 2008.12.28 11:15  댓글주소  수정/삭제

      저도 스프링 공부를 안한지오래돼서 ㅠ
      간만에 스프링프레임워크 홈페이지에 가니 많이 바뀌었더라구요^^
      이것저것 제품도 많이 나왔구요. 저도 공부를 다시 해봐야겠습니다 ㅠ

  2. 용용 2009.01.09 10:18  댓글주소  수정/삭제  댓글쓰기

    좋은 글 감사합니다. ^^

    • 머드초보 2009.01.09 23:24  댓글주소  수정/삭제

      아넵! 방문해주셔서 감사합니다 ^^
      즐거운 프로그래밍 되세요~ ^^

  3. 아이 2009.01.09 23:30  댓글주소  수정/삭제  댓글쓰기

    대박인데! 이런게 조금만 더 빨리 나왔더라면~!ㅠㅠ
    트랜젝션이랑 라우팅소스 적용할려면 별의별 삽질한걸 생각하면...ㅠㅠ

    • 머드초보 2009.01.14 17:23  댓글주소  수정/삭제

      오..그런건가...-_-;
      이거 아직 정식버전 나오려면 아직 멀은 듯-_-;

  4. 2009.01.19 19:02  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 머드초보 2009.01.20 00:40  댓글주소  수정/삭제

      destination은 지정합니다.
      <mx:RemoteObject id="srv" destination="hello" />
      이 destination명은 FlexRemotingServiceExporter의 명과 같아야합니다

  5. 2009.01.20 10:43  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 머드초보 2009.01.22 00:29  댓글주소  수정/삭제

      음.....뭔가 잘못된 것도 없어보이는데....
      service-config에 이부분도 추가했나요?
      <default-channels>
      <channel ref="my-amf"/>
      </default-channels>
      전 이것때문에 몇시간 날린 적이 있습니다만-_-;
      정 안되시면 mudchobo@nate.com으로 문의주세요.

  6. BlogIcon 이버리 2009.01.29 09:58  댓글주소  수정/삭제  댓글쓰기

    안녕하세요^^ 어제 메일보냈던 사람입니다..
    답장 잘받았습니다.. 감사합니다..

    프로젝트 생성시 WEB으로 선택하고 하니 잘되네요
    감사합니다.

  7. 2009.01.30 09:11  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 머드초보 2009.01.30 15:59  댓글주소  수정/삭제

      아....혹시...언제보내신건가요?ㅠ
      윗분 메일은 온 것 같은데...죄송합니다.
      여기서 써주세요 ^^

  8. 23456 2009.03.19 15:59  댓글주소  수정/삭제  댓글쓰기

    12345

  9. 도니도니 2009.04.20 14:56  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~ LCDS로도 해보셨는지 궁금하네요.
    BlaseDS를 사용했을 시에는 잘 작동하는데 LCDS로는 안되네요.
    버전은 2.5, 2.6 두개 테스트 해보았습니다.
    먼가 설정을 잘못 한것인지 원래 LCDS는 안되는것인지 ..값비싼 LCDS를 지원한해줄리가..-_ -

    • 머드초보 2009.04.23 23:49  댓글주소  수정/삭제

      LCDS는 제가 안해봤네요.
      음 LCDS는 안되는군요-_-
      왜 안되는지 모르겠네요 ㅠ 분명 일부기능을 오픈소스한걸로 알고있는데 ㅠ

  10. jsP 2010.06.21 11:20  댓글주소  수정/삭제  댓글쓰기

    머드초보님 안녕하세요. 해당 글 따라해보다가, 플렉스프로젝트 만드는 부분에서요. runtime서버 지정해주는 부분과 war파일 지정해주는 부분이 어디에 있나 해서요;; 저 플렉스빌더3 쓰는데 그런 부분은 안보이는데요 ㅠㅠ 혹시 이클립스 프로젝트에서 war파일 import해서 만드는 건가요?? 참고로 전 플렉스빌더와 이클립스가 따로따로 설치되어 있습니다.

    • 머드초보 2010.06.26 15:25  댓글주소  수정/삭제

      안녕하세요~ 따로 사용하신 다면 이클립스에서 war를 import하는 게 맞습니다.
      그리고, 이클립스에서 톰캣돌려놓고, 빌더에서는 이걸 요청하는 걸 코딩해야합니다. ^^