±ÇÁ¤Çõ
±¸·ç
¿ø¾îµ¥ÀÌ

OSGi ½ÃÀÛÇϱâ 3 - ¹øµé°£ÀÇ ÀÇÁ¸°ü°è : [¹ø¿ª] Dependencies between bundles

Saturday, 03 May 2008

ÀÌ ±ÛÀº Neil Bartlett ÀÇ ¿¬Àç ±Û "Getting started with OSGi"ÀÇ ¹ø¿ªº»ÀÔ´Ï´Ù.
* ÆÄÆ® 1 - ù¹øÂ° ¹øµé : Your First Bundle
* ÆÄÆ® 2 - ÇÁ·¹ÀÓ¿öÅ©¿Í ¿¬µ¿Çϱâ : Interacting with the Framework
¿¡ À̾î 3¹øÂ° ±ÛÀÔ´Ï´Ù. ¿ÀÅ»ÀÚ ¹× ÀÌ»óÇÑ ¹ø¿ªÀº ´ñ±Û·Î ³²°ÜÁÖ¼¼¿ä


Getting started with OSGi : OSGi ½ÃÀÛÇÏ±â ÆÄÆ® 3 - ¹øµé°£ÀÇ ÀÇÁ¸°ü°è

ÀúÀÚ : Neil Bartlett < njbartlett at gmail dot com >
¿ªÀÚ : ±Ç Á¤Çõ < guruguru at gmail dot com >

±Û¿øº» : http://www.eclipsezone.com/eclipse/forums/t90544.html - Getting started with OSGi : Dependencies between bundles

Áö³­È¸±îÁöÀÇ Æ©Å丮¾ó¿¡¼­´Â, ¾î¶»°Ô ¹øµéÀÌ ½ÃÀ۵ǰí ÁߴܵǴÂÁö, ¾î¶»°Ô ÇÁ·¹ÀÓ¿öÅ©¿Í ¿¬°áµÇ°í ´Ù¸¥ ¹øµéÀÇ ¶óÀÌÇÁ »çÀÌŬ¿¡ ¿¬°áµÇ´ÂÁö¸¦ ¾Ë¾Æº¸¾Ò½À´Ï´Ù. ±×·±µ¥ Á¤¸» ¹øµéÀº ¹» À§ÇѰɱî¿ä ?

¹øµé(Bundles)Àº ¸ðµâ(Modules)ÀÔ´Ï´Ù. ¹øµéÀº ¿ì¸®ÀÇ ´ÜÀÏ ÇÁ·ÎÁ§Æ®¸¦ °ü¸®°¡ °¡´ÉÇÑ Á¶°¢µé·Î ºÐ¸®ÇÏ¿© OSGi ·±Å¸ÀÓ ¾ÈÀ¸·Î °¢°¢ ·ÎµåµÉ¼ö ÀÖµµ·Ï ÇØÁÝ´Ï´Ù. ¹®Á¦´Â ¿ì¸®°¡ ¿øÇÏµç ¿øÇÏÁö ¾Êµç°£¿¡, ¸ðµâµéÀÌ ´Ù¸¥ ¸ðµâ¿¡ ÀÇÁ¸°ü°è(Dependency)¸¦ °¡Áö°í ÀÖ´Ù´Â °Ì´Ï´Ù. Æò¹üÇÑ Jar ÆÄÀÏ¿¡¼­´Â ´Ù¸¥ Jar ÆÄÀϵ鿡 ´ëÇØ ½Å·ÚÇÒ¼ö ÀÖ°Ô ÀÇÁ¸°ü°è¸¦ ¸í½ÃÇÏ´Â ÀÏÀÌ ºÒ°¡´ÉÇß½À´Ï´Ù. ( Manifest ¿¡ ÀÖ´Â Class-Path Ç׸ñÀº ½Å·ÚÇÒ ¸¸ÇÑ ¹æ¹ýÀÌ ¾Æ´Õ´Ï´Ù. ) ±×·¡¼­ Jar ÆÄÀϾȿ¡ ÀÖ´Â Äڵ尡 Á¤¸»·Î µ¿ÀÛÇÒÁö ¾Æ´Ï¸é ·±Å¸Àӽÿ¡ ClassNotFoundException À» ³¾Áö´Â ¾Ë ¼ö ¾ø½À´Ï´Ù.

OSGi ´Â ÀÌ ¹®Á¦¸¦ ¸Å¿ì ¿ì¾ÆÇÑ ¹æ¹ýÀ¸·Î ÇØ°áÇß½À´Ï´Ù. ¸»·Î Çϴ°ͺ¸´Ù º¸¿©ÁÖ´Â ¹æ¹ýÀÌ ÁÁÀ»µí ÇÏ´Ï, ÄÚµå·Î °¡º¸µµ·Ï ÇսôÙ. ºÒÇàÇϰԵµ ¿ì¸° Áö±Ý±îÁö ±âº» ÆÐŰÁö¸¦ ÀÌ¿ëÇØ ¿ÔÁö¸¸, ÀÌ´Â ´õÀÌ»ó µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù. ¿ì¸° ÀûÀýÇÑ ÆÐŰÁö°¡ ÇÊ¿äÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù. ±×·³ ¾ÆÁÖ °£´ÜÇÑ JavaBean ½ºÅ¸ÀÏÀÇ Å¬·¡½º·Î ½ÃÀÛÇØ º¾½Ã´Ù. osgitut/movies/Movie.java ÆÄÀÏÀ» ¸¸µé°í ¾Æ·¡ Äڵ带 º¹»çÇϼ¼¿ä.

package osgitut.movies;
 
public class Movie {
    private final String title;
    private final String director;

 
    public Movie(String title, String director) {
        this.title = title; this.director = director;
    }
    public String getTitle() { return title; }
    public String getDirector() { return director; }
}

ÀÌÁ¦ °°Àº ÆÐŰÁö ¾È¿¡ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé°Ì´Ï´Ù. osgitut/movies/MovieFinder.java ÆÄÀÏÀ» ¸¸µé°í ¾Æ·¡Äڵ带 º¹»çÇϼ¼¿ä.

package osgitut.movies;
 
public interface MovieFinder {
    Movie[] findAll();
}

ÀÌÁ¦ ÀÌ µÎ°³ÀÇ Å¬·¡½ºµéÀ» ¹øµé¾È¿¡ Áý¾î ³Ö½À´Ï´Ù. ¿ì¸®ÀÇ ¹øµéÀº Å͹«´Ï¾øÀ» Á¤µµ·Î ÀÛ°í, °ÅÀÇ ¾µ¸ð°¡ ¾øÁö¸¸ Áö±ÝÀº ¹®Á¦¾ø½À´Ï´Ù. Àü°ú °°ÀÌ Manifest ÆÄÀÏÀ» ¸¸µé¾î¾ß ÇϹǷÎ, MoviesInterface.mf ¸¦ ¸¸µé°í ¾Æ·¡¸¦ º¹»çÇϼ¼¿ä.

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Movies Interface
Bundle-SymbolicName: MoviesInterface
Bundle-Version: 1.0.0
Export-Package: osgitut.movies;version="1.0.0"
 

ÀÌÀü¿¡´Â º¸Áö ¸øÇß´ø Export-Package ¶ó´Â »õ·Î¿î ÁÙÀÌ ÀÖ½À´Ï´Ù. ÀÌ´Â ¹øµé¿¡¼­ osgitut.movies ÆÐŰÁö°¡ export µÇ¾ú´Ù´Â°ÍÀ» ÀǹÌÇÕ´Ï´Ù. ¿¹Àü Java jar ÆÄÀÏ¿¡¼­´Â ¸ðµç°ÍÀÌ export µÇ¾úÀ¸¹Ç·Î, óÀ½¿¡´Â Á» ÀÌ»óÇÏ°Ô º¸Àϼö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸, Ȥ½Ã ´ç½ÅÀÇ Jar ÆÄÀϾȿ¡ ³»ºÎÀûÀ¸·Î¸¸ º¼¼ö ÀÖ´Â Äڵ带 ÆÐŰÁö¿¡ Ãß°¡ÇÏ´Â °ÍÀ» ¿øÇغ»Àû ¾øÀ¸½Å°¡¿ä ? ¹°·Ð Ŭ·¡½º´Â private ³ª proctected ·Î ¸¸µé ¼ö ÀÖ°ÚÁö¸¸, ±×·¯¸é ´ç½ÅÀÇ Jar ÆÄÀÏ¿¡ ÀÖ´Â ´Ù¸¥ Package ¿¡¼­µµ ¸ø º¸°Ô µË´Ï´Ù. ±×·¡¼­ OSGi´Â È¿À²ÀûÀÎ »õ·Î¿î ÄÚµå º¸¾È ·¹º§À» ¼Ò°³Çß½À´Ï´Ù. ¸¸¾à ¹øµé¾È¿¡ ÀÖ´Â ÆÐŰÁö°¡ Export-Package Çì´õ¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù¸é, ±× ÆÐŰÁö´Â ¿ÀÁ÷ ´ç½Å ¸ðµâ¾È¿¡¼­¸¸ Á¢±ÙÀÌ °¡´ÉÇÕ´Ï´Ù.

¶Ç ÇÑ ¿ì¸®°¡ ÆÐŰÁö¿¡ ¹öÀü ¹øÈ£¸¦ ºÙÈù°ÍÀ» º¼¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº Áß¿äÇѰÍÀ̸ç Â÷ÈÄ¿¡ »ìÆìº¼ °ÍÀÔ´Ï´Ù. ²À ¹öÀü¹øÈ£¸¦ Á¦°øÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ÇÏÁö¸¸ Á¦°øÇÏÁö ¾ÊÀ¸¸é OSGi ´Â ÀÚµ¿ÀûÀ¸·Î ¹öÀü "0.0.0"À» ´ç½ÅÀÇ ÆÐŰÁö¿¡ ÇÒ´çÇÏ°Ô µË´Ï´Ù. Á¦ »ý°¢¿¡ Ç×»ó ¹öÀüÀ» ¸í½ÃÇϴ°ÍÀÌ ÁÁÀº ½À°üÀ̶ó°í »ý°¢µË´Ï´Ù.

ÀÚ ÀÌÁ¦ ÀÌ ¹øµéÀ» ºôµåÇØ º¾½Ã´Ù.

> javac osgitut/movies/Movie.java osgitut/movies/MovieFinder.java
> jar -cfm MoviesInterface.jar MoviesInterface.mf osgitut/movies/*.class

¹Ù·Î ¹øµéÀ» ·±Å¸ÀÓ¿¡ ¼³Ä¡ÇÏÁø ¾ÊÀ»°ÍÀÔ´Ï´Ù. ¸ÕÀú ÀÌ ¹øµé¿¡ ÀÇÁ¸ÇÏ´Â ´Ù¸¥ ¹øµéÀ» ¸¸µé ¿¹Á¤ÀÔ´Ï´Ù. MovieFinder ÀÎÅÍÆäÀ̽ºÀÇ ±¸ÇöºÎ¸¦ ÀÛ¼ºÇÒ °ÍÀ̹ǷΠ, ¾Æ·¡¸¦ osgitut/movies/impl/BasicMovieFinderImpl.java ¿¡ º¹»çÇÕ´Ï´Ù.

package osgitut.movies.impl;
 
import osgitut.movies.*;
 
public class BasicMovieFinderImpl implements MovieFinder {

  private static final Movie[] MOVIES = new Movie[] {
    new Movie("The Godfather", "Francis Ford Coppola"),
    new Movie("Spirited Away", "Hayao Miyazaki")
  };

 
  public Movie[] findAll() { return MOVIES; }
}

¸Å´ÏÆä½ºÆ® ÆÄÀÏ BasicMovieFinder.mf ¸¦ ¾Æ·¡¿Í °°ÀÌ ¸¸µì´Ï´Ù.

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Basic Movie Finder
Bundle-SymbolicName: BasicMovieFinder
Bundle-Version: 1.0.0
Import-Package: osgitut.movies;version="[1.0.0,2.0.0)"
 

´Ù¸¥ ¹øµé¿¡ ÀÇÇØ Export µÇ¾ú´ø osgitut.movies ¹øµéÀ» import Çϰí Àմٴ°ÍÀ» ÁÖ¸ñÇϼ¼¿ä. ¶ÇÇÑ À̹ø¿£ import ÇÒ¶§ ¹öÀüÀÇ ¹üÀ§¸¦ Ãß°¡Çß½À´Ï´Ù. ÇÁ·¹ÀÓ¿öÅ©´Â import ¿¡ ¸Â´Â ÀûÀýÇÑ export ¸¦ ãÀ»¶§ ÀÌ ¹üÀ§¸¦ »ç¿ëÇÕ´Ï´Ù. OSGi ´Â ÀϹÝÀûÀÎ ¼öÇп¡¼­ »ç¿ëÇÏ´Â ¹üÀ§ÇüÅÂÀÇ ¹®¹ýÀ» »ç¿ëÇÕ´Ï´Ù. "[" ´Â Æ÷ÇÔÇÑ´Ù´Â °ÍÀ» ÀǹÌÇϸç, ")"´Â Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ÀÌ¿¡ ÀÇÇØ ¿ì¸®´Â ¹öÀü "1.x" ´ë¸¦ È¿°úÀûÀ¸·Î ¼±ÅÃÇß½À´Ï´Ù.

´Ù½Ã Çѹø ¸»¾¸µå¸®Áö¸¸, ÀÌ °æ¿ì¿¡ ¹öÀü¹øÈ£ Á¦¾àÀ» import ¿¡ Ãß°¡Çϴ°ÍÀº ²À ÇÊ¿äÇÏÁø ¾Ê½À´Ï´Ù. ±×³É Àͼ÷ÇØÁö¸é ÁÁÀ» ½À°üÀÏ »ÓÀÔ´Ï´Ù.

ÀÚ ÀÌÁ¦ 2¹øÂ° ¹øµéÀ» ÄÄÆÄÀÏÇÏ°í ¹øµé·Î ¸¸µé¾î º¾´Ï´Ù.

> javac -classpath MoviesInterface.jar osgitut/movies/impl/BasicMovieFinderImpl.java 
> jar -cfm BasicMovieFinder.jar BasicMovieFinder.mf osgitut/movies/impl/*.class

ÀÌÁ¦, ÀÌ ¹øµéµéÀ» Equinox ¿¡¼­ ½ÃµµÇغ¼¶§°¡ µÇ¾ú½À´Ï´Ù. ÀÌÁ¦ Àͼ÷ÇØ Áö¼ÌÀ»Å×´Ï, À̹ø¿£ »ó¼¼ÇÑ ¼³¸íÀº ÇÏÁö ¾Ê°Ú½À´Ï´Ù. ¸ÕÀú BasicMovieFinder ¹øµéÀ» ¼³Ä¡ÇÑÈÄ, ss ¸¦ ÀÔ·ÂÇØ º¸¼¼¿ä. ¹øµéÀÌ INSTALLED »óÅ¿¡ Àִٴ°ÍÀ» º¸½Ç¼ö ÀÖ½À´Ï´Ù.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.3.0.v20070208
4       INSTALLED   BasicMovieFinder_1.0.0

(NB ¿©·¯ºÐÀÇ ¹øµé ¸®½ºÆ®´Â Á¦°Í°ú ¾à°£ ´Ù¸£°Ô º¸Àϼö ÀÖ½À´Ï´Ù. ¹øµéÀÇ ID ´Â ´ç½ÅÀÌ ¾ó¸¶³ª HelloWorld ¹øµéÀ» ¼³Ä¡/»èÁ¦ ÇØº¸¾Ò´ÂÁö¿¡ µû¶ó ´Ù¸¦¼ö ÀÖ¾¹´Ï´Ù. ¹øµéID ¸¦ ´ç½ÅÀÇ °ÍÀ¸·Î ¹Ù²ã¼­ º¸µµ·Ï Çϼ¼¿ä.).

INSTALLED ´Â ÇÁ·¹ÀÓ¿öÅ©°¡ ÀÌÁ¦ ¸· ¹øµéÀ» ¼³Ä¡Çߴٴ°ÍÀ» ÀǹÌÇϸç, ¾ÆÁ÷ ¹øµéÀÇ ÀÇÁ¸°ü°è¸¦ ÇØ°áÇÏÁö ¸øÇÞ´Ù´Â °Í(not resolved)ÀÔ´Ï´Ù.Equinox ¿¡°Ô ¿ì¸® ¹øµé¿¡°Ô ÀÇÁ¸°ü°è¸¦ ÇØ°áÇϵµ·Ï ÇÏ´Â ÇϳªÀÇ ¹æ¹ýÀº refresh ¸í·ÉÀÔ´Ï´Ù. refresh 4 ¸¦ ÀÔ·ÂÇÏ°í ´Ù½Ã ss ¸¦ ÀÔ·ÂÇØ º¸¼¼¿ä.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.3.0.v20070208
4       INSTALLED   BasicMovieFinder_1.0.0

¿©ÀüÈ÷ ¹øµéÀÌ resolve µÇÁö ¾Ê¾Ò½À´Ï´Ù. ´ç¿¬È÷, ¿ì¸° Movie Ŭ·¡½º¿Í MovieFinder ÀÎÅÍÆäÀ̽º¸¦ °¡Áö°í ÀÖ´Â ¹øµéÀ» ¼³Ä¡Çؾ߸¸ ÇÕ´Ï´Ù. À̰ÍÀÌ Á¤¸» ¹®Á¦ÀÎÁö¸¦ È®ÀÎÇϱâ À§ÇØ diag 4 ¸¦ ÀÔ·ÂÇØ¼­, Áø´Ü Á¤º¸¸¦ ºÒ·¯º¾´Ï´Ù.

file:BasicMovieFinder.jar [4]
  Missing imported package osgitut.movies_[1.0.0,2.0.0).

³×, ±×°Ô ¹®Á¦¿´³×¿ä. ¾î¶² ¹øµéµµ osgitut.movies ÆÐŰÁö¸¦ export Çϰí ÀÖÁö ¾Ê±â ¶§¹®¿¡ import °¡ ºÒ°¡´ÉÇÕ´Ï´Ù. ±×·³ ÀÌÁ¦ MovieInterface.jar¸¦ ¼³Ä¡Çϰí ss ¸¦ ÀÔ·ÂÇØ º¸¼¼¿ä. ¸®½ºÆ®´Â ¾Æ·¡¿Í °°À»°Ì´Ï´Ù.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.3.0.v20070208
4       INSTALLED   BasicMovieFinder_1.0.0
5       INSTALLED   MoviesInterface_1.0.0

¸¶Áö¸· ´Ü°è´Â Equinox ¿¡°Ô ´Ù½Ã BasicMovieFinder ¹øµé¿¡°Ô resolve ¸¦ ½ÃµµÇϵµ·Ï refresh 4 ¸¦ ÀÔ·ÂÇØ º¸´Â°ÍÀÔ´Ï´Ù. ss ÀÇ Ãâ·ÂÀº ÀÌÁ¦ ¾Æ·¡¿Í °°½À´Ï´Ù.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.3.0.v20070208
4       RESOLVED    BasicMovieFinder_1.0.0
5       RESOLVED    MoviesInterface_1.0.0

BasicMovieFinder ÀÌ ÀÌÁ¦ RESOLVED °¡ µÇ¾ú½À´Ï´Ù. À̰ÍÀº Çʼö´Ü°è·Î¼­, ¹øµéÀÌ RESOLVED »óŰ¡ µÇÁö ¾ÊÀ¸¸é ½ÃÀÛÀÌ ºÒ°¡´ÉÇϸç, ¶ÇÇÑ ´Ù¸¥ ¹øµéµé¿¡°Ô Dependency ¸¦ Á¦°øÇÏÁöµµ ¸øÇÕ´Ï´Ù.

Âü°í·Î, º¸ÅëÀº ÀÌ·± ¹æ¹ýÀÇ ¼öÀÛ¾÷Àº ÇÊ¿äÄ¡ ¾Ê½À´Ï´Ù. ÀϹÝÀûÀ¸·Î ¹øµéÀº ±×µéÀÌ ÇÊ¿ä·Î ÇÒ¶§ ÀÚµ¿ÀûÀ¸·Î resolve µË´Ï´Ù. ¿¹¸¦ µé¾î ¿ì¸®°¡ refresh ¸¦ È£ÃâÇÏÁö ¾Ê¾Ò¾îµµ MoviesInteface ¹øµéÀÌ RESOLVED »óŰ¡ µÈ°ÍÀ» º¸¼¼¿ä.

¿©±â±îÁö ÀÔ´Ï´Ù. Equinox Äְܼú ÇØº¼¼ö ÀÖ´Â ´õ ¸¹Àº Àç¹Ì³­ °ÍµéÀ» À§Çؼ­´Â IBM developerWorks¿¡ ÀÖ´Â Chris Aniszczyk ÀÇ ÈǸ¢ÇÑ ±â»ç ¸¦ Âü°íÇϼ¼¿ä. ´ÙÀ½È¸¿¡¼­´Â OSGi ¼­ºñ½º¿¡ ´ëÇØ ¾Ë¾Æº¸°Ú½À´Ï´Ù. ±â´ëÇØ ÁÖ¼¼¿ä.

[ del.icio.us this | ±¸±Û ºÏ¸¶Å© | ´ÙÀ½ ºÏ¸¶Å© | ¸¶°¡¸° | Bookmakr | ÇÑRSS ºÏ¸¶Å© | Social bookmark This ] | [ Translate to english ]
  °ü·Ã ±Û  

2 Comments
  1. osgitut/movies/Movie.java ¶ó°í Ç϶ó°í Çϼ˴µ¥ /°¡ ÆÄÀÏ¸í¿¡ ¾ÈµÇÁö ¾Ê³ª¿ä? ÆÄÀϸí Àú°Ô ¸Â´Â°ÇÁö ....
    commented by ÆÄÀϸí¿ä Korea (South) [2008/07/18 10:57]
  2.   osgitut ¿Í movies ´Â Æú´õ ÀÔ´Ï´Ù. ÀÛ¾÷ µð·ºÅ丮¿¡¼­ ÇØ´çÆú´õ¸¦ ¼­ºê·Î ¸¸µé°í ³Ö¾îÁÖ¼¼¿ä
    replied by ±¸·ç [2008/07/18 12:46]
À̸§ :  URL(Àִºи¸) :

[´ñ±Ûȯ¿µ!] Àú ´ñ±Û ¹«Áö ÁÁ¾ÆÇÕ´Ï´Ù. ^^      [´ñ±Û µî·Ï]