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

OSGi ½ÃÀÛÇϱâ 8 - ¼±¾ðÀû ¼­ºñ½º¿Í ÀÇÁ¸°ü°è : [¹ø¿ª] Declarative Services and Dependencies

Friday, 09 May 2008

ÀÌ ±ÛÀº Neil Bartlett ÀÇ ¿¬Àç ±Û "Getting started with OSGi"ÀÇ ¹ø¿ªº»ÀÔ´Ï´Ù.
* ÆÄÆ® 1 - ù¹øÂ° ¹øµé : Your First Bundle
* ÆÄÆ® 2 - ÇÁ·¹ÀÓ¿öÅ©¿Í ¿¬µ¿Çϱâ : Interacting with the Framework
* ÆÄÆ® 3 - ¹øµé°£ÀÇ ÀÇÁ¸°ü°è : Dependencies between bundles
* ÆÄÆ® 4 - ¼­ºñ½º µî·ÏÇϱâ : Registering a Service
* ÆÄÆ® 5 - ¼­ºñ½º »ç¿ëÇϱâ : Consuming a Service
* ÆÄÆ® 6 - µ¿ÀûÀ¸·Î ¼­ºñ½º ÃßÀûÇϱâ : Dynamic Service Tracking
* ÆÄÆ® 7 - ¼±¾ðÀû ¼­ºñ½º ¼Ò°³Çϱâ : Introducing Declarative Services
¿¡ À̾î 8¹øÂ° ¸¶Áö¸· ±ÛÀÔ´Ï´Ù. ¿ÀÅ»ÀÚ ¹× ÀÌ»óÇÑ ¹ø¿ªÀº ´ñ±Û·Î ³²°ÜÁÖ¼¼¿ä


Getting started with OSGi : OSGi ½ÃÀÛÇÏ±â ÆÄÆ® 8 - ¼±¾ðÀû ¼­ºñ½º¿Í ÀÇÁ¸°ü°è

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

±Û¿øº» : http://www.eclipsezone.com/eclipse/forums/t97690.html - Getting started with OSGi : Declarative Services and Dependencies


"Getting Started with OSGi" ½Ã¸®Áî¿¡ µ¹¾Æ ¿À½Å°É ȯ¿µÇÕ´Ï´Ù. ·¹½¼ ½ÃÀÛÀü¿¡ ÇѰ¡Áö °øÁö, ÀÌ Æ©Å丮¾óÀÇ ÀÌÀüȸµéÀ» º¸½Ã·Á¸é Á¦ ºí·Î±× ÆäÀÌÁö¿¡¼­ ¸µÅ©µéÀ» ã¾Æº¸½Ç¼ö ÀÖ½À´Ï´Ù.

Áö³­¹ø¿¡´Â ¼±¾ðÀû ¼­ºñ½º¿¡ ´ëÇØ óÀ½À¸·Î »ìÆìºÃ½À´Ï´Ù. À̹ø¿¡´Â ¼±¾ðÀû ¼­ºñ½ºÀÇ »ç¿ëÀÚ Ãø¸éÀ» »ìÆìº¼ °ÍÀÔ´Ï´Ù. Áö³­¹ø¿¡ java.lang.Runnable ÀÎÅÍÆäÀ̽º·Î ¼­ºñ½º¸¦ µî·ÏÇߴٴ°ÍÀ» ±â¾ïÇϼ¼¿ä. ÀÌÁ¦ ¿ì¸®´Â ±× ¼­ºñ½º¿¡ ÀÇÁ¸ÇÏ´Â ÄÄÆ÷³ÍÆ®¸¦ ¸¸µé¾î º¼ °ÍÀÔ´Ï´Ù.

¸»¾¸µå¸°´ë·Î, ¼±¾ðÀü ¼­ºñ½º¿¡ ´ëÇÑ ½ºÆåÀº ÀÌÀü ·¹½¼µé¿¡¼­ º¸¾Ò´ø OSGi ÀÇ ±Û·ç(glue)Äڵ庸´Ù ¿©·¯ºÐ ÄÚµåÀÇ Application Logic ¿¡ ÁýÁßÇÒ¼ö ÀÖµµ·Ï ÇØÁÖ´Â °ÍÀÔ´Ï´Ù. ÀÌ°É ¿°µÎ¿¡ µÎ°í, Äڵ带 »ìÆìº¸°Ú½À´Ï´Ù. ±×Àü¿¡ ¿ì¸° ÇÁ·ÎÁ§Æ®¸¦ Çϳª ¸¸µé¾î¾ß ÇÕ´Ï´Ù. ÀÌÀü ·¹½¼ÀÇ ¼ø¼­¸¦ µû¶ó¼­, À̹ø¿£ "SampleImporter" ¶ó´Â À̸§À¸·Î ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇÏ¿© º¸¼¼¿ä.

»õ·Î »ý¼ºµÈ Eclipse ÇÁ·ÎÁ§Æ®¿¡ ¾Æ·¡ Äڵ带 º¹»çÇÏ¿© src Æú´õ¿¡ ºÙ¿©³Ö½À´Ï´Ù.

package org.example.ds;
 
import org.eclipse.osgi.framework.console.CommandInterpreter;
import org.eclipse.osgi.framework.console.CommandProvider;
 
public class SampleCommandProvider1 implements CommandProvider {

	
	private Runnable runnable;
	
	public synchronized void setRunnable(Runnable r) {
		runnable = r;
	}

	public synchronized void unsetRunnable(Runnable r) {
		runnable = null;
	}
	public synchronized void _run(CommandInterpreter ci) {

		if(runnable != null) {
			runnable.run();
		} else {
			ci.println("Error, no Runnable available");
		}

	}
	public String getHelp() {
		return "\trun - execute a Runnable service";
	}
}


ÀÌ Å¬·¡½º´Â Equinox ¸¦ ½ÇÇàÇÒ¶§ osgi> ÇÁ·ÒÇÁÆ® »ó¿¡¼­ »ç¿ë°¡´ÉÇÑ ¸í·ÉµéÀ» È®ÀåÇÏ´Â CommandProvider ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÕ´Ï´Ù. CommandProvider ¸¦ ÀÛ¼ºÇÏ´Â ÀÌÀ¯´Â, ±×°Ô ¿ì¸® Äڵ带 ÀÎÅÍ·¢Æ¼ºêÇÏ°Ô Å×½ºÆ®ÇÏ±â ÆíÇϱ⠶§¹®ÀÔ´Ï´Ù. Ä¿¸Çµå ÇÁ·Î¹ÙÀÌ´õ¿¡ ´ëÇØ¼­´Â IBM developerWorks ¿¡ Chris Aniszczyk ÀÇ ±â»ç¿¡ ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ÀÖ½À´Ï´Ù.

¿ì¸®°¡ ÀÌ Å¬·¡½º¿¡¼­ ¾î¶² OSGi API µµ È£ÃâÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ÁÖ¸ñÇϼ¼¿ä. ½ÇÁ¦·Î ¿ì¸®´Â org.osgi.* ÆÐŰÁö¿¡¼­ ¾Æ¹«°Íµµ import ÇÒ Çʿ䵵 ¾ø½À´Ï´Ù. ¿ì¸®°¡ ÀÇÁ¸ÇÏ´Â ¼­ºñ½º´Â java.lang.Runnable ÀÇ ÀνºÅϽºÀ̸ç setRunnable ¸Þ¼Òµå·Î ¿ì¸®¿¡°Ô Àü´ÞµÇ¸ç, unsetRunnable ¸Þ¼Òµå¿¡ ÀÇÇØ Ä¡¿öÁý´Ï´Ù. ¿ì¸®´Â À̰ÍÀ» dependency injection ÀÇ ÇüÅ·Πº¼¼ö ÀÖ½À´Ï´Ù.

´Ù¸¥ µÎ°³ÀÇ ¸Þ¼Òµå getHelp ¿Í _run Àº Ä¿¸Çµå ÇÁ·Î¹ÙÀÌ´õ¿¡ ´ëÇÑ ±¸Çö ¸Þ¼Òµåµé ÀÔ´Ï´Ù. ³×, "_run" Àº ¾Õ¿¡ ¹ØÁÙÀÌ ÀÖ´Â ¿ô±â´Â À̸§ÀÔ´Ï´Ù¸¸, À̰ÍÀº Equinox console APIs ÀÇ ÀÌ»óÇÑ ±â´ÉÀ̸ç OSGi ³ª ¼±¾ðÀû ¼­ºñ½º¿Í´Â »ó°üÀÌ ¾ø½À´Ï´Ù. ¸Þ¼ÒµåÀÇ À̸§ ¾Õ¿¡ ¹ØÁÙÀ» ³Ö´Â ÆÐÅÏÀº Equinox console ¿¡¼­ ¸í·ÉÀÌ µÇ¹Ç·Î, _run ¸Þ¼Òµå¸¦ Á¦°øÇÑ´Ù´Â °ÍÀº ¿ì¸®°¡ "run" ¸í·ÉÀ» Ãß°¡Çߴٴ°ÍÀÔ´Ï´Ù. ÀÌ Å¬·¡½º¿¡¼­ ÁÖÀÇÇÒ ´Ù¸¥Á¡Àº, runnable Çʵ尡 ¾÷µ¥ÀÌÆ®/Á¢±ÙÀÌ ¾²·¹µù¿¡ ¾ÈÀüÇÑ ÇüÅ·ΠÀÌ·ç¾îÁ®¾ß ÇÑ´Ù´Â °Í¿¡ ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù. OSGi °¡ º»ÁúÀûÀ¸·Î ¸ÖƼ¾²·¹µåÀ̱⠶§¹®¿¡ ¾²·¹µå ¾ÈÀüÀº Áß¿äÇÕ´Ï´Ù. ¿ì¸° Ç×»ó ¿ì¸®ÀÇ Äڵ带 ¾²·¹µù¿¡ ¾ÈÀüÇÏ°Ô ÀÛ¼ºÇØ¾ß ÇÕ´Ï´Ù.

Àü°ú °°ÀÌ, ¿ì¸° À̰ÍÀÌ °¡´ÉÇÏ°Ô ÇÏ´Â DS ¼±¾ðÀ» °¡Áø XML ÆÄÀÏÀ» Á¦°øÇØ¾ß ÇÕ´Ï´Ù. ¾Æ·¡ Äڵ带 OSGI-INF/commandprovider1.xml ¿¡ º¹»çÇϼ¼¿ä.

<?xml version="1.0"?>
<component name="commandprovider1">
	<implementation class="org.example.ds.SampleCommandProvider1"/>

	<service>
		<provide interface="org.eclipse.osgi.framework.console.CommandProvider"/>
	</service>
	<reference name="RUNNABLE"
		interface="java.lang.Runnable"

		bind="setRunnable"
		unbind="unsetRunnable"
		cardinality="0..1"
		policy="dynamic"/>

</component>

Á¦°¡ Áö³­¹ø¿¡ ¸»ÇÏÁö ¾ÊÀº Áß¿äÇÑ ´Ü°è°¡ ÀÖ½À´Ï´Ù. ( ÁöÀûÇØÁØ Seamus Venasse ¿¡°Ô °¨»çµå¸³´Ï´Ù.) ¿©·¯ºÐÀÇ Ç÷¯±×ÀÎ ÇÁ·ÎÁ§Æ®¾È¿¡ build.properties ¸¦ ¼öÁ¤ÇÏ¿©, OSGI-INF Æú´õ¿· üũ¹Ú½º¸¦ ÄѾßÇÕ´Ï´Ù. À̰ÍÀº ¹øµéÀÌ Eclipse export wizard ¸¦ ÀÌ¿ëÇϰųª PDE ºôµå¸¦ ÀÌ¿ëÇØ¼­ Export µÉ¶§ ÇØ´ç Æú´õ°¡ ²À Æ÷ÇԵǵµ·Ï ÇϱâÀ§ÇØ ÇÊ¿äÇÕ´Ï´Ù. ¶ÇÇÑ ¾Æ·¡ ¶óÀÎÀ» ¹øµé Manifest ¿¡ Ãß°¡ÇØ¾ß ÇÕ´Ï´Ù.

Service-Component: OSGI-INF/commandprovider1.xml

À§ DS ¼±¾ðÀº ÀÌÀü¿¡ ¿ì¸®°¡ ºÃ´ø°Í°ú °°Àº implementation °ú service µÎ°³ÀÇ °°Àº Ç׸ñÀ» °¡Áö°í ÀÖ½À´Ï´Ù. implementation ³ëµå´Â ÄÄÆ÷³ÍÆ®¸¦ ½ÇÁ¦ ±¸ÇöÇϴ Ŭ·¡½ºÀÇ À̸§À» Ç¥½ÃÇϸç, service ³ëµå´Â DS ¿¡°Ô ÄÄÆ÷³ÍÆ®¸¦ ¼­ºñ½º·Î µî·ÏÇϵµ·Ï ¾Ë·ÁÁÝ´Ï´Ù. ÀÌ °æ¿ì´Â ¿ì¸®°¡ CommandProvider ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ¿© µî·ÏÇÔÀ¸·Î½á, Equinox ÄܼÖÀÌ ¿ì¸® Ä¿¸Çµå ÇÁ·Î¹ÙÀÌ´õ ÀÇ Á¸À縦 ¾Ë°Ô µË´Ï´Ù.
´ÙÀ½ ¿¤¸®¸ÕÆ®ÀÎ reference ´Â ¿ì¸®°¡ ÀÌÀü¿¡ º¸Áö ¸øÇѰÍÀ¸·Î, DS ¿¡ ¿ì¸®°¡ ¼­ºñ½º¿¡ ÀÇÁ¸Çϰí ÀÖ´Ù´Â °ÍÀ» ¼±¾ðÇØ ÁÝ´Ï´Ù. name ¼Ó¼ºÀº ÀÇÁ¸°ü°èÀÇ À̸§À» ³ªÅ¸³»´Â ¹®ÀÚ¿­À̸ç(ÀÌ°Ô ¾îµð¿¡ ¾²ÀÌ´ÂÁö´Â ¾ÆÁ÷ ¾Ë Çʿ䰡 ¾ø½À´Ï´Ù) interface ¼Ó¼ºÀº ¿ì¸®°¡ ÀÇÁ¸ÇÏ´Â ÀÎÅÍÆäÀ̽º À̸§À» ³ªÅ¸³À´Ï´Ù. bind ¼Ó¼ºÀº ¼­ºñ½º°¡ »ç¿ë °¡´ÉÇÒ¶§ DS ¿¡ ÀÇÇØ È£ÃâµÉ ±¸ÇöŬ·¡½ºÀÇ ¸Þ¼Òµå À̸§À̸ç, ´Ù½Ã ¸»Çؼ­ Runnable ¼­ºñ½º°¡ ¼­ºñ½º ·¹Áö½ºÆ®¸®¿¡ µî·ÏµÉ¶§ DS °¡ »õ·Î¿î ¼­ºñ½º °´Ã¼¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ ¾ò¾î¼­ ÀÌ ÁöÁ¤ ¸Þ¼Òµå¸¦ ÅëÇØ ¿ì¸®¿¡°Ô Àü´ÞÇØ Áشٴ °ÍÀÔ´Ï´Ù. ºñ½ÁÇÏ°Ô unbind ¼Ó¼ºÀº ¼­ºñ½º°¡ »ç¿ë ºÒ°¡´ÉÇØ Áú¶§ DS ¿¡ ÀÇÇØ È£ÃâµÉ ¸Þ¼Òµå ¸íÀÔ´Ï´Ù.
cardinality ¼Ó¼ºÀº DS ÀÇ ÁøÁ¤ÇÑ ÈûÀ» º¸¿©ÁÝ´Ï´Ù. ÀÌ ¼Ó¼ºÀº ÀÇÁ¸¼ºÀÌ Çʼö(mandatory)ÀÎÁö ¼±ÅÃ(optional)ÀÎÁö, ´ÜÀÏÀÎÁö ´Ù¼öÀÎÁö¸¦ ÁöÁ¤ÇÏ°Ô ÇØÁÝ´Ï´Ù. °¡´ÉÇÑ °ªµéÀº ´ÙÀ½°ú °°½À´Ï´Ù.

  • 0..1: ¼±ÅÃÀ̸鼭 ´ÜÀϰü°è , "0 ¶Ç´Â 1" - "zero or one"
  • 1..1: ÇʼöÀ̸鼭 ´ÜÀϰü°è , "µü 1°³" - "exactly one"
  • 0..n: ¼±ÅÃÀ̸鼭 º¹¼ö°ü°è , "0 ¿¡¼­ ¿©·¯°³" - "zero to many"
  • 1..n: ÇʼöÀ̸鼭 º¹¼ö°ü°è , "1 ¿¡¼­ ¿©·¯°³" ¶Ç´Â "Àû¾îµµ ÇѰ³ ÀÌ»ó" - "one to many" or "at least one"

ÀÌ ¿¹Á¦¿¡¼­´Â ¿ì¸° ¿É¼ÇÀ̸鼭 ´ÜÀϰü°è¸¦ ¼±ÅÃÇßÀ¸¹Ç·Î, À̰ÍÀº ¿ì¸®ÀÇ Ä¿¸Çµå ¼­ºñ½º°¡ ÀÇÁ¸ÇÏ´Â ¼­ºñ½º°¡ ¾ø´õ¶óµµ ´ëóÇÒ¼ö Àִٴ°ÍÀ» ÀǹÌÇÕ´Ï´Ù. _run ¸Þ¼Òµå¸¦ ´Ù½Ã »ìÆìº¸¸é ÀÌ·± »óȲÀ» ´ëóÇϱâ À§ÇØ ¼­ºñ½º Çڵ鿡 ´ëü null üũ°¡ ÇÊ¿äÇߴٴ°ÍÀ» º¸½Ç¼ö ÀÖ½À´Ï´Ù.

ÀÌ ¹øµéÀ» ½ÇÇàÇßÀ»¶§ ¾î¶² ÀÏÀÌ ÀϾ´ÂÁö º¾½Ã´Ù. Áö³­¹ø¿¡ ÀÛ¼ºÇß´ø SampleExporter ¹øµéÀ» ¾ÆÁ÷ ½ÇÇàÁß¿¡ ÀÖ´Ù¸é, osgi> ÇÁ·ÒÇÁÆ®¿¡¼­ "run" ¸í·ÉÀ» ÀÔ·ÂÇßÀ»¶§ ¾Æ·¡ Ãâ·ÂÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.

    Hello from SampleRunnable
¸ÚÁý´Ï´Ù. À̰ÍÀº ¿ì¸®°¡ Áö³­¹ø ·¹½¼¿¡¼­ ÀÛ¼ºÇÑ Runnable ¼­ºñ½º°¡ ¼º°øÀûÀ¸·Î import µÇ¾ú´Ù´Â°ÍÀ» ¾Ë·ÁÁÝ´Ï´Ù. ÀÌÁ¦ stop ¸í·ÉÀ» ÀÌ¿ëÇØ¼­ SampleExporter ¹øµéÀ» ÁߴܽÃŵ´Ï´Ù. ±×¸®°í ´Ù½Ã "run" ¸í·ÉÀ» ÀÔ·ÂÇÏ¸é ¾Æ·¡¿Í °°Àº ¸Þ½ÃÁö¸¦ º¼¼ö ÀÖ½À´Ï´Ù.

    Error, no Runnable available

À̰ÍÀ¸·Î º¸¾Æ, DS °¡ Runnable ¼­ºñ½º°¡ ¾ø¾îÁ® ¹ö·Á¼­ ¿ì¸®ÀÇ unsetRunnable ¸Þ¼Òµå¸¦ È£ÃâÇߴٴ°ÍÀ» ¾Ë¼ö ÀÖ½À´Ï´Ù.

´Ù½Ã cardinality ¼Ó¼ºÀ» »ìÆìº¸¸é, ¸¸¾à ¿ì¸®°¡ "1..1" ·Î º¯°æÇؼ­ ¼±Åÿ¡¼­ Çʼö ÀÇÁ¸°ü°è·Î ¹Ù²Ù¸é ¾î¶²ÀÏÀÌ »ý±æ±î¿ä ? Çѹø º¯°æÇϰí Equinox ¸¦ Àç½ÇÇà ÇØº¸¼¼¿ä. ¸¸¾à SampleExporter°¡ Ȱ¼ºÈ­ µÇ¾îÀÖ´Ù¸é ¿ì¸®°¡ "run" À» ÀÔ·ÂÇßÀ»¶§ ÀÌÀü°ú °°Àº "Hello from SampleRunnable" ¸Þ½ÃÁö¸¦ º¼¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ¸¸¾à SampleExporter°¡ºñȰ¼ºÈ­ µÇ¾î ÀÖ´Ù¸é ÀüÇô ´Ù¸¥ ¸Þ½ÃÁö¸¦ º¼¼ö ÀÖ½À´Ï´Ù. ½ÇÁ¦·Î ¿ì¸° ¸ð¸£´Â ¸í·ÉÀ» ÀÔ·ÂÇßÀ»¶§ ³ª¿À´Â Equinox ÄܼÖÀÇ µµ¿ò¸»À» º¸°Ô µË´Ï´Ù. À̰ÍÀº ¿ì¸®ÀÇ Command Provider ÀÚü°¡ DS ¿¡ ÀÇÇØ µî·ÏÇØÁ¦ µÇ¾ú´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù! ÄÄÆ÷³ÍÆ®°¡ Çʼö ÀÇÁ¸°ü°è¸¦ ÃæÁ·½ÃŰÁö ¸øÇϱ⠶§¹®¿¡ DS °¡ ÄÄÆ÷³ÍÆ®¸¦ ºñ Ȱ¼ºÈ­ Çϰí Á¦°øÇÏ´ø ¼­ºñ½º ÀÚü¸¦ µî·ÏÇØÁ¦ ÇѰÍÀÔ´Ï´Ù. ±×·¡¼­ Equinox ÄܼÖÀÌ run ¸í·É ÀÚü¸¦ ¸ð¸£°Ô µÈ°ÍÀÌÁÒ.

ÀÌ·± ½¬¿î º¯°æÀÌ ¿ì¸®°¡ ¼±¾ðÀû ¼­ºñ½º¸¦ ÀÌ¿ëÇÏ´Â °¡Àå Å« ÀÌÀ¯Áß ÇϳªÀÔ´Ï´Ù. ¿ì¸®°¡ ServiceTracker ¸¦ ÀÌ¿ëÇÒ¶§´Â ²Ï ¸¹Àº ¾çÀÇ Äڵ带 ÀçÀÛ¼ºÇØ¾ß Çߴٴ°ÍÀ» ±â¾ïÇϼ¼¿ä.

¿©·¯ºÐ²²¼± Á¦°¡ ¾ÆÁ÷ ¾ð±ÞÇÏÁö ¾ÊÀº policy ¼Ó¼ºÀÌ ±Ã±ÝÇÏ½Ç °ÍÀÔ´Ï´Ù. ÀÌ ¼Ó¼ºÀÇ °ªÀº static ¶Ç´Â dynamic ÀÌ µÉ¼öÀÖÀ¸¸ç, dynamicÀº ¼­ºñ½º°¡ µ¿ÀûÀ¸·Î º¯°æµÉ¶§ ÄÄÆ÷³ÍÆ®ÀÇ implementationÀÌ ÀÌ¿¡ µ¿ÀûÀ¸·Î ´ëÀÀÀÌ °¡´ÉÇÑÁö¸¦ ¸»ÇØÁÝ´Ï´Ù. staticÀ̶ó¸é DS°¡ ÇØ´ç ¼­ºñ½º°¡ º¯°æµÉ¶§¸¶´Ù ÄÄÆ÷³ÍÆ®¸¦ ºñȰ¼ºÈ­ÇÏ°í »õ·Î¿î ÀνºÅϽº¸¦ ¸¸µé¾î¾ß ÇÕ´Ï´Ù. ÀÌ°Ç ¸Å¿ì ºÎÇϰ¡ ¸¹Àº Á¢±Ù¹æ¹ýÀ̸ç, ¿©·¯ºÐ²²¼± °¡´ÉÇÏ¸é µ¿Àû º¯°æÀ» Áö¿øÇϵµ·Ï ÄÄÆ÷³ÍÆ® Ŭ·¡½º¸¦ ÄÚµùÇϴ°ÍÀÌ ÁÁ½À´Ï´Ù. ¾Æ½±°Ôµµ static ÀÌ ±âº»°ªÀ̱⠶§¹®¿¡ dynamic À» ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù.

±×·³ Áö±Ý±îÁö ¼±Åà ´ÜÀÏ ¹× Çʼö ´ÜÀÏ °ü°è¸¦ »ìÆìº¸¾Ò½À´Ï´Ù. ±×·³ º¹¼ö°ü°è´Â ¾î¶³±î¿ä ? ¼­ºñ½º ·¹Áö½ºÆ®¸®¿¡´Â ÇѰ³ÀÌ»óÀÇ Runnable ÀÌ µî·ÏµÇ¾îÀÖÀ»±¸ ÀÖ±¸, ±×Áß ÇѰ¡Áö¿Í ¿¬°á(bind)ÇÒ¶§ ¾î¶²°ÍÀ» ¼±ÅÃÇÏ´ÂÁö´Â ÀÓÀÇ·Î °áÁ¤µË´Ï´Ù. ¾Æ¸¶µµ ¿ì¸° ÇöÀç µî·ÏµÈ ¸ðµç Runnable À» ½ÇÇàÇϵµ·Ï ÇÏ´Â "runall" ¸í·ÉÀ» °³¹ßÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

¸¸¾à ¿ì¸®°¡ cardinality ¸¦ "0..n" À¸·Î ¹Ù²Ù¸é ¹«½¼ÀÏÀÌ ¹ú¾îÁú±î¿ä ? ¾Æ¸¶ °ÅÀÇ µ¿ÀÛÇÒ °Ì´Ï´Ù. ´Ù¸¸ setRunnalbe À» Çѹø È£ÃâÇÏ´Â°Í ´ë½Å, DS ´Â ·¹Áö½ºÆ®¸®ÀÇ Runnable ÀνºÅϽºµéÀÇ setRunnableÀ» Çѹø¾¿ È£ÃâÇÒ °ÍÀÔ´Ï´Ù. ¹®Á¦´Â ¿ì¸®°¡ ¸¸µç Ŭ·¡½º°¡ È¥¶õ½º·¯¿ï¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. ÇѰ³ÀÇ Runnable Çʵ带 ¼¼ÆÃÇϴ°ͺ¸´Ù Runnable µéÀ» Ä÷º¼Ç¿¡ ³Ö¾îµÎ´Â°ÍÀÌ ÇÊ¿äÇÕ´Ï´Ù. ¾Æ·¡¿¡ ¾à°£ ¼öÁ¤µÈ ¹öÀüÀÇ Å¬·¡½º°¡ ÀÖ½À´Ï´Ù. ¾Æ·¡ Äڵ带 º¹»çÇØ¼­ ÇÁ·ÎÁ§Æ®ÀÇ src Æú´õ¿¡ ºÙ¿©³Ö±â ÇϽǼö ÀÖ½À´Ï´Ù.

package org.example.ds;
 
import java.util.*;
import org.eclipse.osgi.framework.console.CommandInterpreter;
import org.eclipse.osgi.framework.console.CommandProvider;
 
public class SampleCommandProvider2 implements CommandProvider {

 
	private List runnables =
		Collections.synchronizedList(new ArrayList());
	
	public void addRunnable(Runnable r) {

		runnables.add(r);
	}
	public void removeRunnable(Runnable r) {
		runnables.remove(r);
	}
	public void _runall(CommandInterpreter ci) {

		synchronized(runnables) {
			for(Runnable r : runnables) {
				r.run();
			}
		}

	}
	public String getHelp() {
		return "\trunall - Run all registered Runnables";
	}
}


ÀÚ ÀÌÁ¦ OSGI-INF/commandprovider2.xml ¸¦ ¸¸µé°í ¾Æ·¡¸¦ º¹»çÇÕ´Ï´Ù.
<?xml version="1.0"?>
<component name="commandprovider2">
	<implementation class="org.example.ds.SampleCommandProvider2"/>
	<service>
		<provide interface="org.eclipse.osgi.framework.console.CommandProvider"/>

	</service>
	<reference name="RUNNABLE"
		interface="java.lang.Runnable"
		bind="addRunnable"
		unbind="removeRunnable"

		cardinality="0..n"
		policy="dynamic"/>
</component>

±×¸®°í ¸¶Áö¸·À¸·Î ÀÌ ÆÄÀÏÀ» manifest ÀÇ Service-Component Çì´õ¿¡ Ãß°¡ÇÕ´Ï´Ù. ÀÌ·¸°Ô º¸ÀϰÍÀÔ´Ï´Ù.

Service-Component: OSGI-INF/commandprovider1.xml,
  OSGI-INF/commandprovider2.xml

ÀÌ ¼±¾ðÀº ¿ì¸®°¡ bind,unbind ¸Þ¼ÒµåÀÇ À̸§À» º¯°æÇϰí, cardinality¸¦ "0..n"À¸·Î º¯°æÇߴٴ°ÍÀ» Á¦¿ÜÇϸé, ÀÌÀü°ú °ÅÀÇ ºñ½ÁÇÕ´Ï´Ù. ½ÇÇè»ï¾Æ ¸î°³ÀÇ Runnable ¼­ºñ½ºµéÀ» µî·ÏÇϰí runall ¸í·ÉÀÌ µ¿ÀÛÇÏ´ÂÁö¸¦ »ìÆìº¸¼¼¿ä. ´ÙÀ½À¸·Î ¸¸¾à ¿ì¸®°¡ cardinality ¸¦ "1..n"À¸·Î ¹Ù²Ù¸é ¾î¶»°Ô µÉ±î¿ä ? ¾î¶»°Ô µÉÁö¸¦ Çѹø »ý°¢Çغ¸°í È®ÀÎÇØ º¸¼¼¿ä.

·¹½¼Àº ¿©±â±îÁö ÀÔ´Ï´Ù. OSGi Alliance Community Event °¡ ´ÙÀ½ÁÖ¿¡ µ¶ÀÏ Munich ¿¡¼­ ¿­¸°´Ù´Â°ÍÀ» ÀØÁö¸¶¼¼¿ä. ¾ÆÁ÷ µî·ÏÇϱ⿡ ´ÊÁö ¾Ê¾Ò½À´Ï´Ù. °Å±â¼­ º¾½Ã´Ù! (¿ªÁÖ: ¿ª½Ã Áö³ª¹ö¸° À̺¥Æ®ÀÔ´Ï´Ù¸¸.. ±×³É ¹ø¿ªÇØ µÓ´Ï´Ù.)
ºí·Î±×ÄÚ¸®¾Æ¿¡ ºíUPÇϱâ

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

Áö¸§µµ¿ì¹Ì - ÇÏ·ç¿¡ ÇѰ¡Áö ¼îÇθô ÇÑ´«¿¡ º¸±â ( ¿ø¾îµ¥ÀÌ,¿ìÆ®,Ä«¸£Æäµð¿¥,¿ø¹ÙÀÌ¿ø,1200m,¹ÙÀ̵¥ÀÌ,OTTO,ÀÎÅÍÆÄÅ© ¸ð´×Ä¿ÇÇ.. ) [¹Ù·Î°¡±â]


ÃÑ11 °³ÀÇ ´ñ±Û
  1. Çõ¾Æ...
    ´ñ±Û °¡¹³ÀÌ´Ù...
    °¡º­¿î ³»¿ëÀ¸·Î Áß°£¿¡ ÇϳªÂë ³Ö¾îÁá¾î¾ß ÇÏÁö ¾Ê¾Ò³Ä..?
    ³Ê ´ñ±Û ¹«Áö ÁÁ¾ÆÇÑ´Ù¸ç... ¿äÁòÀº ¿ä¸®µµ ¾ÈÇϳÄ?
    ¤»¤»¤»
    commented by ¹Ú»óÈñ Korea (South) [2008/05/10 02:06]
  2.   ¹¹ ¿¹»óÀº ÇßÁö¸¸ ³Ñ ÀúÁ¶Çϱä Çϱº ^^
    replied by ±¸·ç [2008/05/10 04:39]
  3. Àߺ¸°í°©´Ï´Ù. ¼ö°íÇϼ̾î¿ä ^^
    commented by 1 Korea (South) [2008/05/15 11:25]
  4.   °í¸¿½À´Ï´Ù ^_^
    replied by ±¸·ç [2008/05/15 12:31]
  5. °¨»çÈ÷ Àß º¸°Ú½À´Ï´Ù. ¼ö°íÇϼ̳׿ä.
    commented by Noel Japan [2008/07/22 18:29]
  6.   µµ¿òÀÌ µÇ¼ÌÀ¸¸é ÁÁ°Ú³×¿ä ^^
    replied by ±¸·ç [2008/07/23 01:25]
  7. ÁÁÀº ³»¿ë Àß º¸°í °©´Ï´Ù~ OSGi¸¦ ÀÌÇØÇϴµ¥ ¸¹Àº µµ¿òÀÌ µÇ¾ú½À´Ï´Ù.
    ´Ù¸¸ ¼Ò½º ºÎºÐ¿¡ <, &rt; °¡ µé¾î°£ ºÎºÐÀÌ Á¤»óÀûÀ¸·Î Ç¥ÇöµÇÁö ¾Ê¾Æ¼­ ¸î¸î ¼Ò½ºµéÀº
    ¿øº» »çÀÌÆ®¸¦ ºÁ¾ß Çϳ׿ä. :)
    commented by sakuragi Korea (South) [2008/08/06 18:36]
  8. ¿¡±¸.. ´ñ±Û »èÁ¦ ±â´ÉÀÌ ¾ø³ªº¸±º¿ä. ½Ç¼ö·Î ´ñ±ÛÀ» ¿©·¯¹ø ³²°å³×¿ä. ( __)
    commented by sakuragi Korea (South) [2008/08/06 18:37]
  9.   ¿¡±¸ ´äº¯ÀÌ ´Ê¾úÁö¸¸ ¼öÁ¤ÇØ µÎ¾ú½À´Ï´Ù.
    replied by ±¸·ç [2008/09/17 22:19]
  10. ´Ê°Ô³ª¸¶ ÁÁÀº±Û Àß º¸¾Ò½À´Ï´Ù.. ´Ù¸¸.. ¸¶Áö¸· Æ©Å丮¾ó ½ÇÇàÀÌ ¤»¤» ¾ÈµÇ³×¿ë ..
    ¿Ö ¼­ºñ½º´Â µî·ÏÀÌ µÇ¾úÁö¸¸.. ¿Ö ½ÇÇàÀÌ ¾ÈµÇ´ÂÁö.. ¾ÆÁ÷µµ Çì¸Å°í ÀÖ´ÂÁß ..
    commented by kus Korea (South) [2009/01/06 15:43]
  11.   óÀ½¿¡ Á» °©°©ÇÑ ºÎºÐÀÌ ¸¹ÁÒ ^^; È­ÀÌÆÃ! ÀÔ´Ï´Ù
    replied by ±¸·ç [2009/01/06 22:22]
ÃÑ 11 °³ÀÇ ´ñ±Û
À̸§ :  URL(Àִºи¸) :

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