±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜOSGiÊÊÓó¡¾°,JavaÄ£¿é»¯µÄһЩÄѵãºÍÒ»Ð©ÖØÒª¸ÅÄBundle£¬,Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚËѺüÍø£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
OSGiÄ£¿é»¯¿ò¼ÜÊǺÜÔç¾Í³öÀ´µÄÒ»¸ö²å¼þ»¯¿ò¼Ü£¬×îÔçEclipseÓÃËü¶ø³öÃû£¬µ«ÕâЩÄêҲûÓдóÈÈËäÈ»OSGiÒѾ·¢²¼ÁË
°æ±¾1µ½°æ±¾5¡£ÏÖÔÚÓõÄ×î¶àµÄ£¬Ò²ÊDZ¾ÎĽ²Êö»ùÓÚµÄÊÇEquinoxµÄOSGiʵÏÖ£¬Í¬Ê±Ò²ÊÇEclipseºËÐÄ£¬Spring
Dynamic ModuleÒ²ÊÇ»ùÓÚEquinox¡£OSGi¿ò¼ÜΪjavaϵͳÌṩÁËÒ»¸öͨÓõÄÈÝÆ÷£¬¸ÃϵͳÖеÄ
bundle£¬ÎÞÐèֹͣϵͳ£¬¼´¿ÉʵÏÖ bundle µÄ°²×°¡¢Ð¶ÔØ¡£OSGiÊÇJavaÖÐĿǰΨһµÄÒ»¸öÄ£¿é»¯¡¢¶¯Ì¬»¯µÄ¹æ·¶¡£ÔÚÄ£¿é»¯·½ÃæOSGiÁªÃËÒѾÑо¿Á˺ܶàÄêÁË£¬Òò´ËOSGi¹æ·¶¶ÔÓÚÄ£¿éµÄÎïÀí¸ôÀ롢ģ¿éµÄ½»»¥¡¢¶à°æ±¾ÕâЩ·½Ãæ¶¼ÓÐÁ˷dz£ÍêÉÆµÄ»úÖÆ£¬²¢ÇÒÒ²µÃµ½ÁËÏÖÔÚ¼¸ºõËùÓеÄApp
Server³§ÉÌ»ò¿ªÔ´ÉçÇøµÄÈϿɣ¬µ«ÖÁ½ñûÓб»JAVAÄÉÈëÓïÑÔ¼¶£¨Óдý¹Û²ì£©¡£OSGiµÄÍ»³öÌØµãÓУº
¿ÉÒÔ¶¯Ì¬¼ÓÔØ¡¢¸üкÍÐ¶ÔØÄ£¿é¶ø²»ÓÃÍ£Ö¹·þÎñ
ʵÏÖϵͳµÄÄ£¿é»¯¡¢°æ±¾»¯£¬ÔÊÐí¶à°æ±¾bunduleͬʱ·þÎñ
Service modelÔÊÐíÄ£¿é/²å¼þÏ໥ÒÀÀµµ«ËÉñîºÏ£¬·ÖÏí·þÎñ¸ü¼òµ¥
OSGiÔËÐÐÔÚJVMÖ®ÉÏ£¬Æä¼Ü¹¹Í¼ÈçÏÂͼËùʾ£º

OSGiÊÊÓó¡¾°
ºÜ¶àÈË´íÎóµÄʹÓÃÁËOSGi, Ì×ÓÃÁËOSGi¼Ü¹¹°Ñϵͳ¸´ÔÓ»¯¡£ÔÚÎÒ¿´À´£¬OSGiµÄÓô¦ÔÚÓÚ¡°Ä£¿é»¯¡±ºÍ¡°ÈȲå°Î¡±¡£Ä£¿é»¯°üÀ¨Ä£¿é»¯¡¢°æ±¾»¯ºÍÃæÏò·þÎñµÄÉè¼Æ¡£ÈȲå°ÎÒ²¾ÍÊÇ˵ģ¿é/bundleµÄÈȲå°Î£¬Ëü¿ÉÒÔʵÏÖ¸üкÍÉý¼¶Ä£¿é/bundle£¨¼´ÏµÍ³µÄÒ»²¿·Ö£©¶øÎÞÐèÖØÆôÕû¸öϵͳ¡£
Èç¹ûÄãµÄϵͳÌ×ÓÃÁËOSGi¼Ü¹¹£¬bundleµÄÏ໥ÒÀÀµ¹ØÏµ¸´ÔÓ£¬ÓÖûÓÐbundle¶¯Ì¬¼ÓÔØ¡¢¶¯Ì¬¸üС¢¶¯Ì¬Ð¶ÔغͶ¯Ì¬¼àÌýµÄ»úÖÆ£¬¶¼ÊǾ²Ì¬Æô¶¯ËùÓÐbundle£¬ÄǾÍÊÇΪÁËOSGi¼Ü¹¹¶øOSGi¼Ü¹¹£¬°ÑÎÊÌ⸴ÔÓ»¯ÁË¡£Æä´ú¼ÛÒ²ÊǺܴóµÄ£¬ÒòΪÔÀ´ÄãµÄjar°üÓÃmavenÀ´´¦ÀíÒÀÀµ¹ØÏµºÍ×Ô¶¯¸üÐÂÒ²ºÜ·½±ã£¬¶øÓÉÓÚÕû¸öϵͳ½¨Á¢ÔÚOSGi¹æ·¶ÉÏ£¬ÄãµÄÓ¦ÓÃËùÒÀÀµµÄÆäËû×é¼þÒ²¡°²»µÃ²»¡±Ç¨ÒƵ½OSGIÉÏÀ´£¬ÔÙ¼ÓÉÏOSGI¶ÀÌØµÄClassLoaderÉè¼Æ£¬Ê¹bundle¼äµÄÀ໥Ïà·ÃÎÊÊܵ½Ò»¶¨µÄÔ¼Êø£¬Ò»Çж¼ÐèÒªÇ¨ÒÆµ½OSGiµÄÔ¼ÊøÉÏÀ´¡£
¾Ù¸öÀý×ÓÀ´Ëµ£¬¾ÍÏñEclipseÌṩÁ˶¯Ì¬¼ÓÔØ¡¢¸üкÍɾ³ý²å¼þµÄ»úÖÆ£¬ÒòΪËüÀïÃæÓÐÒ»¸ö²å¼þ×¢²áºÍ·´×¢²áµÄ½Ó¿ÚºÍ²å¼þ¼ÓÔØ¡¢¸üкÍɾ³ýµÄ¼àÌýỊ̈߳¬ÕâÑùÔÊÐíÄ㶯̬¼ÓÔØ¡¢¸üкÍɾ³ýEclipse²å¼þ¶øÎÞÐèÖØÆôEclipse¡£µ±È»£¬Èç¹ûÄ㵱ǰ½ø³Ìµ÷ÓÃÁËij²å¼þ£¬±ÈÈçjsÓï·¨¸ßÁÁ£¬¶øÄ³²å¼þ¸üÐÂÁË£¬ÄÇôµ±Ç°µÄjsʵÀý»¹ÊÇÐèÒªÖØÐ´ò¿ªµÄ¡£µ«Õû¸öEclispeÎÞÐèÖØÆô¡£
JavaÄ£¿é»¯µÄÄѵã
OSGiµÄÒ»¸öÖØÒªÌØÐÔ¾ÍÊÇÄ£¿é»¯£¬OSGiÌṩÁËÒ»Ì×Ä£¿é»¯µÄÌåϵ£¬ÕâÆäÖÐÔò»áÓÐÃ÷È·µÄÄ£¿éÖ®¼ä½Ó¿Ú±©Â¶ÒÔ¼°ÒÀÀµµÄ¶¨Ò壬Òò´ËÄܹ»¸üºÃµÄʵÏÖ¸ßÄھۺ͵ÍñîºÏ¡£ÄÇô£¬JavaÄ£¿é»¯ÄѵãÔÚÄÄ£¿Ä£¿éµÄʵÏֺʹ«Í³µÄ±à³Ì·½·¨È·ÊµÓÐһЩ²î±ð£¬Ö÷ÒªÌåÏÖÔÚÄ£¿éÖ®¼äÀà·ÃÎʵĸôÀë¡¢°æ±¾Ñ¡ÔñÕâÁ½¸ö·½Ãæ¡£ÈçÏ£Íû¸üºÃµÄÉè¼ÆÄ£¿é»¯µÄϵͳ£¬¿ª·¢ÕßÐèÒªÕÆÎÕClassLoader»úÖÆ¡¢Ä£¿éÖ®¼äÀàµÄ½»»¥·½·¨£¨Õâ°üÀ¨ÁËÄ£¿éÔõôÑù¶ÔÍâÌṩ¿É·ÃÎʵÄpackage¡¢ÔõôÑù·ÃÎÊÆäËûÄ£¿éÌṩµÄpackage¡¢ÈçºÎÑ¡ÔñÊʺϰ汾µÄpackageµÈ£©¡£Èç¹û²»¶®ÒÔÉÏÕâЩ£¬Ã³È»Ì×ÓÃOSGi¿ò¼Ü»áÎóÈëÆç;¡£
ÖØÒª¸ÅÄBundle
Bundle ¡ª A bundle is a JAR file with special OSGi
entries in its manifest and containing classes, resources,
and other JARs¡£Bundle£¬¿ÉÒÔ½«ÆäÀí½âΪ×ÔÃèÊöµÄ JAR Îļþ¡£BundleÔÚOSGiÖÐÊDz¿ÊðµÄ×îСµ¥Î»£¬Òò´Ë£¬¿ÉÒÔ°ÑËüÀí½âΪģ¿é¡£ÔÚ
bundle µÄ manifest ÎļþÖУ¬»áÓжԱ¾ bundle µÄ±êʶ¡¢ÌṩµÄ¹¦ÄÜ (Export-package)
¼°ÒÀÀµÐÔ (Import-Package/Require-Bundle) µÄ¶¨Ò塣ÿ¸ö bundle
ÔÚÔËÐÐʱ×Ô¼ºµÄÀà¼ÓÔØÆ÷ (Class Loader)£¬ÕâÑù¿ÉÒÔ×öµ½Ò»·½Ãæ°Ñ²»Í¬µÄ bundle ÀïÃæµÄÀàÇø±ð¿ªÀ´£¬µ±
bundle ±»Ð¶ÔØÊ±£¬Ö»ÓÐÕâ¸ö bundle µÄÀà¼ÓÔØÆ÷ÖеÄÐÅÏ¢»á¶ªÊ§£»ÁíÒ»·½Ã棬¿ÉÒÔÔÚ×Ô¼ºµÄ bundle
ÄÚ²¿³ä·ÖÀûÓà Java µÄ³ÉÔ±·ÃÎÊ¿ØÖÆ»úÖÆ¡£
Bundleͨ¹ýMANIFEST.MF½øÐÐ×ÔÃèÊö£¬ÏÂÃæÊÇÒ»¸öÀý×Ó£º
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Popup Plug-in
Bundle-SymbolicName: com.example.myosgi; singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: com.example.myosgi.Activator
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
BundleÀà¸ôÀë»úÖÆ
ÿ¸öBundle¾ùΪ¶ÀÁ¢µÄClassLoader£¬ÊÇjava¶¯Ì¬»¯ÊµÏֵĻù´¡¡£Ä¬ÈÏÇé¿öÏÂÓÐBoostrap
classLoader (jre/lib/classes)¡¢Extension classloader
(jre/lib/ext)¡¢ System classloader (classpathÖ¸¶¨)£¬Ó¦ÓÿÉÒÔ×ÔÐÐʵÏÖclassloader¼°¶¯Ì¬µÄ¼ÓÔØÀ࣬»ò¼ÓÔØÌØ¶¨Ä¿Â¼ÏµÄÀà¡£
BundleµÄÉúÃüÖÜÆÚ
Lifecycle ¡ª A lifecycle is the sequence of states
a bundle goes through: uninstalled, installed, resolved,
starting, stopping, active. ÉúÃüÖÜÆÚͼÈçÏÂËùʾ£º

ҪעÒâµÄÊÇ£ºbundle״̬±äΪResolved²¢²»±íʾÄÜÌṩ·þÎñ£¬ËùÒÔÆô¶¯ËùÓеÄbundle²»±íʾÀà¶¼ÒѾ¼ÓÔØµ½ÄÚ´æÁË¡£Resolve
bundle×öÒÔÏµļ¸¼þÊÂÇ飺ѰÕÒbundleÒÀÀµµÄ°üÊÇ·ñ´æÔÚÒÔ¼°±»resolve£¬Ñ°ÕÒÆ¥ÅäµÄimport
package£¬required bundle£¬ÈçѰÕÒÔò½øÈë¼ì²é£¬¼ì²éûÓгåÍ»¾ÍÐγɰ󶨹ØÏµ£¬ÒÔ±ã¼ÓÔØÀàµÄʱºòÄÜÖ±½Ó¼ÓÔØ£¨µ«½ö½öResolved£¬²»´ú±íÀà±»¼ÓÔØÁË£©¡£ÔÚ´ËÎÒÏò´ó¼ÒÍÆ¼öÒ»¸ö¼Ü¹¹Ñ§Ï°½»Á÷Ⱥ¡£½»Á÷ѧϰȺºÅ£º948368769ÀïÃæ»á·ÖÏíһЩ×ÊÉî¼Ü¹¹Ê¦Â¼ÖƵÄÊÓÆµÂ¼Ïñ£ºÓÐSpring£¬MyBatis£¬NettyÔ´Âë·ÖÎö£¬¸ß²¢·¢¡¢¸ßÐÔÄÜ¡¢·Ö²¼Ê½¡¢Î¢·þÎñ¼Ü¹¹µÄÔÀí£¬JVMÐÔÄÜÓÅ»¯¡¢·Ö²¼Ê½¼Ü¹¹µÈÕâЩ³ÉΪ¼Ü¹¹Ê¦±Ø±¸µÄ֪ʶÌåϵ¡£»¹ÄÜÁìÈ¡Ãâ·ÑµÄѧϰ×ÊÔ´£¬Ä¿Ç°ÊÜÒæÁ¼¶àÈç¹ûÄãµÄBundleActivationPolicyÊÇLAZY¶èÐÔ¼ÓÔØ£¬bundle.loadClass()µ÷ÓòŻᵽ´ïActive״̬¡£Èç¹ûÄãµÄbundleµÄMANIFEST.MFÖÐÅäÖõÄBundle-activator´æÔÚ£¬ÄǾ͵÷ÓÃÆästart·½·¨£¬´Óstarting½øÈëactive״̬¡£
osgi> ss
"Framework is launched."
id State Bundle
15STARTING com.example.serviceconsumer_1.0.0.X
16RESOLVED com.example.serviceprovider_1.0.0.X
---------------------

ÏÂÃæµÄͼ¸üÏêϸµÄ½âÊÍÁËÕâÒ»µã£º

OSGi Service
Service ¡ª A service is an object instance exposed
under the one or more interfaces that it implements
and a map of properties. ¼òµ¥À´Ëµ£¬Service modelÔÊÐíÿ¸öbundle¶ÔÍâ·ÖÏíÒ»×é·þÎñ£¬ÆäËüµÄbundle¶¼¿ÉÒÔµ÷ÓÃÕâЩ½Ó¿ÚµÄ·þÎñ¡£ÕâÒ²¾ÍÊÇOSGi
bundleÖ®¼äµ÷Óõķ½Ê½¡£Service¿ÉÒÔÓÃÀ´£º
Export functionality from a bundle to other bundles
Import functionality from other bundles
Register listeners for events from other bundles
Expose external devices, such as UPnP devices or
even hardware, to other OSGi bundles. See theDeviceandUPnPAPIs
Expose java code running in OSGI to an external network,
e.g. via the UPnP orSOAPprotocols.
Bundle configuration, using theConfiguration Manager
ʵ¼Ê×ö·¨À´¿´£¬Í¨³£»á°Ñ½Ó¿ÚºÍʵÏÖ·Ö¿ª¡£½Ó¿Ú·Åµ½Ò»¸öbundleÀïÃæ¡£ÊµÏÖ£¨service)·Åµ½ÁíÍâÒ»¸öbundleÀïÃæ£¬ÀàËÆÏÂÃæµÄͼʾÖУ¬bundle
AºÍBÊÇService£¬Æäinterface·Åµ½Bundle C£º

Ò²¿ÉÒÔÊÇÌṩһ¸öjar°ü£¬ÀïÃæ¶¨ÒåÁËÀ©Õ¹½Ó¿Ú£¬È»ºó¹æ¶¨ÐµÄÀ©Õ¹bundle±ØÐëʵÏÖ¸Ãjar°üÀïÃæ¶¨ÒåµÄinterface¡£ÊµÏÖʾÒâͼÈçÏÂËùʾ£¨OsgiCommand½Ó¿Ú¶¨ÒåÔÚÀ©Õ¹µãjar°üÀïÃæ£¬ÐµÄbundle±ØÐë°üº¬£©£º

BundleµÄServiceÖ®¼ä½»»»·½Ê½ºÍ×¢²á·½Ê½£º
ͨ¹ýbundleContext.registerService×¢²á·þÎñ£¬È»ºóͨ¹ýbundleContext.getServiceReference»ñÈ¡·þÎñ£¨²»ÍƼö£©
ʹÓüàÌýÆ÷listeners
ServiceListenerºÍServiceTrackerÌṩbundleºÍserviceµÄ¶¯Ì¬¼àÌý£¬ServiceTracker¿ÉÒÔ¶¯Ì¬¼àÌýδÀ´µÄbundleºÍservice£¨OSGi
Release 2ÌṩµÄServiceTracker£¬Ò»°ãÍÆ¼ö£©
ͨ¹ýDeclarative Service(OSGiDS£¬»òÕßSpring Dynamic Module(DM))µÄ·½Ê½£¨OSGi
Release 4¿ªÊ¼£¬ÖصãÍÆ¼ö£¡£©
µÚ¶þÖÖͨ¹ýServiceTrackerÀ´²éѯ»òÕìÌý·þÎñ×¢²áºÍ×¢ÏúµÄÀý×Ó´úÂ룺
package com.ibm.osg.example.mygetservice;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
import com.ibm.osg.example.mtservice.MyTestService;
public class MyBundleActivator
implements BundleActivator, Runnable {
private boolean done=false;
private ServiceTracker testServiceTracker;
// Bundle Activator Start Method
public void start(BundleContext context)
{
/* Here we initialize and open our ServiceTracker.
It will track any service registering under
the "com.ibm.osg.example.mtservice.MyTestService"
interface.
*/
testServiceTracker =
new ServiceTracker(context,
"com.ibm.osg.example.mtservice.MyTestService",
null);
testServiceTracker.open();
// Here we start a thread that will continue
// to use our service until
// the bundle is stopped.
Thread t = new Thread(this);
t.setName("mygetservice thread");
t.start();
}
/*Bundle Activator Stop Method -- here we stop
the thread and close the
ServiceTracker*/
public void stop(BundleContext context)
{
done=true;
testServiceTracker.close();
}
//Here is a method that uses the service
//we are tracking. First we get
//the service
//from the tracker, then we call its printMessage
//method.
public void useService(String message){
MyTestService testService = (MyTestService)
testServiceTracker.getService();
if( testService != null )
{
// If the service is available then use it.
testService.printMessage(message);
}
else{
// If the service is not available then perform
an acceptable action
// Here we just print the message to standard
out and indicate the service
// was not available.
System.out.println("No MyTestService available
- " + message)
}
}
// Simply continues to use the test service
// every second until the done flag is set.
public void run(){
int i = 0;
done = false;
while (!done) {
useService("message from test " +
i++);
try{
Thread.sleep(1000);
}
catch( InterruptedException ie ){
}
}>
}<
}
|
OSGi¼òµ¥Æð²½
´ÓEclipse´´½¨OSGiµÄbundleÊǷdz£¼òµ¥µÄ
Slideshare: OSGiÀíÂÛÓëʵս
OSGi¶¯Ì¬¼ÓÔØÉ¾³ýbundle
ʹÓüàÌýÆ÷listeners
ServiceListenerºÍServiceTrackerÌṩbundleºÍserviceµÄ¶¯Ì¬¼àÌý£¬ServiceTracker¿ÉÒÔ¶¯Ì¬¼àÌýδÀ´µÄbundleºÍservice£¨OSGi
Release 2ÌṩµÄServiceTracker£¬Ò»°ãÍÆ¼ö£©ÔÚ´ËÎÒÏò´ó¼ÒÍÆ¼öÒ»¸ö¼Ü¹¹Ñ§Ï°½»Á÷Ⱥ¡£½»Á÷ѧϰȺºÅ£º948368769ÀïÃæ»á·ÖÏíһЩ×ÊÉî¼Ü¹¹Ê¦Â¼ÖƵÄÊÓÆµÂ¼Ïñ£ºÓÐSpring£¬MyBatis£¬NettyÔ´Âë·ÖÎö£¬¸ß²¢·¢¡¢¸ßÐÔÄÜ¡¢·Ö²¼Ê½¡¢Î¢·þÎñ¼Ü¹¹µÄÔÀí£¬JVMÐÔÄÜÓÅ»¯¡¢·Ö²¼Ê½¼Ü¹¹µÈÕâЩ³ÉΪ¼Ü¹¹Ê¦±Ø±¸µÄ֪ʶÌåϵ¡£»¹ÄÜÁìÈ¡Ãâ·ÑµÄѧϰ×ÊÔ´£¬Ä¿Ç°ÊÜÒæÁ¼¶à
ͨ¹ýDeclarative Service(OSGiDS£¬»òÕßSpring Dynamic Module(DM))µÄ·½Ê½£¨OSGi
Release 4¿ªÊ¼£¬ÖصãÍÆ¼ö£¡£©
¾ßÌåʵÏÖ£º
¶ÔÓÚDS£¬<Define a declarative OSGi Service>, <IBM:
Declaring your services to OSGi Declarative Services>£¬<java
OSGI Declarative Services Component bundles Example>¡£
¶ÔÓÚSpring DM£¬<OSGI and Spring Dynamic Modules ¨C
Simple Hello World>, <Hello, OSGi, Part 2: Introduction
to Spring Dynamic Modules>
·Ö²¼Ê½OSGi£¨Distributed OSGi£©
OSGiÈÝÆ÷¿ÉÒÔ°üº¬¼¸Ç§¸öbundlueûÓÐÎÊÌ⣬µ«ÈçºÎÓ¦¶Ô¼¸Ê®Íò¸öµÄÇé¿ö£¿ÈçºÎÏñEJB3Ò»Ñù¾ßÓзֲ¼Ê½²¿ÊðºÍ±ãЯÐÔÄØ£¿ÓÐÒ»¸öOSGiµÄ×ÓÏîÄ¿:·Ö²¼Ê½OSGi£¨Distributed
OSGi£©¡£

ÉÏͼÊÇÒ»¸ödemoÑÝʾ£¬Á½¸ö·Ö²¼Ê½OSGi Container£¬¶¼²¿ÊðÁËGreeter½Ó¿Úbundle£¬¶¼»ùÓÚ·Ö²¼Ê½OSGiʵÏÖ£¬ÄÜʵÏÖ·Ö²¼Ê½µ÷ÓÃOSGi
Service¡£·Ö²¼Ê½OSGi£¨Distributed OSGi£©»¹¿ÉÒÔÓëRESTful Service
(JAX-RS / JSR-339)ÕûºÏ¡£·Ö²¼Ê½OSGiÓм¸Ê®Íò¸öbundleÔõô¹ÜÀí£¬ÕâÊǸöÂé·³£¬¶øÇÒÈçºÎÆô¶¯Í£Ö¹£¬Æô¶¯Ë³ÐòÔõôÑù£¿¿É¹ÜÀíÐÔÊǸöÂé·³£¬ACEÏîÄ¿ÊÔͼ½â¾öÕâ¸öÊÂÇé¡£
DOSGiµÄÔÀí£¨ÓÉDistribution providerÀ´¸øOSGi Service´´½¨Endpoint£¬Ê¹ÕâЩServiceÔÚOSGi
ContainerÍⲿ¿É·ÃÎÊ£¬ÁíÍâÒ»¶ËÔò´´½¨´úÀí£»´ËÍ⣬ÓмàÌýÆ÷À´ÕìÌýOSGi ServiceµÄ´´½¨ºÍÆôÍ£µÈ£©£º

·Ö²¼Ê½OSGiÓëZooKeeper
ZooKeeperÊÇHadoopµÄÒ»¸ö×ÓÏîÄ¿£¬ËüÊÇÒ»¸öÕë¶Ô´óÐÍ·Ö²¼Ê½ÏµÍ³µÄ¿É¿¿Ðµ÷ϵͳ£¬ÌṩµÄ¹¦ÄܰüÀ¨£ºÅäÖÃά»¤¡¢Ãû×Ö·þÎñ¡¢·Ö²¼Ê½Í¬²½¡¢×é·þÎñµÈ¡£ZooKeeperµÄÄ¿±ê¾ÍÊÇ·â×°ºÃ¸´ÔÓÒ׳ö´íµÄ¹Ø¼ü·þÎñ£¬½«¼òµ¥Ò×ÓõĽӿںÍÐÔÄܸßЧ¡¢¹¦ÄÜÎȶ¨µÄϵͳÌṩ¸øÓû§¡£
·Ö²¼Ê½OSGi£¨Distributed OSGi£©ÔÚDiscoveryÕâÒ»¿éʹÓÃÁËZooKeeper¡£ËùνDiscoveryÄ£¿é¾ÍÊÇÓÃÀ´·¢ÏÖºÍÕìÌý·Ö²¼Ê½µÄÔ¶¶ËµÄ¿ÉÓõÄEndpoints¡£Discovery
Ditributed with ZookeeperµÄ¼Ü¹¹Í¼£º

|