±ÇÁ¤Çõ
±¸·ç
¿ø¾îµ¥ÀÌ
xguru ¸¦ Follow Çϼ¼¿ä :)

ÀÌ ±ÛÀº 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¹øÂ° ±ÛÀÔ´Ï´Ù. ¿ÀÅ»ÀÚ ¹× ÀÌ»óÇÑ ¹ø¿ªÀº ´ñ±Û·Î ³²°ÜÁÖ¼¼¿ä


Getting started with OSGi : OSGi ½ÃÀÛÇÏ±â ÆÄÆ® 6 - µ¿ÀûÀ¸·Î ¼­ºñ½º ÃßÀûÇϱâ

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

±Û¿øº» : http://www.eclipsezone.com/eclipse/forums/t91059.html - Getting started with OSGi : Dynamic Service Tracking

EclipseZone OSGi ¹Ì´Ï ½Ã¸®Áî¿¡ µ¹¾Æ¿À½Å°É ȯ¿µÇÕ´Ï´Ù.

Áö³­¹ø¿¡´Â Martin Fowler ÀÇ ½Ã³ª¸®¿À(ƯÁ¤°¨µ¶¿¡ ÀÇÇØ Á¦ÀÛµÈ ¿µÈ­¸¦ ã´Â MovieFinder ¿¡ ÀÇÁ¸ÇÏ´Â MovieLister)¸¦ ÀÌ¿ëÇØ¼­ ¾î¶»°Ô ¼­ºñ½º¸¦ »ç¿ëÇÏ´ÂÁö¸¦ ¾Ë¾ÆºÃ½À´Ï´Ù. ¶ÇÇÑ, MovieLister °¡ MovieFinder ÀÇ ÀνºÅϽº¸¦ ãÁö ¸øÇÒ¶§ ¹«¾ùÀ» ÇØ¾ßÇÏ´ÂÁö¸¦ ÅëÇØ µ¿ÀûÀÎ OSGi ¼­ºñ½ºÀÇ º»Áú¿¡ ´ëÇØ »ìÆìº¸¾Ò½À´Ï´Ù.

¿ì¸®°¡ Áö³­¹ø¿¡ °í·ÁÇÏÁö ¾Ê¾Ò´ø ´Ù¸¥ °ÍÀÌ ÀÖ½À´Ï´Ù. ¸¸¾à ÇѰ³ ÀÌ»óÀÇ MovieFinder°¡ ÀÖ´Ù¸é? Áï, ¾î¶² ¹øµéÀÌ¶óµµ MovieFinder ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â ¼­ºñ½º¸¦ µî·ÏÇÒ¼ö ÀÖ°í, ·¹Áö½ºÆ®¸® ÀÔÀå¿¡¼± ¸ðµç ¹øµéÀº °°½À´Ï´Ù.

¿ì¸° ¹®Á¦¸¦ °£´ÜÈ÷ ¹«½ÃÇÒ ¼öµµ ÀÖ°í, ½ÇÁ¦·Î Áö³­¹ø¿£ ±×·¸°Ô Çß½À´Ï´Ù. ServiceTracker ¿¡°Ô getService()¸¦ È£ÃâÇÔÀ¸·Î½á, ¿ì¸° ¼­ºñ½º ·¹Áö½ºÆ®¸®¿¡ ÀÇÇØ ¼±ÅÃµÈ ÀÓÀÇÀÇ MovieFinder ÀνºÅϽº¸¦ ¹Þ°Ô µË´Ï´Ù. ÀÌ ¼±Åÿ¡ ¿µÇâÀ» ÁÙ¼öÀÖ´Â ¿©·¯°¡Áö ¹æ¹ýÀÌ ÀÖÁö¸¸(¿¹¸¦ µé¾î, SERVICE_RANKING ¼Ó¼ºÀ» ¼­ºñ½º µî·Ï½Ã¿¡ ÁöÁ¤ÇÔÀ¸·Î½á), »ç¿ëÀڷμ­ÀÇ ¿ì¸®´Â ÀÌ ¼±Åÿ¡ ´ëÇÑ ¿Ïº®ÇÑ Á¶Á¤´É·ÂÀ» °¡ÁöÁö´Â ¸øÇÕ´Ï´Ù. ±×¸®°í ½ÇÁ¦·Î ´õ ¸¹Àº Á¶Á¤´É·ÂÀ» °¡Áö°Ô µÇ´Â°ÍÀº ÁÁÀº°Ô ¾Æ´Õ´Ï´Ù. Áï ¿ì¸®´Â MovieFinder ÀÇ ¾î¶² ÀνºÅϽº¶óµµ »ç¿ëÇÒ¼ö ÀÖ¾î¾ß ÇѴٴ°ÍÀÌÁÒ. ¿ì¸®°¡ óÀ½ºÎÅÍ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯À̱⵵ ÇÕ´Ï´Ù.

´ë½Å¿¡ ¿©·¯°³ÀÇ ¼­ºñ½º ÀνºÅϽºµé¿¡ ´ëÇØ ÀÎÁöÇÏ°í »ç¿ëÇÏ´Â °ÍÀº ¶§¶§·Î À¯¿ëÇÒ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ¿©·¯°³ÀÇ MovieFinder ÀÎÅÍÆäÀ̽º°¡ °¡¿ëÇÏ´Ù¸é MovieLister °¡ ÀÌ¿ëÇÒ¼ö ÀÖ´Â ¿µÈ­ µ¥ÀÌŸ¿¡ ´ëÇÑ ¿©·¯°³ÀÇ ¼Ò½º°¡ Àִٴ°ÍÀ» ÀǹÌÇÕ´Ï´Ù. °Ë»ö½Ã¿¡ À̵éÀ» ¸ðµÎ ÀÌ¿ëÇÔÀ¸·Î½á, ´õ ³Ð°í À¯¿ëÇÑ °Ë»ö°á°ú¸¦ »ç¿ëÀÚ¿¡°Ô Á¦°øÇÒ ¼ö ÀְԵ˴ϴÙ.

¸¶Áö¸·¿¡ ³íÀÇÇß´ø ¹®Á¦·Î ´Ù½Ã µ¹¾Æ°¡¼­, ¸¸¾à MovieFinder ¼­ºñ½º°¡ »ç¿ë ºÒ°¡ÇÏ´Ù¸é ¾î¶²ÀÏÀ» Çϴ°ÍÀÌ ¸ÂÀ»±î¿ä ? ¿ì¸° MovieFinder °¡ °¡¿ëÇÏÁö ¾ÊÀ»¶§ listByDirector ¸Þ¼Òµå°¡ È£ÃâµÉ¶§¸¶´Ù null À» ¸®ÅÏÇÏ´Â °£´ÜÇÑ ¹æ¹ýÀ» »ç¿ëÇß½À´Ï´Ù. ÇÏÁö¸¸ MovieFinder °¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é MovieLister ÀÇ ¸Þ¼Òµå È£Ãâµµ º¼°¡´ÉÇÏ°Ô ÇÏ¸é ¾î¶³±î¿ä ?

MovieLister´Â MovieFinder ¿Í ¸¶Âù°¡Áö·Î ¼­ºñ½ºÀÔ´Ï´Ù. ¸¸¾à MovieFinder ¼­ºñ½º°¡ »ç¶óÁø´Ù¸é, MovieLister µµ °°ÀÌ »ç¶óÁö°Ô ÇÏ´Â°Ç ? ´Ù½Ã ¸»ÇØ, ¿ì¸° MovieLister ¼­ºñ½º°¡ MovieFinder ¿¡ ´ëÇØ "1 ´ë ´Ù" °ü°è¸¦ °¡Áö±â¸¦ ¿øÇß½À´Ï´Ù. ¸¶Áö¸· Æ©Å丮¾ó¿¡¼­ ¿ì¸° "0 ´ë 1" °ü°è¿´½À´Ï´Ù.

MovieListerImpl ¸¦ º¯°æÇغ¾½Ã´Ù. ¾Æ·¡ ÄÚµå¿Í ±³Ã¼Çϼ¼¿ä.

package osgitut.movies.impl;
 
import java.util.*;
import osgitut.movies.*;
 
public class MovieListerImpl implements MovieLister {

	
	private Collection finders =
		Collections.synchronizedCollection(new ArrayList());
	
	protected void bindFinder(MovieFinder finder) {
		finders.add(finder);
		System.out.println("MovieLister: added a finder");
	}

	
	protected void unbindFinder(MovieFinder finder) {
		finders.remove(finder);
		System.out.println("MovieLister: removed a finder");
	}
	
	public List listByDirector(String director) {

		MovieFinder[] finderArray = (MovieFinder[])
			finders.toArray(new MovieFinder[finders.size()]);
		List result = new LinkedList();
		for(int j=0; j < finderArray.length; j++) {
			Movie[] all = finderArray[j].findAll();	
			for(int i=0; i < all.length; i++) {

				if(director.equals(all[i].getDirector())) {
					result.add(all[i]);
				}
			}
		}
		return result;
	}

	
}

ÀÌÁ¦ ¿ì¸° MovieListerImpl ¿¡¼­ OSGi ¿¡ ´ëÇÑ ÀÇÁ¸¼ºÀ» ¾ø¾Ý½À´Ï´Ù. ÀÌÁ¨ ¼ø¼ö POJO ÀÔ´Ï´Ù. ¾î¶µç, ÀÌ Å¬·¡½º´Â ´©±º°¡ ¶Ç´Â ¾î¶²°ÍÀÌ MovieFinder ¼­ºñ½º¸¦ ã¾Æ¼­ bindFinder ¸Þ¼Òµå¸¦ ÅëÇØ Á¦°øµÇ¾î¾ß ÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇϱâÀ§Çؼ­ osgitut/movies/impl/MovieFinderTracker.java ¶ó´Â »õ·Î¿î ÆÄÀÏÀ» ¾Æ·¡¿Í °°ÀÌ ÀÛ¼ºÇÕ´Ï´Ù.

package osgitut.movies.impl;
 
import org.osgi.framework.*;
import org.osgi.util.tracker.*;
 
import osgitut.movies.*;
 
public class MovieFinderTracker extends ServiceTracker {

	
	private final MovieListerImpl lister = new MovieListerImpl();
	private int finderCount = 0;
	private ServiceRegistration registration = null;
	
	public MovieFinderTracker(BundleContext context) {

		super(context, MovieFinder.class.getName(), null);
	}
	
	private boolean registering = false; 
	public Object addingService(ServiceReference reference) { 
		MovieFinder finder = (MovieFinder) context.getService(reference); 
		lister.bindFinder(finder); 

 
		synchronized(this) { 
			finderCount ++; 
			if (registering) 
				return finder; 
			registering = (finderCount == 1); 
			if (!registering) 
				return finder; 
		} 

 
		ServiceRegistration reg = context.registerService( 
		MovieLister.class.getName(), lister, null); 
 
		synchronized(this) { 
			registering = false; 
			registration = reg; 
		} 

 
		return finder; 
	} 
 
	public void removedService(ServiceReference reference, Object service) { 
		MovieFinder finder = (MovieFinder) service; 
		lister.unbindFinder(finder); 
		context.ungetService(reference); 

 
		ServiceRegistration needsUnregistration = null; 
		synchronized(this) { 
			finderCount --; 
			if (finderCount == 0) { 
				needsUnregistration = registration; 
				registration = null; 
			} 
		} 

 
		if(needsUnregistration != null) { 
			needsUnregistration.unregister(); 
		} 
	} 
}

ÀÌ Å¬·¡½º´Â Áö³­¹ø¿¡ ¾ê±âÇß´ø ServiceTracker Ŭ·¡½º¸¦ ¿À¹ö¶óÀ̵å ÇØ¼­, ServiceTracker °¡ ¼­ºñ½º µî·Ï/»èÁ¦½Ã µ¿ÀÛÇÏ´Â ¹æ½ÄÀ» Ä¿½ºÅ͸¶ÀÌÁî ÇÕ´Ï´Ù. Ư¡ÀûÀ¸·Î, MovieFinder ¼­ºñ½º°¡ Ãß°¡µÉ¶§ addingService ¸Þ¼Òµå°¡ È£ÃâµÇ°í , MovieFinder °¡ Á¦°ÅµÉ¶§ removedService °¡ È£ÃâµË´Ï´Ù. ¿ì¸®°¡ ¿À¹ö¶óÀ̵å ÇÒ¼ö ÀÖ´Â ¸Þ¼ÒµåÁß¿¡ modifiedService µµ ÀÕ½À´Ï´Ù¸¸ ¿©±â¼± ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù.

ÀÌ µÎ°³ÀÇ ¸Þ¼Òµå¿¡ ´ëÇØ¼± »ìÆìº¼¸¸ÇÑ °¡Ä¡°¡ ÀÖ½À´Ï´Ù. ù°·Î addingService ¿¡¼± Àü´Þ¹ÞÀº ÀÎÀÚ°¡ ½ÇÁ¦ ¼­ºñ½º ±¸Çö °³Ã¼°¡ ¾Æ´Ï¶ó ServiceReference ÀÔ´Ï´Ù. ServiceReference´Â ÀÎÀÚ·Î Àü´ÞµÉ¼ö ÀÖ´Â °¡º­¿î ÇÚµéÀ̸ç, ¼­ºñ½º¿¡ ´ëÇÑ ¼Ó¼º(¼­ºñ½º µî·Ï½Ã¿¡ Àü´ÞÇß´ø)¸¦ Àдµ¥ »ç¿ëÀÌ °¡´ÉÇÕ´Ï´Ù. °áÁ¤ÀûÀ¸·Î, ServiceReference ¸¦ ¾ò´Â°ÍÀº OSGi ÇÁ·¹ÀÓ¿öÅ©°¡ ÇØ´ç ¼­ºñ½ºÀÇ ·¹ÆÛ·±½º Ä«¿îÆ®¸¦ Áõ°¡½ÃŰÁö ¾Ê½À´Ï´Ù. Java Reflection API ¿¡ ÀÖ´Â WeakReference Ŭ·¡½º¿Í ºñ½ÁÇÏ°Ô »ý°¢ÇÏ½Ã¸é µË´Ï´Ù.

¿¹Á¦¿¡¼­ ¿ì¸®°¡ ServiceReference ·Î ÇÒ Ã¹¹øÂ° ÀÛ¾÷Àº MovieFinder ¼­ºñ½º °³Ã¼¸¦ ¾ò´Â°ÍÀÔ´Ï´Ù. À̸¦ À§Çؼ­ ¿ì¸° ´Ù½Ã BundleContext ¸¦ ÇÊ¿ä·Î ÇÕ´Ï´Ù. (OSGi ÇÁ·¹ÀÓ¿öÅ©¿Í °ü·ÃµÈ ¸ðµç ÀÛ¾÷Àº BundleContext ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ ÀÌ·ïÁø´Ù´Â°É ¸í½ÉÇϼ¼¿ä. ) Æí¸®ÇϰԵµ ½´ÆÛŬ·¡½ºÀÎ ServiceTracker °¡ BundleContext ¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ context ¶ó°í À̸§ºÙÀÎ protected ¸â¹ö·Î °¡Áö°í ÀÖÀ¸¹Ç·Î ¹Ù·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

´ÙÀ½À¸·Î ¿ì¸®°¡ À§¿¡¼­ Á¤ÀÇÇÑ MovieListImpl ÀÇ bindFinder ¸Þ¼Òµå¸¦ °¡Áö°í ÆÄÀδõ¸¦ ¹ÙÀεù ÇÕ´Ï´Ù. ±×¸®°í MovieListerImpl ÀÚü¸¦ MovieLister ÀÎÅÍÆäÀ̽º·Î ¼­ºñ½º¿¡ µî·ÏÇÕ´Ï´Ù. ÀÌ¹Ì ¼­ºñ½º°¡ µî·ÏµÇÁö ¾Ê¾ÒÀ»¶§¸¸ ¼­ºñ½º¸¦ µî·ÏÇϰí ÀÖ´Ù´Â °É ÁÖÀÇÇϼ¼¿ä. À̹ø ½Ã³ª¸®¿À ¿¡¼± ÇѰ³ÀÇ MovieLister °¡ ¿©·¯°³ÀÇ MovieFinder ¼­ºñ½º¸¦ ÃßÀûÇϱ⸦ ¿øÇÕ´Ï´Ù.

¸¶Áö¸·À¸·Î ¸Þ¼Òµå¿¡¼­ ¸®ÅÏÇÕ´Ï´Ù. ¿©±â¿¡ Èï¹ÌÀÖ´Â ºÎºÐÀÌ ÀÖ½À´Ï´Ù. addingService ÀÇ ¸®ÅÏŸÀÔÀº ±×³É Object ÀÔ´Ï´Ù. ¿ì¸° ¹«¾ùÀ» ¸®ÅÏÇØ¾ß ÇÒ±î¿ä ? »ç½ÇÀº ServiceTracker ´Â »ó°üÇÏÁö ¾Ê½À´Ï´Ù. ¿ì¸®°¡ ¿øÇÏ´Â ¾î¶²°ÍÀ» ¸®ÅÏÇØµµ µË´Ï´Ù. ¾î¶°Å³ª, ¿ì¸®°¡ addingService ¿¡¼­ ¸®ÅÏÇÏ´Â °´Ã¼´Â modifiedService ³ª removedService °¡ È£ÃâµÇ¾úÀ»¶§ ¿ì¸®¿¡°Ô ´Ù½Ã ÁÖ¾îÁý´Ï´Ù. ±×·¯¹Ç·Î removeService ¸Þ¼ÒµåÀÇ Ã¹¹øÂ° ÁÙÀ» º¸½Ã¸é, ¿ì¸®°¡ °´Ã¼¸¦ MovieFinder ·Î ij½ºÆÃÇϴ°ÍÀ» º¼¼öÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÇØ¼­ ¸®½ºÅÍ·Î ºÎÅÍ unbound µÉ¼ö Àִ°ÍÀÌÁÒ. ±×¸®°í´Â ¸¸¾à ÃßÀûÇÏ´Â finder µéÀÌ 0°³°¡ µÇ¾úÀ»¶§ MovieLister ¼­ºñ½º¸¦ µî·ÏÇØÁ¦ ÇÕ´Ï´Ù.

ÀϹÝÀûÀ¸·Î, ¿ì¸®°¡ addingService ¿¡¼­ ÇÑ ÀϵéÀº removedService ¸Þ¼Òµå¿¡¼­ µÇµ¹·Á ³ö¾ß ÇÕ´Ï´Ù. ±×·¯¹Ç·Î, addingService ¸Þ¼Òµå¿¡¼­ ¸®ÅÏÇÒ°ÍÀº ¿ì¸®°¡ ¹«½¼ÀÏÀ» Çß´ÂÁö¸¦ ¾Ë¼öÀÖµµ·Ï µµ¿ÍÁÖ´Â °ÍÀÌ¾ß ÇÕ´Ï´Ù. HashMap ¿¡¼­ÀÇ Key°¡ µÉ ¼öµµ ÀÖ°í, ServiceRegistration °´Ã¼Àϼöµµ, À̹ø °æ¿ìó·³ ½ÇÁ¦ ¼­ºñ½º °´Ã¼Àϼöµµ ÀÖ½À´Ï´Ù.

removedService ÀÇ ¸¶Áö¸· ´Ü°è·Î, ¿ì¸®°¡ "°¡Á®¿Ô´ø(Got)" ¼­ºñ½º¸¦ "µ¹·ÁÁà¾ß(Unget)" ÇÕ´Ï´Ù. ÀÌ´Â ¼­ºñ½º ·¹Áö½ºÆ®¸®°¡ ¼­ºñ½º »ç¿ë Ä«¿îÅ͸¦ ÁÙÀÌ°Ô ÇØ¼­, Ä«¿îÅͰ¡ 0 ÀÌ µÇ¾úÀ»¶§ ¼­ºñ½º°¡ ÇØÁ¦µÉ¼ö ÀÖµµ·Ï ÇϱâÀ§ÇÑ °ÍÀ̹ǷÎ, ¸Å¿ì Áß¿äÇÕ´Ï´Ù.

ÀÚ ÀÌÁ¦ ¿ì¸° Activator °¡ ÇÊ¿äÇÕ´Ï´Ù. osgitut/movies/impl/TrackingMovieListerActivator.java ÀÔ´Ï´Ù.

package osgitut.movies.impl;
 
import org.osgi.framework.*;
 
public class TrackingMovieListerActivator implements BundleActivator {

 
	private MovieFinderTracker tracker;
 
	public void start(BundleContext context) {
		tracker = new MovieFinderTracker(context);
		tracker.open();
	}

 
	public void stop(BundleContext context) {
		tracker.close();
	}
}

Manifest ÆÄÀÏ TrackingMovieLister.mf ÀÔ´Ï´Ù.

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Tracking Movie Lister
Bundle-SymbolicName: TrackingMovieLister
Bundle-Version: 1.0.0
Bundle-Activator: osgitut.movies.impl.TrackingMovieListerActivator
Import-Package: org.osgi.framework,
 org.osgi.util.tracker,
 osgitut.movies;version="[1.0.0,2.0.0)"
 

ÀÌ ¹øµéÀ» ºôµåÇØ¼­ Equinox ¿¡ ¼³Ä¡Çϴ°ÍÀº ¿©·¯ºÐ²² ¿¬½ÀÀ¸·Î ³²°ÜµÓ´Ï´Ù. ±×ÈÄ¿¡´Â ¾Æ·¡ ´Ü°èµéÀ» µû¶óÇØ¼­ ¸ðµç°ÍÀÌ µ¿ÀÛÇÏ´ÂÁö¸¦ »ìÆìº¸¼¼¿ä.

  1. BasicMovieFinder ¸¦ ½ÇÇàÇϰí TrackingMovieLister ¸¦ ½ÇÇàÇÕ´Ï´Ù. "MovieLister: added a finder" ¸Þ½ÃÁö°¡ ³ª¿À´ÂÁö È®ÀÎ.
  2. services ¸í·ÉÀ» ÀÔ·ÂÇØ¼­ MovieLister °¡ µî·ÏµÇ¾î ÀÖ´ÂÁö È®ÀÎÇÕ´Ï´Ù.
  3. BasicMovieFinder ¸¦ Áß´ÜÇϰí "MovieLister: removed a finder" ¸Þ½ÃÁö°¡ ³ª¿À´ÂÁö È®ÀÎ.
  4. services ¸í·ÉÀ» ´Ù½Ã ÀÔ·ÂÇØ¼­ MovieLister ¼­ºñ½º µî·ÏÀÌ ÇØÁ¦ µÇ¾ú´ÂÁö È®ÀÎ.

¿ì¸®°¡ ¿©±â¼­ ÇÑ ÀÛ¾÷Àº, ¸Å¿ì °­·ÂÇÑ ±â¼úÀÇ Åä´ë¸¦ ´ÙÁø°Å¶ó°í º¼¼ö ÀÖ½À´Ï´Ù. ¿ì¸®´Â ÇѰ³ÀÇ ¼­ºñ½ºÀÇ ¶óÀÌÇÁ»çÀÌŬÀ» ´Ù¸¥ ¼­ºñ½º(½ÇÁ¦·Î´Â ¿©·¯°³ÀÇ ´Ù¸¥ ¼­ºñ½º)ÀÇ ¶óÀÌÇÁ»çÀÌŬ¿¡ ¿¬°áÇÏ¿´½À´Ï´Ù. ÀÌ ±â¼úÀ» ´õ ¹ßÀü½Ã۸é, MovieLister ¿¡ ¿¬°áµÈ ´Ù¸¥ ¼­ºñ½º¸¦ °¡Áú¼öµµ ÀÖ°í, ¶Ç °Å±â¿¡ ÀÇÁ¸ÇÏ´Â ´Ù¸¥ ¼­ºñ½º µîµî.. ¿ì¸®´Â ¼­·Î ÀÇÁ¸ÇÏ´Â ¼­ºñ½ºµéÀÇ ±×·¡ÇÁ¸¦ ¸¸µé¾ú½À´Ï´Ù. ÇÏÁö¸¸ ´Ù¸¥ Á¤ÀûÀÎ IOC ÄÁÅ×À̳ʿ¡ ÀÇÇØ ¸¸µé¾îÁø bean µéÀÇ ±×·¡ÇÁ¿Í´Â ´Þ¸® ¿ì¸®ÀÇ ±×·¡ÇÁ´Â ưưÇϸç, ÀÚ°¡ Ä¡À¯´É·ÂÀÌ ÀÖ°í, º¯È­Çϴ ȯ°æ¿¡ ÀûÀÀÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÇÑÆíÀ¸·Î ¿ì¸®°¡ ÀÛ¼ºÇÑ Äڵ忡´Â ¾à°£ÀÇ ¹®Á¦°¡ ÀÖ½À´Ï´Ù. MovieFinderTracker ¿Í TrackingMovieListerActivator Ŭ·¡½º´Â ¹Ýº¹»ç¿ë µÇ´Â ¹®ÀåµéÀÌ °¡µæÇؼ­, ¿ì¸®°¡ ½Ã½ºÅÛÀ» È®ÀåÇϱ⠽ÃÀÛÇÑ´Ù¸é ¿ì¸®´Â °°Àº Äڵ带 ¸Å¹ø Á¶±Ý¾¿¸¸ ¹Ù²ã¼­ ÀÛ¼ºÇÏ°Ô µÇ¾î ¸Å¿ì ÇǰïÇØ Áú°ÍÀÔ´Ï´Ù. ±×·¯¹Ç·Î ´ÙÀ½È¸¿¡¼­´Â ÀÌ ¸ðµç Äڵ带 ¸îÁÙÀÇ XML ·Î º¯°æÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¼ °Í ÀÔ´Ï´Ù.

´ÙÀ½È¸ºÎÅÍ´Â ÀÌÁ¦ ÇÑ µð·ºÅ丮¿¡¼­ Ä¿¸Çµå ¶óÀÎ Åø·Î ¸ðµç°ÍÀ» ÀÛ¼ºÇϴ°ÍÀ» ±×¸¸µÑ °ÍÀÔ´Ï´Ù. ÀÌ Æ©Å丮¾óÀ» ½ÃÀÛÇÒ¶§ ÀúÀÇ ¸ñÇ¥´Â OSGi ´Â °£´ÜÇϸ鼭µµ °­·ÂÇÑ ÇÁ·¹ÀÓ¿öÅ© À̸ç, OSGi ¹øµéÀ» °³¹ßÇϱâ À§Çؼ­ Eclipse °°Àº ¹«°Ì°í °­·ÂÇÑ IDE °¡ ÇÊ¿äÇÏÁö´Â ¾Ê´Ù´Â°ÍÀ» º¸¿©ÁÖ´Â °Í À̾ú½À´Ï´Ù. ¾î¶² °ÍÀÌ ¸Å¿ì ½±´Ù°í º¸¿©Áú¶§ , ¿ì¸®´Â ÇÑÆíÀ¸·Ð IDE °¡ ¾î¶² Èæ¸¶¹ýÀ» »ç¿ëÇÑ °ÍÀÌ ¾Æ´Ò±î ÇÏ´Â ÀDZ¸½ÉÀ» °¡Áö°Ô µË´Ï´Ù. Àü À̹ø °æ¿ì ¿£ ±×·±°Í°ú ´Þ¸®, OSGi °¡ ±×·± Èæ¸¶¹ýÀº ÇÊ¿äÇÏÁö ¾Ê´Ù´Â °Í À» º¸¿©ÁÖ¾ú±â¸¦ Èñ¸ÁÇÕ´Ï´Ù. ÇÑÆíÀ¸·Î, ¸¸¾à ÀÌ Äڵ带 ³Ö´Â µð·ºÅ丮°¡ Á¦°Í°ú ºñ½ÁÇÏ´Ù¸é, ¿©·¯ºÐ²²¼­µµ ÀÌÁ¦ ÀûÀýÇÑ °³¹ßȯ°æÀ» ¿øÇÏ°í °è½Ç°Ì´Ï´Ù. Àú ¿ª½Ã ±×·¸½À´Ï´Ù. À̰ÍÀº ¹°·Ð OSGi ÀÇ ¹®Á¦°¡ ¾Æ´Õ´Ï´Ù. ¾î¶² Java ÇÁ·ÎÁ§Æ®¶óµµ Ç¥ÁØ Åø¸¸À» ÀÌ¿ëÇÑ´Ù¸é ±Ý¹æ °ü¸®Çϱâ Èûµé¾î Áý´Ï´Ù.

ÇÏ¿©Æ°, Á˼ÛÇÏÁö¸¸ ´ÙÀ½È¸±îÁö ¿©·¯ºÐ²²¼± EclipseCon ÀÌ ³¡³ª´Â°ÍÀ» ±â´Ù¸®¼Å¾ß ÇÒµíÇÕ´Ï´Ù. Àü 24½Ã°£¾È¿¡ Santa Clara ·Î °¡´Â ºñÇà±â¸¦ ž´Ï´Ù. °Å±â¼­ ºË±â¸¦! (¿ªÁÖ: ÀÛ³â±ÛÀ̶ó À§ ³»¿ëÀº ÇÊ¿ä¾ø°ÚÁö¸¸ ¿ø¹®°úÀÇ ÀÏÄ¡¸¦ À§ÇØ ±×³É ¹ø¿ªÇÕ´Ï´Ù ^_^ )

Concurrent Code ¸¦ À§ÇØ ´õ ³ªÀº ¹æ¹ýÀ» Á¦°øÇØÁØ BJ Hargrave ¿¡°Ô °í¸¿´Ù´Â ¸»À» ÀüÇÕ´Ï´Ù.

Æ®À§ÅÍ (Twitter) ¿¡¼­ Á¦ Æ®À­°èÁ¤ @xguru ¸¦ Follow ÇÏ½Ã¸é ´Ù¾çÇÑ Á¤º¸¸¦ ´õ¿í »¡¸® ¹Þ¾Æº¸½Ç¼ö ÀÖ½À´Ï´Ù.
[ Æ®À§ÅÍ·Î ! | del.icio.us this | ±¸±Û ºÏ¸¶Å© | ´ÙÀ½ ºÏ¸¶Å© | ¸¶°¡¸° | Bookmakr | ÇÑRSS ºÏ¸¶Å© | Social bookmark This ] | [ Translate to english ]
  °ü·Ã ±Û  

ÃÑ2 °³ÀÇ ´ñ±Û
  1. ¹ø¿ª ¿¬Àç µÚ´Ê°Ô Àß Àаí ÀÖ½À´Ï´Ù. »ùÇà ¼Ò½º Àдٺ¸´Ï±î "<" ¶§¹®ÀÎÁö Á» ³¯¶ó°£ ºÎºÐÀÌ º¸À̳׿ä( MovieListerImpl ÀÇ listByDirector ¸Þ¼­µå ) ÀÌÀü ±Û ¼Ò½º Áß¿¡µµ ±×·±°Å ÀÖ¾ú±¸¿ä. OSGi °ü·ÃÇØ¼­ °è¼Ó ¸¹Àº ºÐµéÀÌ Âü°íÇÏ°ÔµÉ ±ÛÀÏÅ×´Ï ¼öÁ¤ ºÎʵ右´Ï´Ù.
    Á¤¸» °í»ý ¸¹À¸¼Ì³×¿ä. ´öºÐ¿¡ ÆíÈ÷ °øºÎÇÕ´Ï´Ù. °¨»ç ^^
    commented by tzara [2008/09/17 16:53]
  2.   ¾Æ Á¦°¡ ±ÛÀ» Çѹø¾¿ ¼öÁ¤ÇÒ¶§¸¶´Ù < , > °¡ ÀÚµ¿À¸·Î º¯È¯µÇ¸é¼­ ¹®Á¦°¡ µÇ³×¿ä. ¼öÁ¤ÇØ ³õ°Ú½À´Ï´Ù. Á¦º¸ °í¸¿½À´Ï´Ù.
    replied by ±¸·ç [2008/09/17 22:06]
ÃÑ 2 °³ÀÇ ´ñ±Û
À̸§ :  URL(Àִºи¸) :

[´ñ±Ûȯ¿µ!] Àú ´ñ±Û ¹«Áö ÁÁ¾ÆÇÕ´Ï´Ù. ^^ ±×¸®°í, Æ®À§ÅÍ @xguru ·Î Áú¹®Áּŵµ µË´Ï´Ù.      [´ñ±Û µî·Ï]