달력

4

« 2024/4 »

  • 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
Spring Dynamic Module 1.1.1 이 정식으로 Release 되고, 약 1달이 지났다.
며칠전에 새롭게 1.2.0 M1 버전이 릴리즈 되었다. 빠르게 업그레이드 된다는 점도 있지만, 이는 아직 안정화가 안되어 있다는 반증도 된다.

현재 내가 진행하고 있는 프로젝트는 1.1.1을 사용하고 있다. 아마도 정식으로 1.1.2가 나오기 전까지는 이 상태로 유지해야 할 것 같다.

아래는 이번에 추가되거나 수정된 항목이다.
DM을 위한 MVC예제가 수정된 부분이 눈에 띈다.

Changes in version 1.2.0 M1 (2008-09-05)
----------------------------------------

General
* added new annotation-based, Spring-MVC sample
* removed petclinic sample (superseeded by simple-web-app and web-console samples)
* improved sample wars packaging
* improved framework behaviour when running in environments with Java 2 security enabled

Package org.springframework.osgi.context
* added reporting of Errors raised during delegated refresh in AbstractDelegatedExecutionApplicationContext

Package org.springframework.osgi.extender
* fixed bug related to enabling Spring-DM annotation depedency processing
* improved annotation injection processing
* improved extender configuration thread-safety
* fixed potential race condition in asynchronous waiting for service dependencies

Package org.springframework.osgi.io
* improved existence check for bundle resources
* improved jar space pattern matching when the root is not specified
* fixed classpath pattern matching on certain resources when the default Bundle-ClassPath entry (.) is not specified

Package org.springframework.osgi.service
* changed the proxying classloader strategy to address package dependency visibility
* fixed usage of incorrect class loader for imported services with client thread context class loader management
* fixed intermittent deadlock that appeared in some cases betweem importers and exporters during shutdown

Package org.springframework.osgi.web
* improved web extender configuration thread-safety
* improved web extender initialization by using an asynch model for cases with out-of-order dependencies

그리고 레퍼런스 가이드는 여기를 참조하면 된다.
http://static.springframework.org/osgi/docs/1.2.0-m1/reference/html/


:
Posted by 행복상자

정말 오래 간만에 글을 쓰게 되는 것 같다.
미국 출장을 갔다 온지 한달이 넘었는데, 이제야 내 블러그를 찾게 되었다.
뒤 돌아보면 한달은 그리 길지는 않은데, 정말 무심하기도 하지...

출장 후에, 이것 저것 바빴었다. 해결해야 할일도, 해야할 일도 모두 두배로 늘어나 있었다. 그리고, 못 갔던 휴가도 가야했기에....

지난 주는 후배가 운영하는 블러그에 잠시 들렀더니, "SpringDM과 차세대 OSGi"라는 제목으로 글이 올라와 있었다. 관심이 있어서 읽어보고 동료들과 공유를 하기도 했다.

회사에서 현재 진행하고 있는 프로젝트는 OSGi를 이용하는 프로젝트인데, Spring-DM을 그 기반으로 사용하고 있기에 신뢰성과 안정에 주변에서 큰 관심들을 가지고 있다.

블러그의 내용을 요약하면, Spring-DM 스펙이 OSGi 4.2스펙 표준으로 채택될 가성성이 높다라는 글이다. 자세한 내용을 블러그의 내용을 보면 알것이고, 간략하게 몇가지 내용만 설명하려고 한다.

현재, Spring Dynamin Module를 개발하고 있는 몇몇 개발자들이 OSGi Appliance에서도
핵심적인 역할을 하고 있는 것은 익히 잘 알려져 있는 사실이다.
그리고, Enterprize용으로 WAS를 만드는 IBM과 BEA(오라클로 최근에 인수)도 이를 적극적으로 지원하고 있다. 그럴만도 한것 이 Tuxedo를 개발 판매하고 있는 IBM은 OSGi개발에 핵심적인 역할을 하고 있고, 소스 코드를 Eclipse 재단에 무료를 기증한 바 있기에, 여기서 만들어진 Eclipse-equnox는 Eclipse를 성공 케이스로 하여 많은 곧에 적용되고 있는 상황이다. (사실 Eclipse 소스 코드도 IBM에서 오픈한 것입니다. Eclipse의 핵심 Architect역시 IBM 소속입니다.)
 
BEA는 Weblog을 판매하는 회사이지만, Spring Framework를 자사 솔루션에 최후선적으로 지원하고 있습니다. (그 회사 사장이 인터뷰한 기사들을 보면, 얼마나 스프링에 데해서 친근감을 가지고 있은지 알 수 있지요.) 더군다나 Spring Framework의 컨설팅과 유지보스를 하고 있습니다. 이는 Spring에 대한 신뢰성과 자사 제품의판매에 도움이 될거라는 확신 때문이다. 요즘은 OSGi를 자사 WAS에 적용하기 위해서 많은 노력을 하고 있는듯 하다.
 
아래 그림은 Equinox를 적용하려고 하는 개발사들에 대한 그림인데,
서버쪽에서 OSGi를 지원할 경우는 요즘은 Enterprise OSGi라고 하기도 한다.
OSGi대신에 OS-JEEi라고도 하는데, 아직은 널리 알려지 있지는 않았지만 J2EE에 OSGi를 적용한 것이라 생각하면 된다.

사용자 삽입 이미지


:
Posted by 행복상자
지난번에는 Quartz를 사용하기 위한 개략적인 설명과 라이브러리 사용을 위한 문서들의 위치에 대해서 이야기 했었다.

오늘은 Quartz사용시 알아야할, 기본적이지만 정말로 중요한 개념인 Trigger와 JobDetail에 대해서 이야기 하려고 한다.

먼저, Quartz에서 Scheduling 할 수 있은 범위 또는 Scope에 대해서 설명하고, 이어서 두가지에 대해서 말하려 한다.

[Job Scheduling]
  • on certain days of the week (주중의 지정한 날: 특정 요일)
  • on certain days of the month (달주의 지정한 날: 특정 날짜)
  • on certain days of the year (연주의 지정한 날: 특정 날짜)
  • not on certain days listed within a registered Calendar (such as business holidays)
  • repeated a specific number of times (반복횟수)
  • repeated until a specific time/date (종료 시점 지정)
  • repeated indefinitely (무한 반복)
  • repeated with a delay interval (다음 실행을 위한 타임 인터벌)

    위에서와 같이 스케즐러를 실행하기 위한 모든 범주들에 대해서 쿼츠는 커버 가능하다.
    여기서 Job(JobDetail)과 Trigger에 대한 개념을 알아야 하는데,

    먼저 Job에 대해 설명하면 Job는 실행해야 할 작업으로 이해하면 된다. 예를 들면 메이을 보낸다든지, 필요없는 로그 파일들을 정리하거나, 시스템의 자동화된 작업들을 들수 있다.
    여기서는 실행되는 시간에 대한 개념은 없고, 단순히 일의 단위만 생각하면 된다.

    Trigger는 Job의 실행을 위한 조건들이라고 생각하면 이해가 쉽다. 실행될 시간, 반복횟수 또는 Interval time등 여러가지 실행 조건들을 생각하면 되는데, Sheduler이니까 시간에 대한 조건들을 포함하고 있다.(시간 기반으로 동작)

    Quartz기반으로 실행할 작업을 만들려면, Job과 Trigger를 각각 정의해서 묶어주면 된다.
    여기서 Job은 Interface 정의되어 있다. 우리는 이를 상속받아 원하는 작업들을 정의하게 된다. 그리고 Quzrtz의 Sheduler가 실행될때, Job에 대해 이해할 수 있도록 JobDetail를 정의하면 된다.

    .Job interface

    void execute(JobExecutionContext context)


    .JobDetai 클래스의 생성자

    JobDetail(String name, String group, Class jobClass) 

      위 코드에서 name과 group는 Job를 위한 Job이름과 JobGroup를 의미한다. 이는 관리를 편하게 하기 위한 것인데, 필요시 이를 이용하여 Job의 검색이 가능하고, 만약 null값을 넣어 준다면, DEFAULT 그룹명이 할당 된다.

    Trigger클래스는 JobDetail클래를 이용하여 정해진 시간에 실행이 되도록 스케즐러가 관리하는데, 이는 아래와 같은 코드를 통해서 Job에 대한 정보들을 가져오게 된다. 아래 코드는 Job의 name와 Grouup명만 있을 뿐, 직접적으로 할당하지 않지만, 내부적으로는 위에서 정의한 job의 name과 group name을 참조하여 가져오게 된다.

    Trigger(String name, String group, String jobName, String jobGroup)

    여기도 name과 group가 있는데, 이는 Trigger의 이름과 group 명이다.

    다음에는 코드를 이용하여 실제로 Job과 Trigger을 정의하고 사용하는 방법에 대해서 설명하려 하다.

  • :
    Posted by 행복상자
    정말 이번 주는 바쁘기도 무척 바빴지만, 더위와 높은 습도로 인하여 지치는 한주간이었다.

    일반적으로 자바에서, 사용 가능한 Scheduler는 Java에서 기본적으로 제공하는 Timer(J2SE 1.3이후 제공)와 Quartz 라이브러리를 많이 사용한다.
    만약, 우리가 어떤 작업들에 대해서 반복적인 처리를 하고 싶다면, 두 라이브러리의 API와 상속받은 Class를 통해서 호출이 될수 있도록 코드를 추가하기만 하면 된다.

    J2SE에서 제공하는 java.utilTime와 Quartz는 기능적으로 차이가 있는데, Timer는 일정한 주기를 반복하는 기능만을 제공하므로 정해진 시간에 실행되는 기능은 제공하지 않는다.
    반면에, Quartz는 두 가지 모두를 제공한다.(주기적인 실행, 지정한 시간에 실행)
    물론, Quartz의 경우는 더 많은 기능들을 제공한다. Unix와 리눅스의 Cron 텝의 사용법과 유사하게 설정하여, Task또는 Job을 실행 시킬수 있다.
     
    필요에 따라 둘 중에 하나를 사용하면 된다. J2SE의 Timer는 사용법이 쉽다. Quartz는 여러가지 기능을 제공하기 때문에 약간의 노력이 더 필요하다.

    [Quartz 시작하기]
    1. Quartz 시작 하기: http://www.opensymphony.com/quartz/
       - 위 사이트에 가면 간단하게 Quartz가 무었인가에 대해 설명해 주고 있다. Quartz는 오픈소스로 Apache 2.0의 라이센스를 사용하므로, 소스를 고치거나 사용함에 큰 무리는 없다.
       - 현재 사용할 수 있는 최신 버전은 1.6 버전이다.

    2. Quartz 다운로드 하기: http://www.opensymphony.com/quartz/download.action
       - 1.6버전을 다운로드해서 사용하면 된다.

    3. Quartz 관련 문서들: http://wiki.opensymphony.com/display/QRTZ1/Documentation  
       - 보아야 할 문서들이 많다. 하지만 시간이 없거나 간단하게 개념을 이해하고 싶은 사람은
         "3. Learn Quartz의 Tutorials"를 보면 된다. 기본적인 개념과 API사용법을 익히는데
         부족함이 없을 거다.

    4. Quzrtz 간단 예제들: http://wiki.opensymphony.com/display/QRTZ1/Tutorial
       - 12개의 간략한 예제들이 있다. 반드시 읽어봐야 할 예제들로 구성되어 있다.
          Quartz를 사용하고 싶은 사람은 꼭 여기를 보라.

    5. Quartz의 API: http://www.opensymphony.com/quartz/api/
       - Quartz 사용을 위한 API 문서로서, 기본적으로 봐야 할 클래스와 인터페이스는
          1) Scheduler
          2) Trigger
          3) JobDetail
          4) Job (가장 기본적인 Interface이다.)
          5) 기타등등( 나머지는 필요에 따라서 보면된다.)


    조금 복잡할 수동 있지만 Trigger와 JobDetail 클래스(or Interface)의 사용 및 설계 의도를 이해하면 별로 어렵지 않게 Quartz를 접할 수 있을 거다.

    Trigger와 JobDaeail과 Job은 다음 기회에 설명하려고 한다.


    :
    Posted by 행복상자