ÀÌ ±ÛÀº 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 ¼ºñ½º¿¡ ´ëÇØ ¾Ë¾Æº¸°Ú½À´Ï´Ù. ±â´ëÇØ ÁÖ¼¼¿ä.