블로그 이미지
소프트웨어 지옥에서 탈출하기!!! (주)엑스프라임에서 자바로 서버 프로그래밍을 하고 있는 sewony 입니다. 그동안 프로그래머 생활을 하면서 느겼었던 경험을 나누는 장소가 되었으면 합니다.
DukeRick

Recent Comment

Recent Trackback

Archive

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 31  
  • 10,749total
  • 19today
  • 10yesterday
2008/03/12 17:17 FDS/BlazeDS
BlazeDS 와 스프링(Spring) 연동하기

BlazeDS를 이용하여 Remote Object Service를 이용할 때 스프링과 연동할 수는 없을까 라는 의문을 가지고
자료를 찾아보았습니다. 역시 이미 연동해서 사용하는 방법이 있더군요

다음의 remoting-config.xml 파일을 봅시다.

 <!-- 스프링 프레임워크를 이용한 remote object -->
<destination id="simpleLoadService">
 <properties>
  <factory>springfactory</factory>
  <source>simpleLoadDao</source>
 </properties>
</destination>   

일반적인 destination을 정의하는 부분과 다릅니다. 바로 <factory>라는 부분인데요, springfactory 라는
새로운 factory를 정의해서 스프링과 remote object를 연결시실수 있습니다.
그러면 springfactory 가 정의된 부분이 있어야 겠죠?

바로 services-config.xml 파일에 정의합니다.

 <!-- 스프링 프레임워크를 사용할수 있게 하기 위한 팩토리 설정  -->
 <factories>
  <factory id="springfactory" class="flex.messaging.factory.SpringFactory" />
 </factories>


위의 내용이 springfactory를 정의한 부분입니다.
이제 이 factory를 통해서 스프링과 remote object가 연결됩니다.
그러면 flex.messaging.factory.SpringFactory 는 원래 flex package에 존재하는 클래스일까요?
그렇지 않습니다. 스프링과의 연동을 위해 따로 제작된 클래스죠. 저도 외국 사이트에서 다운로드 했습니다.
첨부파일로 올리니 다운 받아서 lib에 등록해서 사용하시면 됩니다..


remoting-config.xml 에서 source로 설정되어 있는 simpleLoadDao도 마저 살펴봅시다.
스프링의 bean설정파일인 applicationContext.xml 파일에 등록되어 있겠죠.

applicationContext.xml

 <bean id="simpleLoadDao" class="flexintegration.spring.sample.SimpleLoadDao">
   <property name="sqlMapClient" ref="sqlMapClient" />
  </bean>

 <!-- SqlMap setup for iBATIS Database Layer : 스프링 프레임워크와 iBATIS의 연동  -->
 <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  <property name="configLocation" value="WEB-INF/ibatis/sql-map-config.xml" />
  <property name="dataSource" ref="dataSource" />
 </bean>

  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName" value="${jdbc.driverClassName}"/>
      <property name="url" value="${jdbc.url}"/>
      <property name="username" value="${jdbc.username}"/>
      <property name="password" value="${jdbc.password}"/>
  </bean>

  <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="locations">
          <list>
              <value>classpath:jdbc.properties</value>
          </list>
      </property>
  </bean>


이렇게 설정이 되면 Remote Object로 바로 스프링의 DI(Dependency Injection)를 이용하는 bean을
사용할수가 있게 됩니다. ( iBatis를 이용하고 있어서 iBatis에 대한 경험이 없으시면 약간 이해하기
힘들수도 있겠네요 )

여기까지 Remote Object로 스프링 bean을 연동해서 사용하는 방법에 대해서 알아보았습니다.
Remote Object로 스프링의 강력한 DI를 바로 사용할 수 있다는 건 대단한 장점이죠.

참고로 AOP도 Remote Object 사용시 제대로 동작합니다. ( 테스트 해 보았죠 )

스프링과의 연동을 생각하셨던 분들에게 도움이 되셨기를...
posted by DukeRick

댓글을 달아 주세요

  1. 머드초보 2008/03/17 15:42  Addr  Edit/Del  Reply

    우와 감사합니다 ㅠㅠ 한번 해보겠습니다.
    저는 그냥 스프링에 있는 클래스를 그냥 가져오려고 했는데
    자꾸 Dao가 null에러가 나길래 applicationContext에서 정의된 DI가 안되어있는건가 라고 생각을 했었는데 그래서 검색을 하니 바로 나오네요^^
    감사합니다~ ^^

  2. DukeRick 2008/03/18 11:19  Addr  Edit/Del  Reply

    도움이 되시면 좋겠네요. 저도 요즘 spring+blazeDS로 이것저것 해보느라 정신없네요

  3. fusha 2008/07/02 18:45  Addr  Edit/Del  Reply

    감사합니다.
    저도 spring+blazeDS로 이것저것 해보고 있는데, 많은 참고가 되었습니다.
    그런데

    "참고로 AOP도 Remote Object 사용시 제대로 동작합니다. ( 테스트 해 보았죠 )"
    라고 하셨는데... 어떻게 설정을 하셨는지... ㅠ.ㅠ
    여러가지 방법으로 해봤는데... AOP가 동작되지 않아서...
    혹 알려 주실수 있는지... 아님... 힌트라도...
    혹시나 해서 메일 주소도 남겨봅니다. ( zzuni27@nate.com )
    그럼 꾸뻑~~ (^^)(__)

  4. 꼼즈 2009/02/06 16:20  Addr  Edit/Del  Reply

    좋은 자료를 만났네요 ^^
    Flex를 공부하고 있는데 BlazeDS를 찾다보니 여기까지 왔네요..
    바쁘더라도 시간을 쪼개서 한번 해봐야겠습니다..
    소중한 글 잘 읽고 갑니다..

2008/03/12 16:47 FDS/BlazeDS

BlazeDS와 LCDS의 기능 차이

첫번째 글에서 밝혔듯이 BlazeDS에는 LCDS의 몇가지 기능이 삭제되어 있습니다.

LCDS의 핵심적인 기능이라면,

Data Management
Remote Object Service
Messaging


이렇게 크게 3가지라고 볼수 있겠습니다. (그외에 PDF 제너레이터 같은 것들도 있죠)

BlazeDS는 이 중에서 Data Management 기능을 제외한 2가지를 지원합니다.

Data Management는 Server/Client Data Synchronization을 위한 기능인데 LCDS의 핵심 기능이기는 하지만
제가 보기에는 일반적인 프로젝트에서 실제로 크게 많이 쓰일만한 기능은 아닌것으로 보입니다.

어쨋든 Data Management를 제외한 나머지 주요한 기능은 BlazeDS에서도 지원하고 있습니다.

찾아본 자료에 의하면 Remote Object Service의 경우는 BlazeDS와 LCDS간에 성능차이는 없습니다.
다만, Messaging의 경우는 LCDS는 CPU당 1000개 수준의 Dedicated messaging service 를 지원하는 반면,
BlazeDS에서는 CPU당 100개 수준의 Web container-based messaging service 만을 지원하죠.
이부분은 좀 아쉬운 부분입니다.

어쨋든 공짜로 사용할 수 있는 것이니 Remote Object Service만 해도 충분히 사용할 만한 가치는
있는 것 같습니다.

posted by DukeRick

댓글을 달아 주세요

2008/02/25 17:37 FDS/BlazeDS

BlazeDS 설치

기본 준비 사항

BlazeDS를 사용하기 위해서는 먼저 Flex3 가 필요합니다. (Flex2의 경우 Remote Object를 사용하는
mxml 파일을 작성할 때 컴파일 에러가 발생합니다)


다운로드

Adobe 사이트에서 BlazeDS를 다운로드 합니다.
http://opensource.adobe.com/blazeds
참고로, Adobe 홈페이지에 계정이 있어야 합니다.

다운로드 페이지에는 3가지 옵션이 있습니다.
1. TurnKey
   Tomcat이 포함되어 있어서 바로 sample을 실행시켜 볼 수 있습니다.
   WAS가 설치되어 있지 않는 환경이나 setting에 자신이 없을 시, sample code가 필요할 시는
   이 버전으로 받으시기 바랍니다.
2. Binary Distribution
   개발에 필요한 jar libaray 및 xml 파일만 포함되어 있습니다.
3. Source
   1번에서 BlazeDS의 전체 소스 코드가 포함된 버전입니다.
   
BlazeDS를 처음 사용하신 다면 1번으로 다운로드 받으시기 바랍니다.


설치하기

BlazeDS는 실제로 따로 설치되어 동작하는 서버는 아닙니다. ( Tomcat은 sample을 실행시켜보라고
포함되어 있을 뿐입니다.)
BlazeDS를 사용하여 개발시에는 위의 Binary Distribution에 포함되어 있는 jar와 xml 파일만 포함시키면
충분합니다.
TurnKey로 다운로드 받은 파일을 원하는 위치에 압축을 풉니다.


Sample 실행하기

{설치폴더}\tomcat\bin\startup.bat 파일을 실행합니다.
만약 기존에 Tomcat이 설치되어서 현재 start되어 있다면, 기존 Tomcat은 정지시키고
위의 startup.bat을 실행하시기 바랍니다.

정상적으로 실행되었으면
http://localhost:8400/ 로 연결해 보시기 바랍니다.

다음과 같이 나오면 정상적으로 설치된 것입니다.

사용자 삽입 이미지

Samples Application 을 선택하여 실행시켜 보기 전에 먼저 DB를 실행시켜 주어야 합니다.
( 대부분의 샘플들이 DB 를 이용합니다.)

{설치폴더}\sampledb 에서 startdb.bat을 실행합니다.

이제, Samples Application 로 들어가서 샘플들을 실행시켜 봅시다.


posted by DukeRick

댓글을 달아 주세요

2008/02/25 17:27 FDS/BlazeDS

BlazeDS란?

BlazeDS는 Adobe에서 만든 LCDS(Life Cycle Data Service)와 유사한 개념의 Open Source
프로젝트입니다.

참고로, LCDS와 BlazeDS의 기능상의 차이는 다음 그림에 잘 나와 있습니다.
전체 사각형은 LCDS의 기능 집합이여, 아래에 컬러(하늘색)로 표시된 부분만 BlazeDS의 기능입니다.

사용자 삽입 이미지


가장 중요한 기능은 Flex에서 Remote Object란 개념으로 서버상의 Java method를 바로 Call할 수
있다는 것입니다.
BlazeDS 없이는 Remote Object (이하 RO라 표현)를 사용할 수 없으며, 따라서 기존에는
HTTPService 혹은 SOAP을 이용한 WebService방식으로 서버상의 기능을 호출하게 됩니다.
가장 기본적인 방식인 HTTPService의 경우 servlet을 호출하여 결과값을 xml이나 text형식으로
받아서 사용합니다.

가장 기본적인 사용방법은 다음과 같습니다.
 <mx:HTTPService id="srvHTTP" method="POST" useProxy="false" url="simple" showBusyCursor="true" fault="Alert.show(event.fault.faultString, 'Error');"/>
위의 예에서 url 부분에 servlet의 경로가 들어가게 되고 POST방식으로 호출한다는 의미입니다.

하지만 RO를 사용하게 되면,
서버상의 remoting-config.xml 파일에 destination에 해당하는 부분을 정의한 후
 java method를 바로 호출하고 결과값을 primitive type혹은 javabean 형태로 받을 수 있습니다.

    [remoting-config.xml 파일]

    <destination id="simpleLoadService">
        <properties>
            <source>flexintegration.sample.SimpleLoadService</source>
        </properties>
    </destination>   


다음은 전체 mxml파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="#FFFFFF">
 
 <mx:Script>
 <![CDATA[
  import mx.controls.Alert;
 ]]>
 </mx:Script>
 
 <mx:RemoteObject id="srvRO" destination="simpleLoadService" showBusyCursor="true" fault="Alert.show(event.fault.faultString, 'Error');" />
 
 <mx:DataGrid dataProvider="{srvRO.getAll.lastResult}" width="100%" height="100%"/>
<mx:Button label="Get Data" click="srvRO.getAll()"/>
 
</mx:Application>


"Get Data"란 버튼을 클릭하면 simpleLoadService를 호출하고 데이터를 가지고 오게 됩니다.


다음은 실제 simpleLoadService로 선언한
flexintegration.sample.SimpleLoadService.java 파일의 내용입니다.

package flexintegration.sample;

import java.util.List;
import com.mydomain.data.SimpleIbatis;

public class SimpleLoadService {

    public List getAll()
    {
     List beans;
    
     try
     {
      beans = SimpleIbatis.selectAllSimpleBean();
     }
     catch(Exception e)
     {
         return null;
     }
     return beans;
    }

}


Database에서 값을 가져온 후 결과 데이터를 List로 만들어서 Flex쪽으로 리턴합니다.


이와 같이 RO를 이용하게 되면 서버쪽의 Java method를 바로 호출할 수 있어서 개발 속도를 향상 시킬수
있으며, xml이나 text파일이 아닌 serialize된 object를 전달받게 되므로 대용량 데이터의 경우 데이터
전송 속도의 향상도 기대할 수 있습니다.
posted by DukeRick

댓글을 달아 주세요