±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËOSGi¿ò¼ÜÊÇʲôÒÔ¼°Ò»¸ö¼òµ¥µÄ°¸Àý¡£
±¾ÎÄÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
1.¼ò½é
1.1 what
Open Service Gateway Initiative£¨OSGi·þÎñƽ̨ServicePlatform£©
Ò»¸öJava¿ò¼Ü£¬¿ÉÀ©Õ¹²¿ÊðºÍÏÂÔØµÄÓ¦ÓóÌÐò£¨bundle£©¡£Ä£¿é»¯£¬¿É²å°Î£¬¿É¶¯Ì¬¸Ä±äÐÐΪ£¬
1.2 advance
Javaƽ̨µÄ¶ÀÁ¢ÐԺͶ¯Ì¬´úÂë¼ÓÔØÄÜÁ¦
1.3 parts
1.3.1 °²È«²ã
¶¨ÒåÁËÈçºÎÇ©ÃûºÍÑéÖ¤Ò»¸öBundle
1.3.2 Ä£¿é²ã
OSGIµÄºËÐIJã´Î£¬¶¨ÒåÁËBundleÄ£ÐÍ£¬BundleÈçºÎImportºÍExport´úÂ룬ÒÔ¼°ÈçºÎ¶¨ÒåºÍ½âÎöBundleÖ®¼äµÄÒÀÀµ¹ØÏµ
1.3.3 ÉúÃüÖÜÆÚ²ã
¶¨ÒåÁËBundleµÄÉúÃüÖÜÆÚ°üÀ¨µÄ״̬ÒÔ¼°×´Ì¬Ö®¼äÈçºÎת»»£¬²¢ÇÒ¶¨ÒåÁ˽ӿÚÖ§³ÖBundleµÄÉúÃüÖÜÆÚ²Ù×÷£¬°üÀ¨Install,
start, stop, updateºÍuninstall¡£OSGiÌṩÁËBundle¿â£¨BundleRepository£©
1.3.4 ·þÎñ²ã
¶¨ÒåÁËÈçºÎ½«Ò»¸öJava¶ÔÏó×¢²á·¢²¼ÔÚij¸ö/ijЩ½Ó¿ÚÏÂÃæ³ÉΪÓÉÕâЩ½Ó¿Ú±íʾµÄ·þÎñ£¬»ñÈ¡·þÎñ£¬ÒÔ¼°¼àÌýijЩ·þÎñµÄÆô¶¯ºÍֹͣʼþµÈ
1.4 application
1.4.1 Ó¦ÓÃÒ»
Ò»¸ö·þÎñ¿ÉÒÔÊÇÒ»¸öÍøÂçÖеÄÉ豸£¬Èç¹ûÒ»¸öÉ豸±»¼à²âµ½£¬Ôò·þÎñ¿ÉÒÔ¶¯Ì¬×¢²á£»Èç¹ûÉ豸±»ÒƳý£¬Ôò·þÎñÄܹ»¶¯Ì¬×¢Ïú¡£ÔÚÕâÑùµÄÓ°Ïì»·¾³»ã×ܱà³Ì½«ºÄ·Ñ´óÁ¿¿ªÏúÀ´´¦Àí¶¯Ì¬ÐÔ£¬µ«ÊÇOSCi°ïÖú¿ª·¢Õß´¦ÀíÁ˾ø´ó¶àÊý¶¯Ì¬ÐÔ·½ÃæµÄ¹¤×÷¡£
1.4.2 Ó¦Óöþ
Óû§µÇ¼Ñé֤ģ¿é£ºÒªÇó¿É¶¯Ì¬µÄÌæ»»£¨ÏµÍ³ÔËÐÐÆÚ£©Óû§µÇ¼ÑéÖ¤µÄ·½Ê½¡£
ÀýÈçĿǰÓÐÈýÖÖÑéÖ¤·½Ê½£ºLDAPÑéÖ¤£¬DBÑéÖ¤ÒÔ¼°ÅäÖÃÎļþÑéÖ¤£»Í¬ÊÂÒªÇó¿ÉËæÊ±Ôö¼ÓеÄÑéÖ¤·½Ê½£¬ÈçCAÑéÖ¤·½Ê½µÈ¡£
1.5 ÖªÃûOSGi¿ò¼Ü
Equinox£¬³É¹¦°¸ÀýÊÇEclipse IDE£¬»¹ÓÐOscar£¨²»»îÔ¾£©£¬Knopflerfish
2.Hello World
2.1 New¹¤³Ì

¸½£ºÕâÊÇÉÔ΢¸´ÔÓÒ»µãµÄÓ¦ÓÃ

Zzhello£º
public interface
Hello {
public void syaHello();
} |
public class
HelloImpl implements Hello{
final String helloString;
public HelloImpl(String helloString) {
this.helloString = helloString;
}
@Override
public void syaHello() {
System.out.println(this.helloString);
}
} |
Export-Package:
zzhello;version="1.0" |
public class
Activator implements BundleActivator {
private List<ServiceRegistration> r egistrations
=
new ArrayList<>();
public void start (BundleContext context) throws
Exception {
registrations.add(context.registerService(Hello.class.getName(),
new HelloImpl ("Hello, OSGi"), null));
System.out.println ("OSGi-·þÎñ×¢²á³É¹¦");
}
public void stop (BundleContext context) throws
Exception {
for (ServiceRegistration registration: registrations){
registration.unregister();
System.out.println ("È¡Ïû·þÎñ×¢²á:"+registration);
}
}
} |
ZzhelloClient:
Bundle-Activator: zzhelloclient.HelloUser
Import-Package: org.osgi.framework;version ="1.3.0",
zzhello;version="1.0.0" |
public class
HelloUser implements BundleActivator{
@Override
public void start (BundleContext ctx) throws Exception
{
ServiceReference reference = ctx.getServiceReference
(Hello.class.getName());
if (reference != null) {
Hello hello = null;
try {
hello = (Hello)ctx.getService(reference);
if(hello != null)
hello.syaHello();
else
System.out.println ("Services:Hello---object
null");
} catch (Exception e) {
e.printStackTrace();
}finally {
ctx.ungetService (reference);
hello = null;
}
}else {
System.out.println ("Service:Hello---not
exists");
}
}
@Override
public void stop (BundleContext arg0) throws Exception
{
}
|
2.2 Debug»·¾³ConfigurationÉèÖã¨È«Ñ¡µÄ»°»á±¨´í£©

2.3 ½á¹û


ÀàËÆµÄÃüÁÓÐinstall£¬uninstallµÈ
3.Bundle
OSGiÖÐËùÓÐÄ£¿éµÄ²¿Êð¶¼±ØÐëÒÔBundle·½Ê½À´½øÐв¿Êð£¬BundleÒÔjar°üÐÎʽ´æÔÚµÄÒ»¸öÄ£¿é»¯ÎïÀíµ¥Ôª£¬ÀïÃæ°üº¬ÁË´úÂë¡¢×ÊÔ´ÎļþºÍÔªÊý¾Ý£¨metadata£©£¬²¢ÇÒjar°üµÄÎïÀí±ß½çҲͬʱÊÇÔËÐÐʱÂ߼ģ¿éµÄ·â×°±ß½ç¡£
Õâ¸öjarºÍÆÕͨjarΨһ²»Í¬µã¾ÍÊÇMANIFEST.MF£¬¹ØÓÚBundleµÄËùÓÐÐÅÏ¢¶¼ÔÚÆäÀïÃæ½øÐÐÁËÃèÊö£¨ÈçBundleÃû³Æ¡¢ÐèÒªµ¼ÈëµÄ°ü£¬Êä³öµÄ°üµÈ£©£¬¹Ù·½³ÆÎªbundleµÄÔªÊý¾Ý¡£
3.1 Àà¼ÓÔØ»úÖÆ
ÔÚʹÓÃÒ»¸öbundle֮ǰ£¬±ØÐë¶Ô¹²ÏíµÄ°üÖ®¼äµÄÔ¼Êø¹ØÏµ½øÐнâÎö¡£½âÎö¹ý³Ì¾ÍÊÇÈ·¶¨µ¼Èë°üÈçºÎÁ¬½Óµ½µ¼³ö°ü¡£½âÎö¹ý³Ì±ØÐëÔÚbundleÖÐÈκδúÂë¼ÓÔØ»òÔËÐÐ֮ǰ¡£
ÔÚ¶àÊýJavaÓ¦ÓÃÖУ¬Í¨³£ÊÇÓÉÒ»¸öClass LoaderÀ´¼ÓÔØËùÓеÄÀàºÍ×ÊÔ´Îļþ£¬¶øÔÚOSGiÄ£¿é²ãÖУ¨Ò»¸öÄ£¿é¾ÍÊÇÒ»¸öBundle£©ÔòΪÿ¸öÄ£¿éÌṩÁ˸÷×ÔµÄClass
Loader£¬´Ó¶ø±£Ö¤ÁËÄ£¿éµÄ±ÕºÏ£¬Í¬Ê±ÎªÄ£¿éµÄ¹ØÁªÌṩ¿ØÖÆ

3.2 ÉúÃüÖÜÆÚ
Bundleͨ¹ýʵÏÖBundleActivator½Ó¿ÚÈ¥¿ØÖÆÆäÉúÃüÖÜÆÚ
3.2.1 BundleÁùÖÖ״̬
1£©installed£ºBundleÒѾ³É¹¦°²×°
2£©resolved£ºBundleËùÐèÒªµÄÀà¶¼ÒѾ¿ÉÓÃÁË£¬¸Ã״̬±íÃ÷BundleÒѾ׼±¸ºÃÁËÓÃÓÚÆô¶¯»òÕß˵BundleÒѾ±»Í£Ö¹
3£©starting£ºBundleÕýÔúÆðÆô¶¯ÖУ¬BundleActivatorµÄstart·½·¨ÒѾ±»µ÷Óò»¹ý»¹Ã»·µ»Ø
4£©active£ºBundleÒÑÆô¶¯£¬²¢ÔÚÔËÐÐÖÐ
5£©stopping£ºBundleÕýÔÚÍ£Ö¹ÖУ¬BundleActivatorµÄstop·½·¨ÒѾ±»µ÷Ó㬲»¹ý»¹Ã»·µ»Ø
6£©uninstalled£ºBundleÒѾ±»Ð¶ÔØÁË

APIÓÉÒÔÏÂÈý¸öºËÐĽӿÚ×é³É
1£© BundleActivator£º²¶×½µ½bundleµÄstartºÍstopʼþ
2£© BundleContext£ºÒ»¸öbundleÔÚ¿ò¼ÜÖеÄÖ´ÐÐʱÉÏÏÂÎÄ£¬µ±Æô¶¯»òÍ£Ö¹Ò»¸öbundleµÄʱºò£¬¿ò¼Ü½«Ëü·¢Ë͵½Ò»¸öbundleµÄ¼¤»îÆ÷
3£© Bundle£º°üº¬bundle»ù±¾ÐÅÏ¢ºÍbundleÉúÃüÖÜÆÚµÄ¿ØÖƽӿÚ
3.3 BundleÒýÓÃ
BundleÊǸö¶ÀÁ¢¸ÅÄÔÚOSGi¿ò¼ÜÖжÔÓÚÿ¸öBundle²ÉÓõÄÊǶÀÁ¢µÄclassloader»úÖÆ£¬ÕâÒ²¾ÍÒâζ×Ų»ÄܲÉÓô«Í³µÄÒýÓÃÆäËûBundle¹¤³ÌÀ´ÊµÏÖBundle¼äµÄÐ×÷£¬
3.1.1 ¶¨ÒåÊä³öµÄ°üÒÔ¼°ÒýÓõİü
ÿ¸öBundle¿ÉÒÔ¶¨ÒåÊä³öµÄ°üÒÔ¼°ÒýÓõİü£¬ÕâÑùÔÚBundle¼ä¾Í¿ÉÒÔ¹²Ïí°üÖеÄÀ࣬µ«ÔÚOSGi¡¢¿ò¼ÜÖиüÍÆ¼ö²ÉÓÃService·½Ê½¡£
3.1.2 Service·½Ê½
Bundleͨ¹ýBundleContext×¢²á¶ÔÍâÌṩµÄ·þÎñ£¬Í¬ÊÂÒ²¿ÉÒÔͨ¹ýBundleContextÀ´»ñµÃÐèÒªÒýÓõķþÎñ¡£
3.1.3 BundleÏ໥µ÷ÓÃ
Á½¸öbundle»¥ÏàÒýÓöԷ½µÄ°ü»á±¨´í£¨Ñ»·ÒýÓã©£¬ÏîÄ¿»á³öÏÖºìÉ«¸Ð̾ºÅ

3.4 ÈýÖÖÌØÊâµÄBundle
3.4.1 Require Bundles
²¢²»ÌØÊ⣬ֻÊÇ¿ÉÒÔÖ±½Ó±»ÆäËûBundleͨ¹ýRequire-BundleÀ´Ê¹ÓõÄBundle
3.4.2 Fragment Bundles
±¾Éí²»ÓµÓжÀÁ¢µÄclassloader£¬¿ÉÒÔ¿´³ÉÊÇBundleµÄÒ»ÖÖ¸½Êô£¬Æ¬¶Î¡£Æ¬¶ÎµÄ¹Ø¼üÓÃ;ÊÇÌṩ²»Í¬ÇøÓòµÄ·ÒëÎļþ£¬ÕâÑù¾Í¿ÉÒÔʵÏÖ·ÒëÎļþ´ÓÖ÷ÒªÓ¦ÓõÄbundleÖжÀÁ¢³öÀ´¡£¿ÉÒÔÓÃÀ´¿äÕÅhost
bundleµÄ¹¦ÄÜ£¬×öһЩbundleµÄÒÀÀµÀà
--> New Fragment Project

Æô¶¯ºó»á·¢ÏÖÆ¬¶Î²»Äܹ»×Ô¼ºÆô¶¯

Ö÷Bundle´úÂ룺
public class Activator implements BundleActivator
{
// È¥¶ÁÅäÖÃÎļþ£¬Ä¬ÈϾÍÊǶÁÖ÷°¡£¬ÎªÊ²Ã´ÍøÉÏ»á˵´Ó»á¸²¸ÇµôÖ÷ÄØ£¿£¿£¿
public void start (BundleContext context) throws
Exception {
InputStream is = Activator.class.getResourceAsStream ("/META-INF/ myConfig.properties");
Properties properties = new Properties();
properties.load(is);
System.out.println ("name"+properties.getProperty ("name"));
}
public void stop (BundleContext context) throws
Exception {
System.out.println ("Goodbye World!!");
}
}
|
|