ÀÌ ±ÛÀº Neil Bartlett ÀÇ ¿¬Àç ±Û
"Getting started with OSGi"ÀÇ ¹ø¿ªº»ÀÔ´Ï´Ù.
*
ÆÄÆ® 1 - ù¹øÂ° ¹øµé : Your First Bundle
¿¡ À̾î 2¹øÂ° ±ÛÀÔ´Ï´Ù. ¿ÀÅ»ÀÚ ¹× ÀÌ»óÇÑ ¹ø¿ªÀº ´ñ±Û·Î ³²°ÜÁÖ¼¼¿ä
Getting started with OSGi : OSGi ½ÃÀÛÇÏ±â ÆÄÆ® 2 - ÇÁ·¹ÀÓ¿öÅ©¿Í ¿¬µ¿Çϱâ
ÀúÀÚ : Neil Bartlett < njbartlett at gmail dot com >
¿ªÀÚ : ±Ç Á¤Çõ < guruguru at gmail dot com >
±Û¿øº» :
http://www.eclipsezone.com/eclipse/forums/t90448.html - Getting started with OSGi : Interacting with the Framework
EclipseZone OSGi Æ©Å丮¾ó¿¡ µ¹¾Æ¿À½Å°É ȯ¿µÇÕ´Ï´Ù.
Áö³ ½Ã°£¿¡´Â ½ÃÀÛ°ú Á¾·á½Ã¿¡ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ´Â Hello World ¹øµéÀ» »ìÆìº¸¾Ò´Âµ¥¿ä. À̰ÍÀº
BundleActivator ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ¿© start ¿Í stop ¸Þ¼Òµå¸¦ Á¦°øÇÔÀ¸·Î¼ °¡´ÉÇß½À´Ï´Ù. Äڵ带 ´Ù¸¥ºÎºÐÀ» »ìÆìº¸¸é,
start ¿Í
stop ¸Þ¼ÒµåÀÇ ¼¸í(Method Signature , ¿ªÁÖ:¸Þ¼ÒµåÀÇ À̸§,ÀÎÀÚ,¸®ÅÏŸÀÔµîÀ» ÃÑĪ)¿¡¼ ¿ì¸®°¡
BundleContext ¶ó´Â ÀÎÀÚ¸¦ ¹Þ¾Ò´Ù´Â °ÍÀ» ¾Ë¼ö ÀÖ½À´Ï´Ù. ÀÌ ÀåÀÇ Æ©Å丮¾ó¿¡¼ ¿ì¸°
BundleContext ¿¡ ´ëÇØ ¾Ë¾Æº¸°í ÀÌ °ÍÀ¸·Î ¹«¾ùÀ» ÇÒ¼ö ÀÖ´ÂÁö »ìÆìº¼ °Í ÀÔ´Ï´Ù.
BundleContext ´Â OSGi ÇÁ·¹ÀÓ¿öÅ©°¡ ¿ì¸®¿¡°Ô º¸³»ÁÖ´Â ¸ÅÁ÷ƼÄÏ ÀÔ´Ï´Ù. ÄÚµå»ó¿¡¼ ÇÁ·¹ÀÓ¿öÅ©¿Í ¿¬°üµÈ ÀÛ¾÷À» ÇØ¾ßÇÒ Çʿ䰡 ÀÖÀ» ¶§ BundleContext ¸¦ »ç¿ëÇÏ°Ô µÉ°ÍÀÔ´Ï´Ù. ½ÇÁ¦·Î À̰ÍÀº OSGi API ¿Í ¿¬°áÇϱâ À§ÇÑ ´Ü ÇϳªÀÇ ¹æ¹ýÀ̸ç ÇÁ·¹ÀÓ¿öÅ©´Â ¹øµéÀÌ ½ÃÀ۵ɶ§ BundleActivator ¸¦ ÅëÇØ °¢ ¹øµé¿¡°Ô ÀÌ Æ¼ÄÏÁßÀÇ Çϳª¸¦ ¹ß±ÇÇÏ°Ô µË´Ï´Ù.
Áö³¹ø¿¡ ½ÃÀÛÇÑ Equinox °¡ ¾ÆÁ÷ ½ÇÇàÁßÀ̶ó¸é Àç½ÃÀÛ ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ½ÇÇàÁßÀÌ ¾Æ´Ï¶ó¸é, ´Ù½Ã ½ÃÀÛÇϱâ À§ÇÑ Ä¿¸Çµå´Â
> java -jar equinox.jar -console
ÀÔ´Ï´Ù.
ss ¸¦ ÀÔ·ÂÇØ¼ Áö³¹ø¿¡ ¼³Ä¡ÇÑ HelloWorld ¹øµéÀÌ ¾ÆÁ÷ ¼³Ä¡µÇ¾î ÀÖ´ÂÁö È®ÀÎÇØ º¼ ¼ö ÀÖ½À´Ï´Ù. ´ç½ÅÀÌ Equinox ¸¦ Á¾·áÇϰí Àç ½ÃÀÛÇß´õ¶óµµ ±×°ÍÀ» º¼¼ö Àִµ¥, ¿Ö³ÄÇϸé OSGi ÇÁ·¹ÀÓ¿öÅ©°¡ °¢°¢ÀÇ ½ÇÇà°£¿¡ ½ÇÇà »óŸ¦ ÀúÀåÇϱ⠶§¹®ÀÔ´Ï´Ù.
À̹ø ¿¬½ÀÀ» À§ÇØ, ¿ì¸®´Â Hello World ¹øµéÀ» ã¾Æ³»°í Uninstall(Á¦°Å) ÇÏ´Â ¹øµéÀ» ÀÛ¼ºÇØ º¼°ÍÀÔ´Ï´Ù. ¹°·Ð ÄܼÖâ¿¡¼
uninstall ¸í·ÉÀ» ³»¸²À¸·Î °£´ÜÈ÷ ÇØº¼¼ö ÀÖÁö¸¸, ¾î¶»°Ô OSGi API ¸¦ ÅëÇØ ÇÁ·Î±×·¥ÀûÀ¸·Î ½ÇÇà°¡´ÉÇÑÁö¸¦ ¾Ë¾Æº¸±â À§ÇؼÀÔ´Ï´Ù. ±×·³ HelloWorldKiller.java ¶ó´Â ÆÄÀÏÀ» ¸¸µé°í ¾Æ·¡ÀÇ Äڵ带 º¹»çÇÕ´Ï´Ù.
import org.osgi.framework.*;
public class HelloWorldKiller implements BundleActivator {
public void start(BundleContext context) {
System.out.println("HelloWorldKiller searching...");
Bundle[] bundles = context.getBundles();
for(int i=0; i < bundles.length; i++) {
if("HelloWorld".equals(bundles[i]
.getSymbolicName())) {
try {
System.out.println("Hello World found, "
+ "destroying!");
bundles[i].uninstall();
return;
} catch (BundleException e) {
System.err.println("Failed: "
+ e.getMessage());
}
}
}
System.out.println("Hello World bundle not found");
}
public void stop(BundleContext context) {
System.out.println("HelloWorldKiller shutting down");
}
}
ÀÌÁ¦ Manifest ¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ¸¶Áö¸·ÁÙ¿¡ ºóÁÙÀÌ ÀÖ¾î¾ß Çϴ°ÍÀº ¿ª½Ã ¸Å¿ì Áß¿äÇÕ´Ï´Ù. ¾Æ·¡ ³»¿ëÀ» HelloWorldKiller.mf ¿¡ º¹»çÇϼ¼¿ä.
Manifest-Version: 1.0
Bundle-Name: HelloWorldKiller
Bundle-Activator: HelloWorldKiller
Bundle-SymbolicName: HelloWorldKiller
Bundle-Version: 1.0.0
Import-Package: org.osgi.framework
ÀÚ ÀÌÁ¨ ÄÄÆÄÀÏ Çϰí Jar ÆÄÀÏÀ» ¸¸µì´Ï´Ù.
> javac -classpath equinox.jar HelloWorldKiller.java
> jar -cfm HelloWorldKiller.jar HelloWorldKiller.mf HelloWorldKiller.class
´Ù½Ã OSGi Äֿܼ¡¼
install file:HelloWorldKiller.jar ¸¦ ÀÔ·ÂÇØ¼ »õ ¹øµéÀ» ¼³Ä¡Çϰí
ss ¸¦ ÀÔ·ÂÇØ º¾´Ï´Ù. »óÅ ¸®½ºÆ®´Â ÀÌÁ¦ ¾Æ·¡¿Í °°À» °ÍÀÔ´Ï´Ù.
id State Bundle
0 ACTIVE system.bundle_3.2.1.R32x_v20060919
1 ACTIVE HelloWorld_1.0.0
2 INSTALLED HelloWorldKiller_1.0.0
ÀÚ ÀÌÁ¦
start 2 ¸¦ ÀÔ·ÂÇØ¼ Hello World Killer ¸¦ ½ÇÇàÇÏ¿© º¾½Ã´Ù. ¾Æ·¡¿Í °°Àº Ãâ·ÂÀ» º¸½Ç¼ö ÀÖ½À´Ï´Ù.
HelloWorldKiller searching...
Hello World found, destroying!
Goodbye EclipseZone Readers!
¸¶Áö¸· Ãâ·Â¶óÀÎÀº ¿øº» Hello World ¹øµé¿¡¼ ³ª¿Ô´Ù´Â°ÍÀ» ÁÖ¸ñÇϼ¼¿ä. ¿ì¸®°¡ Killer ¸¦ ½ÇÇàÇϱâ Àü¿¡ ±× ¹øµéÀÌ active »óÅ¿´±â ¶§¹®¿¡ Á¦°ÅµÇ±â Àü¿¡ Áß´Ü µÇ¾î¾ß¸¸ Ç߱⿡
BundleActivator ¿¡°Ô
stop ÀÌ ½ÇÇà µÇµµ·Ï ¸¸µé¾ú½À´Ï´Ù.
ss ÀÇ Ãâ·ÂÀ» º¸µµ·Ï ÇսôÙ. Hello World °¡ ÀÌÁ¦ »ç¶óÁ³½À´Ï´Ù.
id State Bundle
0 ACTIVE system.bundle_3.2.1.R32x_v20060919
2 ACTIVE HelloWorldKiller_1.0.0
¿©±â¿¡ º¸¾È ¹®Á¦°¡ ÀÖÁö ¾ÊÀº°¡ ±Ã±ÝÇØ ÇϽǼö ÀÖ½À´Ï´Ù. ¾î¶² ¹øµéÀÌ¶óµµ ´Ù¸¥ ¾î¶² ¹øµéÀ» Á¦°ÅÇÒ¼ö ÀÖ´Â°Í Ã³·³ º¸À̴ϱî¿ä! ´ÙÇེ·´°Ôµµ OSGi ´Â ÇÁ·¹ÀÓ¿öÅ©¿ÍÀÇ ¸ðµç ¿¬°èÀÛ¾÷µéÀ» ¼¼¹ÐÇÏ°Ô Á¶Á¾ÇÒ¼ö ÀÖ´Â Á¾ÇÕÀûÀÎ º¸¾È°èÃþÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î ƯÁ¤ "°ü¸®" ¹øµé¿¡ ÀÇÇØ¼¸¸ ¹øµéÀÌ Á¦°ÅµÉ¼ö ÀÖµµ·Ï ÇÒ¼öµµ ÀÖ½À´Ï´Ù. ¾î¶°Å³ª, º¸¾ÈÀÌ µ¿ÀÛÇϵµ·Ï Çϴ°ÍÀº ´ëºÎºÐ ¼³Á¤(Configuration)»óÀÇ ¹®Á¦ÀÌ´Ï ÀÌ ¿¬Àç¿¡¼´Â ¿ì¸®´Â Äڵ忡¸¸ ÁýÁßÇϱâ·Î ÇÕ´Ï´Ù.
À̹øÈ¸´Â ¿©±â±îÁö ÀÔ´Ï´Ù. ´ÙÀ½½Ã°£±îÁö
BundleContext ÀÇ ÀÎÅÍÆäÀ̽º¸¦ »ìÆìº¸°í ¹«¾ùÀ» ÇÒ¼ö ÀÖ´ÂÁö ¾Ë¾Æº¸´Â°Ç ¾î¶³±î¿ä ? ¿¹¸¦ µé¾î
installBundle ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ¿© ÇÁ·Î±×·¥ÀûÀ¸·Î »õ ¹øµéÀ» ¼³Ä¡ÇÏ´Â °ÍÀ» ½ÃµµÇØ º¼ ¼öµµ ÀÖ½À´Ï´Ù. ¶Ç´Â ÇöÀç ¼³Ä¡µÈ ¹øµéµé¿¡ ´ëÇÑ ¸®½ºÆ®¸¦ °¡Á®¿Í¼ ¸¶Áö¸·À¸·Î ¼öÁ¤µÈ ³¯Â¥¿Í ½Ã°£À» Ãâ·ÂÇϵµ·Ï ÇÒ ¼öµµ ÀÖ±¸¿ä. ½ÃÀÛÇϴµ¥ µµ¿òÀÌ ÇÊ¿äÇÏ´Ù¸é
OSGi Release 4 API ¿¡ ´ëÇÑ JavaDoc À» Âü°íÇϼ¼¿ä
ÇÏ½Ã¸é ´Ù¾çÇÑ Á¤º¸¸¦ ´õ¿í »¡¸® ¹Þ¾Æº¸½Ç¼ö ÀÖ½À´Ï´Ù.
HelloWorldKiller.java ÄÚµå Áß ¿ÀÅ»ÀÚ°¡ º¸ÀÔ´Ï´Ù.
for(int i=0; i{
^
for(int i = 0; i < bundle.length; i++) {
°í¸¿½À´Ï´Ù.
org.osgi.framework.BundleException: The activator HelloWorldKiller for bundle HelloWorldKiller is invalid
at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:141)
ÀÌ·± ¹®±¸°¡ ¶ß³×¿ä ÀÌÀ¯¸¦ ¸ð¸£°Ù½À´Ï´Ù
À§¿¡ ³»¿ë¿¡µµ ÀÖÁö¸¸ MANIFEST.MF °¡ À߸øµÇ¾î¼ Activator ¸¦ ¸øÃ£±â ¶§¹®Àϵí ÇÕ´Ï´Ù.
MANIFEST.MF ÆÄÀÏ ¸Ç ¸¶Áö¸·¿¡ ºóÁÙÀÌ Çϳª ÀÖ´ÂÁö È®ÀÎÇØ º¸¼¼¿ä.