며칠전에 블로그를 통해서, SpringSource Tool Suite(STS)의 무료 공개에 대해서 언급했었는데, 이제 공식적으로 무료로 공개한다고, 지난 5월 7일자(미국 시간)로 블로그의 "SpringSource Tool Suite is Now Free!" 라는 제목의 글을 통해서 발표했다.

글의 내용을 잠시 읽어보면, Rod Jonson이 지난 SpringOne Europe에서 약속하였던 것을 이행한다는 이야기이다.
그리고 이제부터는 SpringSource Tool Suite (STS)의 정식버전을 무료로 사용할 수 있다는 내용이다.
또한, Christan Dupuis의 최근의 Blog에 추가된 새로운 Feature(2.1.0.M1)들을 소개한다고 한다.

지난 번에는 블로그를 통해서는 Roo가 STS의 한 Feaure로 들어가있고, Roo를 사용해보기 위해서는 STS를 설치해보아야 한다고 이야기한적이 있는데, 이는 2.1.0.M1 버전 부터 가능할 거라 생각된다.

내가 STS에 관심을 갖고 있는 것은 SpringDM과 OSGi번들로 되어 있는 프로젝트 또는 개발된 Application을 제대로 지원하고 있는 툴이 없기 때문이다. 내가 작년부터 진행하고 있는 프로젝트에 도움이 되지 않을까라는 기대 때문에 이전부터 관심을 두어 있었다.

하지만, 아직 설치와 테스틀 해보지 않은 상태이므로, 툴의 장점을 알아가야 하는 과정을 밟아야 한다.
개발에 직/간접적으로 많은 도움을 줄거라는 기대가 있기 때문에, 조만간 날 잡아서 설치해볼 생각이다.

STS는 "download SpringSource Tool Suite"에서 다운 받을 수 있다.


Posted by 행복상자
내가 현재 진행하고 있는 프로젝트는 Spring Dynamic Modules 1.1.2를 기반으로 개발하고 있다. 그리고 이를 기반으로 다른 솔루션 또는 Web Application들이 개발되고 있다.

지금은 지난 말까지 개발된 Framework의 일부 Architecture와 모듈을 Refactory중에 있다. 이의 필요성은 아마도 Spring DM Server가 나온다면, 사라질지도 모른다. 개발하고 있는 Core가 Spring DM Server와 거의 유사한 Architecture를 하고 있기 때문이다. 아마도 Spring DM Kernel만 있다고 누군가가 같다고 할지도 모르지만, Spring의 많은 기능을 얻어다 사용하기 때문에 이를 갈 수는 없고 많은 혜텍을 입었다고 할 수 있다.

지난 주에 Spring Dynamic Module 1.1.3이 발표되었다.
몇가지 변경된 사항을 살펴보았는데, 크게 바뀐 부분들은 눈에 들어오지 않는다.

아래는 Spring Dynamic Module의 Change Log이다.


Changes in version 1.1.3 (2009-02-13)
-------------------------------------

General
* various documentation improvements and fixes

Package org.springframework.osgi.context
* improved proxying of classes that are boot delegated outside the OSGi environment

Package org.springframework.osgi.io
* fixed manifest headers parsing problem when dealing with nested whitespaces
* fixed handling of optional required bundles
* improved OsgiBundlePatternMatchingResolver to return ContextResources
* changed OsgiBundlePatternMatchingResolver#findResources(String) visibility to protected

Package org.springframework.osgi.service
* fixed visibility issue when invoking non-public proxied methods
* improved waiting code to deal with spurious or accidental wakeups
* fixed issue with OsgiServiceProxyFactoryBean that caused autowiring to fail in some cases

Posted by 행복상자
일민이가 지난주에 호주에서 한국에 들어왔는데, 아직 얼굴은 보지 못하고 있다.
매번 저녁 약속에 다른 약속들이 잡혀서, 그 모임들에 참가 하는라 바쁘다.

아직도 11월인데, 송년회를 한다나, 여의도에서 만나기로 했는데, 다른 사람들이랑 모임이 시작되어서 힘들다고 한다. 이유도 여러 가지 이지만, 아직도 한국에서 그를 찾는 사람들이 많아서 일거다.

암튼 이번주 토요일에 보기로 했는데, 저녁보다는 아침 일찍이 만나야 할 거 같다. 예전 처럼 아침 먹으면서,  여러 가지 이야기를 할 수 있을 거라 생각이 된다. 이제는 아이들 이야기를 할 수 있을 정도로 일민이도 자격을 갖추었으니까... 얼마전에 일민이 아들이 돌이었다고 한다.

다음 동영상은 일민이가 IBM의 DeveloperWorks에 올린 동영상 강좌이다.
올린지 시간이 꽤 지났는데, 최근에서야 보았다.


Posted by 행복상자
Spring DM 1.1.2 버전이 Released 되었다. 1.1.1 정식 버전이 나오고서 2달만에 1.1.2버전이 나왔는데, 그 빠름에 놀라움을 금치 못한다.

사실 내가 이 이야기를 하는 것은 내가 회사에서 미국의 연구소의 개발자와 같이 Spring DM을 이용한 OSGi 관련된 일을 하고 있기 때문이다. 이는 개발적인 측면에서는 많은 부분을 정리해야하는 새로운 분야이고 또한 안정성이나 상품화 측면에서 많은 우려스러움을 블러올 수 있기 때문에, 한참 진행하고 있는 프로젝트에 새로운 버전의 Library를 집어 넣거나 변경하는 것은 신중에 신증을 기해야 한다. 왜냐하면 Spring DM 1.1.0과 1.1.2는 여러 부분에서 개선이 되고, 변경이 일어나고 있기 때문이다.

최근에 미국의 같이 일하는 미국인 개발가 1.1.2 M1으로 라이브러리들을 변경한 적이 있는데, 기존 코드의 수정이 일어나는 중대한 일을, 그는 아무런 이야기가 없이 변경해 버렸다. 내가 이를 보고 그에게 원인이 뭐길래 변경했냐고 물었더니, 새로이 Spring DM에 추가된 기능이 필요했다는 것이었다. 그래도 개발하는 중간에 갑자기 M1정도 되는 버전으로 바꾸면 어떻하냐?, 개발 기간이 이제 2달 여 밖에 남지 않았는데, 그는 11월 말에 1.1.2 버전이 릴리즈 될거라고 이야기 했다.

아무튼 그때, 갑자기 라이브러리 변경을 하지 말라는 주의를 주었는데, 그가 예상했었던 11월보다 1달이상은 빠르게 릴리즈 되어서 정말 놀랐다.
이는 아마도 Spring dm server의 영향일 것이다. 예전에는 Application Platform이라는 이름으로 공개되었는데, 최근에 보니 Spring dm server라는 이름으로 발표되었다. SpringSource dm Server 1.0.0 이 최근에 공개된 버전이다. 이의 개발로 인하여 빠른 버전 Change가 일어나고 있는 것 같다.

아래는 1.1.2에서 변경 수정된 내용들이다. ( Change Log참조)
Changes in version 1.1.2 (2008-10-03)
-------------------------------------

General
* improved sample wars packaging
* various minor documentation improvements

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
* improved file resolving under Equinox

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
* refined single service proxies so that any waiting activity is interrupted on destruction
* improved single service proxies to allow settings update at runtime

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


Posted by 행복상자
간만에 Spring-DM 사이트(www.springframework.org)에 들어갔더니 사이트가 여러모로 개편이 많이 되어 있었다.

현재 안정화 버전은 Spring-DM ver. 1.1.1로 제공되고 있고, Spring-DM을 이용하여 개발에 참조할수 있는 어러가지 관련 글들의 링크들이 올라와 있었다.

아래는 http://springosgi.googlepages.com/ 에 올라와 있는 글인데 Spring-DM을 시작하는 방법들을 소개하고 있어서 가져왔다.
화면 스크린 샷도 같이 있어서 이해하는데 도움이 많이 될수 있을 것 같다.

Table of Contents
I. Spring-DM Getting Started
    1. Prepare Eclipse/Spring-DM environment

    1.1 Prerequisite

    1.2 Create Spring-DM Target Platform project structure

    1.3 Configure Maven using Eclipse External Tools

    1.4 Test Spring-DM Target Platform

    1.5 Creta Spring-DM User Library (class path)

2. Logging and Tracing with Eclipse PDE and Log4J

    2.1 Configure Logging and Tracing with Log4J

    2.2 Configure Eclipse PDE Tracing

3. Implement Simple Spring-DM service

    3.1 Create Spring-DM service project

    3.2 Implement Spring-DM service

    3.3 Configure Spring-DM service

    3.4 Deploy Spring-DM service

    3.5 Package Spring-DM service

4. Integration Testing with Spring-DM

    4.1 Develop Integration Test

5. Develop and deploy Spring-MVC (OSGi-fied) project

    5.1 Create web project as Eclipse plug-in project

    5.2 Define OSGi specific deployment configuration

    5.3 Deploy Spring-MVC project into Spring-DM Target Platform.

6. Develop and deploy JSF based application

         6.1 Create and deploy JSF project as Eclipse plug-in project
Posted by 행복상자
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 행복상자

드디어 Spring Dynamic Module 1.1이 발표되었다. 공식적으로는 미국 시간으로 7월 4일 어제였다. 그런데 바로 하루전인 7월 3일 Spring Dynamic Modules 1.0.3 정식 버전의 정상적으로 Release 되었는데 말이다.

Spring Dynamic Module의 정식이름은Spring Dynamic Modules for OSGi이다. 하지만 작년까지만 해도 우리들에게는 Spring OSGi라는 이름으로 더 잘 알려져 있었다. 그러나 OSGi Appliance의 공식적인 허가 없이는 OSGi라는 명칭을 사용할 수 없기에, 지금은 Sprig Dynamic Module로 사람들에게 소개된 것이다.

다운로드 가능한 위치는 아래와 같다.
    - spring-osgi-1.1.0-with-dependencies.zip
    - spring-osgi-1.1.0.zip

위 링크와 같이 두개의 버전으로 제공이 되는데, dependencies 라고 되어 있는 모듈은 참조를 하고 있는 관련 라이브러리(.jar)파일과 소스를 포함하고 있어서 개발 환경을 구축할 때, 손쉽고 시간을 절약하도록 되와준다. (개인적으로 추천)

Spring-DM 1.1버전과 1.0.3 버전이 하루 차이를 두고 동시에 발표되었는데, 이른 두 버전의 Feature가 다르기 때문이다. 쉽게 이야기 하면 1.1과 1.0의 Feature가 다른데, 1.0버전의 새로운 Feature는 다음과 같다.

The new 1.1.x series introduces several new features over the 1.0.x branch, such as:

* web support (Servlet, JSP, Taglibs) for OSGi applications
* Spring-MVC integration
* classpath scanning
* customization hooks for Spring-DM extender and web extender
* event notifications for OSGi service importers and application contexts
* refined OSGi proxy infrastructure
* 'greedy-proxy' functionality for OSGi collections
* integration with SpringSource Bundle Repository
* support for custom locations for Spring powered bundles
* pluggable mechanism for determining service dependencies
* access to native OSGi ServiceReference for OSGi importers
* new web sample
그리고 몇가지 버그 수정들이 수정됨.

위의 내용은 별도로 번역을 하지 않아도 이해가 가능할것이다. 기능에 대한 새로운 Feature들에 대한 설명인데, 이는 Spring Dynamic Module의 Reference Documentation 참고 하면 된다. (Chapter 3 What is new?)

그래도 간락하게 설명을 하면.
* OSGi상에서 Web Application 지원(Web Serport)
    - Appach Tomcat and Jetty와 같은 Container 지원
    - Spring-DM은 Servlet을 사용하는 WAR 파일을 지원하고,
    - JSP와 Taglib를 위해 거의 변경없이 바로 사용할 수 있게 해준다.
         ==> 참조 :
Chapter 8, Web Support
    - Spring-MVC를 OSGi 환경하에서 지원함
        ==> 참조 : 
Section 8.7, “Spring-MVC Integration”
    - Classpath Resource 탐색지원 :  classpath: and classpath*: 
       ==> 참조: 
component scanning
   - 다양한 extender를 위해 default configurantin 을 쉽게 변경할 수 있음
   - Spring Application의 Lift cycle의 인지 아래 발생하는 Event를 받을 수 있음
   - Proxy Creation(생성)의 성능향상으로 번들의 Package wiring이 좋아짐.


일부에서, 스프링 DM을 이용한 프로젝트에 대해 우려를 많이 한다.
몇가지 알려진 문제들이 있는데, 이들은 이번에 발표된 1.1버전에서 많이 해결되었다.
가장 큰 문제는 Thread 지원과 Class Loder에 관한 부분들이었는데, 1.1의 지원으로 해결됨이 기쁜 일중에 하나이다.

역시 공부할 것은 자꾸 늘어간다. 스스로 실력없음을 항상 느낀다. 스프링의 방대한 소스를 보면서 더 많이 느낀게 되지만, 그래도 즐겁다.

Posted by 행복상자
TAG Sping-DM
며칠전에 SpringSouce에서 새로이 발표한 SpringSource Application Framework에 대해서 글을 소개한 적이 있다. 지난 30일 팀 블러그를 통해 발표 되었었다.
이는 Dynamic Module Kernel(DM-Kernel)을 기반으로 만들어진 현재는 베타버전의 SpringSource의 Application Platform이다.


잘 만든 Architecture도 결국은 어떻게 Deploy하고 관리 할 것이냐에 대한 고민을 하게 되는데, 이는 새로 만든 모듈들과 기존에 동작하는 모듈간에 조화로움이 관건이다.(버전 관리와 Dependency의 문제)

www.springframework.org 에 들어가 보니, Application Platform에 대한 글과 자료들이 새로 올라와 있어서 흩어 보았는데, 리눅스와 윈도우 환경에서 설치와 사용에 대한 Guide와 개발자 매뉴얼이 올라와 있어 새로운 Platform에 대한 이해에 큰 도움이 될거라 생각이 든다.
Web Site에 올라온 자료들의 목록과 링크는 다음과 같다.




각 번들에 필요한 기능들을 어떻게 가져오고 노출 시킬 것인가에 대해해, 요즘 고민 중인데, 분석을 하면서 아이디어를 얻어야 할 것 같다.
현재 내가 하고 있는 프로젝트는 공통 모듈들 개발 해야 하는데, 각 공통 모듈을 이용해서 개발해야 할 솔루션의 내부에도 외부로 노출 시켜야 할 서비스 부분이 분명 존재한다. 이를 어떻게 다른 쪽에 인지 시킬 것인지, 그리고 어떻게 가져다 써야 할 것인지에 대한 고민 중이다.



위와 같이 직접 불러다 사용하거나, 아니면 아래와 같이 공통의 라이브러리를 따로 만들고 각 번들에서 직접 호출해서 사용할 수도 있을 것이다.




Posted by 행복상자

이미 아는 사람들은 알겠지만, Spring Framework를 만들 "로드 존슨"의 회사명은 "Interface21"에서 "SpringSource"로 사명을 바꿨다. 그리고 더욱 왕성한 활동을 보여주고 있다.

오늘 소개하는 SpringSource Application Platform은 SpringSource의 팀 블러그에 올라온 것으로 beta release를 공개한다는 내용이다.
요즘 사내에서 개발하고 있는 Framwork는 OSGi를 기반으로 설계를 진행중이고 이를 위해서 스프링-DM을 사용하려고 한다. 그래서 관심을 갖을 수 밖에 없다.


Tomcat과 Spring을 통해서 lightweight platform을 구성이 가능하지만, modularaty(모듈화)와 non-web application에 대한 지원에 대한 단점을 안고 있다.
이를 개선하기 위한 노력으로 시작된 것이다.

아래는 Application Platform의 구성을 설명해 주는 그림인데, 여기서 중요한 역할을 하는 것은 SpringSource DMK(Dynamic Module Kernel)이다.
SpringSource Application Platform Architecture
DMK가 동작하기 위해서는 최소한의 번들들이 있어야 된다고 한다. MDK는 구동을 위해서 꼭 Tomcat을 필요로 하지도 않지만, Tomcat는 기본적으로 포함되어 있고, 언제든지 설정을 통해 넣거나 뺄수 있다. 그러나 Tomcat을 제거한다는 것은 Web Module의 Deplroy를 하지 않는 다는 것을 의미하므로 이점은 반드시 유의해야 한다.

다음은 Platform에서 지원하는 3가지 패키징 및 Deploy 방법이다.

Building Applications

  • The Platform supports applications packaged in three forms:

    1. Java EE WAR
    2. Raw OSGi bundles
    3. Platform Archive (PAR)

먼저,  WAR파일을 통해서 배포가 가능한데, 이는 배포 시점에 OSG번들과 Tomcat에 설치가 된다.
둘째로, OSGi 번들은 직접 Platform에 배포가 가능하며, Import-Package and Require-Bundle를 이용해서 번들간의 deendency의 선확인이 가능하다.
마지막으로 PAR 포맷은 Platform으로 deploy할 때 수동으로 설치가 쉽고, 로드 될때 다른 서비스와 충돌 또는 이중으로 서비스가 동작하는 것을 막아주고, Application에서 사용되는 모듈들에 대해 로직컬하게 Grouping이 가능하게 만들어 주는 잇점을 가지고 있다.
아래는 모듈간의 RAR Application의 전형적인 예이다.
PAR File Structure
Dependency는 일반적으로 Import-Package & Export-Package를 이용하여 표시한다. 그러나, Third-party 라이브러리를 이용하기 위해서는 이 것말고도 더 많은 라이브러리를 요청하는 경우가 있다. 이를 개선하기 위해서, Platform에서는 Import-Bundle 과 Import-Libary을 이용하여. Import-Bundle 은 추가적으로 다른 third-party 라이브러지를 참조할 수 있게 된다.
 


 

Posted by 행복상자