±à¼ÍƼö: |
±¾ÎÄÖ÷ÒªCTK Plugin FrameworkÊÇʲô£¿ËüµÄÌåϵ½á¹¹£¬·þÎñ²ãÒÔ¼°ËüµÄÉúÃüÖÜÆÚµÈµÈÏà¹ØÄÚÈÝ¡£
ÎÄÕÂÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûAnna±à¼ÍƼö¡£ |
|
¡°CTK Plugin Framework ¼¼ÊõÊÇÃæÏò C++ µÄ¶¯Ì¬Ä£ÐÍϵͳ¡£¸ÃϵͳÔÊÐí²å¼þÖ®¼äµÄËÉÉ¢ñîºÏ£¬²¢ÇÒÌṩÁËÉè¼ÆÁ¼ºÃµÄ·½Ê½À´½øÐй¦ÄܺÍÊý¾ÝµÄ½»»¥¡£´ËÍ⣬ËüûÓÐÔ¤ÏȶԲå¼þÊ©¼ÓÏÞÖÆ£¬ÕâÑù¾Í¿ÉÒÔºÜÈÝÒ׵ؽ«²å¼þµÄÏà¹Ø²¿·ÖǶÈëµ½ÏÖÓеŤ¾ß°üÖС£¡±
Ìåϵ¼Ü¹¹
CTK Plugin Framework Éè¼ÆÊܵ½ÁË OSGi£¨Java µÄ¶¯Ì¬×é¼þϵͳ£©µÄ¼«´óÆô·¢£¬²¢ÇÒËüÌṩÁËÒ»ÖÖÄÜÈÃÓ¦ÓóÌÐò£¨¶¯Ì¬µØ£©ÓÉÐí¶à²»Í¬µÄ£¨¿ÉÖØÓã©×é¼þ×é³ÉµÄ¿ª·¢Ä£ÐÍ¡£¸ÃÄ£ÐÍÔÊÐíͨ¹ý·þÎñ½øÐÐͨÐÅ£¬·þÎñÊÇÌØ¶¨ÓÚ×é¼þÖ®¼äµÄ¶ÔÏó¡£
¿ò¼ÜµÄ·Ö²ãÄ£ÐÍ£¬ÈçÏÂͼËùʾ£º

Plugins£¨²å¼þ£©£ºÓÉ¿ª·¢ÈËÔ±´´½¨µÄ CTK ×é¼þ£»
Services Layer£¨·þÎñ²ã£©£ºÍ¨¹ýΪ C++ ¶ÔÏóÌṩһ¸ö publish-find-bind
Ä£ÐÍ£¬ÒÔ¶¯Ì¬·½Ê½Á¬½Ó²å¼þ£»
Life Cycle Layer£¨ÉúÃüÖÜÆÚ²ã£©£ºÓÃÓÚ°²×°¡¢Æô¶¯¡¢Í£Ö¹¡¢¸üкÍÐ¶ÔØ²å¼þµÄ API£»
Security£¨°²È«ÐÔ£©£º´¦Àí°²È«·½Ã棨ĿǰÉв»¿ÉÓã©¡£
²å¼þ
Plugin ÊÇ CTK Plugin Framework µÄºËÐÄ£¬Ä£¿é»¯ÌØÐÔÔÚÕâÒ»²ãµÃµ½Á˺ܺõÄʵÏÖ¡£ÄÇô£¬¾¿¾¹Ê²Ã´ÊÇ
Plugin£¿
Plugin£ºÊÇ»ùÓÚ C++/Qt µÄÒ»¸ö¹²Ïí¿â£¬²¢°üº¬ÁË×ÊÔ´ÎļþºÍÔªÊý¾Ý£¨metadata£©¡£

ÔªÊý¾ÝµÄÄ¿µÄÔÚÓÚ׼ȷÃèÊö Plugin µÄÌØÕ÷£¬³ýÁËÈà CTK Plugin Framework
¶Ô Plugin Êʵ±µØ½øÐи÷ÖÖ´¦Àí£¨ÀýÈ磺ÒÀÀµ½âÎö£©Ö®Í⣬»¹ÄܸüºÃµÄ¶Ô Plugin ½øÐбêʶ£¬ÒÔ°ïÖúÓû§¶Ô
Plugin ½øÐÐÀí½â¡£
ÔªÊý¾Ý±»¶¨ÒåÔÚ MANIFEST.MF ÎļþÖУ¬Ò»¸öµäÐ굀 MANIFEST.MF
ÎļþÈçÏ£º
Plugin-SymbolicName:HelloCTK
Plugin-ActivationPolicy:eager
Plugin-Category:Demos
Plugin-ContactAddress:https://github.com/Waleon
Plugin-Description:A plugin for say hello
Plugin-Name:HelloCTK
Plugin-Vendor:Waleon
Plugin-Version:1.0.0 |
ËäÈ»ÌõÄ¿Öڶ࣬µ«²¢·ÇËùÓеͼÊDZØÐëµÄ¡£ÕâЩԪÊý¾ÝÖ÷Òª°üº¬Á½²¿·Ö£º
Plugin µÄ±êʶ·û£¨±ØÐ룩£ºÎ¨Ò»±êʶһ¸ö Plugin£¬ÓÉ Plugin-SymbolicName
±íʾ¡£
¿É¶ÁµÄÐÅÏ¢£¨¿ÉÑ¡£©£º°ïÖú¸üºÃµØÀí½âºÍʹÓà Plugin£¬²»¶ÔÄ£¿é»¯ÌØÐÔ²úÉúÈκεÄÓ°Ïì¡£
¶ÔÓÚ¿ÉÑ¡ÐÅÏ¢£¨ÀýÈ磺Plugin-Name¡¢Plugin-Vendor µÈ£©£¬CTK Plugin
Framework ÉõÖÁ»áÎÞÊÓÕâЩÄÚÈÝ¡£
·þÎñ²ã
·þÎñ¿ÉÒÔ¿´×÷ÊÇ·þÎñµÄÌṩÕߺÍʹÓÃÕßÖ®¼äµÄÒ»¸öÆõÔ¼£¬Ê¹ÓÃÕßÒ»°ã²»¹ØÐÄÆäʵÏÖµÄϸ½Ú£¬Ö»ÒªÂú×ãÕâ¸öÆõÔ¼£¨·þÎñÓ¦¸ÃÌṩʲô¹¦ÄÜ¡¢Âú×ãʲô¸ñʽ£©¾ÍºÃÁË¡£Ê¹Ó÷þÎñµÄ¹ý³ÌÒ²°üº¬ÁË·¢ÏÖ·þÎñºÍ´ï³ÉÐÒéµÄÐÎʽ£¬Ò²¾ÍÊÇ˵£¬ÐèҪͨ¹ý·þÎñµÄ±êÖ¾ÐÔÌØÕ÷À´ÕÒµ½¶ÔÓ¦µÄ·þÎñ¡£
Ò»¸ö²å¼þ¿ÉÒÔ´´½¨Ò»¸ö¶ÔÏ󣬲¢ÔÚÒ»¸ö»ò¶à¸ö½Ó¿Ú£¨Í¨³£ÊÇÒ»¸öÖ»Óд¿Ðé·½·¨µÄ C++ ÀࣩÏÂʹÓà CTK
Service Registry ×¢²áËü¡£ÆäËû²å¼þ¿ÉÒÔÒªÇó registry ÁгöÔÚÌØ¶¨½Ó¿ÚÏÂ×¢²áµÄËùÓзþÎñ£¨¶ÔÏ󣩡£Ò»¸ö²å¼þÉõÖÁ¿ÉÒԵȴýÒ»¸öÌØ¶¨µÄ·þÎñ³öÏÖ£¬È»ºóÊÕµ½»Ø¸´¡£
Òò´Ë£¬Ò»¸ö²å¼þ¿ÉÒÔ×¢²áÒ»¸ö·þÎñ£¬Ò²¿ÉÒÔ»ñµÃÒ»¸ö·þÎñ²¢ÕìÌý·þÎñµÄ³öÏÖ»òÏûʧ¡£ÈÎÒâÊýÁ¿µÄ²å¼þ¿ÉÒÔÔÚÏàͬµÄ½Ó¿ÚÏÂ×¢²á·þÎñ£¬²¢ÇÒÈÎÒâÊýÁ¿µÄ²å¼þ¶¼¿ÉÒԵõ½ÏàͬµÄ·þÎñ£¬ÈçÏÂͼ£¨publish-find-bind
Ä£ÐÍ£©Ëùʾ£º

Èç¹û¶à¸ö²å¼þÔÚͬһ¸ö½Ó¿ÚÏÂ×¢²á¶ÔÏó£¬Ôò¿ÉÒÔͨ¹ýÆäÊôÐÔ½øÐÐÇø·Ö¡£Ã¿¸ö·þÎñ×¢²á¶¼ÓÐÒ»Ì×±ê×¼µÄ×Ô¶¨ÒåÊôÐÔ£¬¿ÉÒÔʹÓùýÂËÆ÷À´Ñ¡Ôñ¸ÐÐËȤµÄ·þÎñ¡£ÊôÐÔÒ²¿ÉÒÔ±»ÓÃÓÚÓ¦ÓóÌÐò¼¶µÄÆäËû½ÇÉ«¡£
·¢²¼·þÎñ
ΪÁËÈÃÆäËü Plugin ÄÜ·¢ÏÖÕâ¸ö·þÎñ£¬±ØÐëÓÃÉÏÏÂÎÄ¶ÔÆä½øÐÐ×¢²á£¬ÐèÒªÓõ½½Ó¿ÚÃû¡¢·þÎñ¶ÔÏ󣨽ӿڵľßÌåʵÏÖ£©ºÍÒ»¸ö¿ÉÑ¡µÄ
ctkDictionary ÀàÐ͵ÄÊôÐÔÐÅÏ¢£º
ctkDictionary
properties;
properties.insert("name","Waleon");
properties.insert("age",18);
ctkServiceRegistration registration=context->
registerService< HelloService>(new HelloImpl(),properties); |
ÕâÑù£¬±ã¿ÉÒԵõ½Ò»¸ö ctkServiceRegistration
¶ÔÏ󣬿ÉÒÔÓÃÕâ¸ö¶ÔÏóÀ´¸üзþÎñµÄÊôÐÔ£º
registration.setProperties
(newProperties); |
Ò²¿ÉÒÔÖ±½Ó°ÑÕâ¸ö·þÎñÒÆ³ý£º
registration.unregister(); |
×¢Ò⣺Õâ¸ö registration ¶ÔÏó²»ÄÜºÍÆäËû Plugin
¹²Ïí£¬ÒòΪËüºÍ·¢²¼·þÎñµÄ Plugin µÄÉúÃüÖÜÆÚÏ໥ÒÀ´æ¡£Ò²¾ÍÊÇ˵£¬Èç¹ûÕâ¸ö Plugin ÒѾ²»´æÔÚÓÚ¿ò¼ÜÖ´Ðл·¾³ÖУ¬ÄÇôÕâ¸ö¶ÔÏóÒ²²»Ó¦¸Ã´æÔÚÁË¡ª¡ª
¡°Æ¤Ö®²»´æ£¬Ã«½«Ñɸ½¡±¡£
´ËÍ⣬Èç¹ûÔÚɾ³ý·¢²¼µÄ·þÎñ֮ǰ Plugin Í£Ö¹ÁË£¬¿ò¼Ü»á°ïÖúÄãɾ³ýÕâЩ·þÎñ¡£
»ñÈ¡·þÎñ
Ò»µ©·þÎñ±»·¢²¼£¬Ëü½«¶ÔÆäËû Plugin ¿ÉÓ᣻ñÈ¡·þÎñµÄ·½Ê½·Ç³£¼òµ¥£¬Ö»ÐèÒªÌṩһ¸ö½Ó¿ÚÃû¼´¿É£º
ctkServiceReference
reference = context-> getServiceReference <HelloService>(); |
×¢Ò⣺ÕâÀïµÄ reference ÊÇ·þÎñ¶ÔÏóµÄ¼ä½ÓÒýÓ㬿ÉΪʲôҪÓüä½ÓÒýÓöø²»Ö±½Ó·µ»ØÊµ¼ÊµÄ·þÎñ¶ÔÏóÄØ£¿
ʵ¼ÊÉÏ£¬ÕâÊÇΪÁ˽«·þÎñµÄʹÓúͷþÎñµÄʵÏÖ½øÐнâñî¡£½«·þÎñ×¢²á±í×÷ΪÁ½ÕßµÄÖмäÈË£¬²»½öÄܹ»´ïµ½¸ú×ٺͿØÖÆ·þÎñµÄÄ¿µÄ£¬Í¬Ê±»¹¿ÉÒÔÔÚ·þÎñÏûʧÒÔºó֪ͨʹÓÃÕß¡£
Õâ¸ö·½·¨µÄ·µ»ØÀàÐÍÊÇ ctkServiceReference£¬Ëü¿ÉÒÔÔÚ Plugin Ö®¼ä»¥Ïí£¬ÒòΪËüºÍʹÓ÷þÎñµÄ
Plugin µÄÉúÃüÖÜÆÚÎ޹ء£
ÉúÃüÖÜÆÚ²ã
ÉúÃüÖÜÆÚ²ãÖ÷ÒªÓÃÓÚ¿ØÖÆ Plugin µÄ°²×°¡¢Æô¶¯¡¢Í£Ö¹¡¢¸üкÍÐ¶ÔØ£¬Ëü¿ÉÒÔÈÃÎÒÃÇ´ÓÍⲿ¹ÜÀíÓ¦ÓûòÕß½¨Á¢Äܹ»×ÔÎÒ¹ÜÀíµÄÓ¦Ó㨻ò½«Á½ÕßÏà½áºÏ£©£¬²¢ÇÒ¸øÁËÓ¦Óñ¾ÉíºÜ´óµÄ¶¯Ì¬ÐÔ¡£
Ç°ÃæÒѾÁ˽âÁË Plugin µÄ¸ÅÄîºÍ×÷Ó㬵«ÒªÕæÕýʹÓà Plugin£¬ÔòÐèҪʹÓÃÉúÃüÖÜÆÚ²ãµÄ API
À´ºÍ CTK Plugin Framework µÄÉúÃüÖÜÆÚ²ã½øÐн»»¥¡£
ÏÂͼΪ Plugin ÉúÃüÖÜÆÚµÄ״̬ת»»Í¼£º

ÉúÃüÖÜÆÚ²ãµÄ API Ö÷ÒªÓÉÈý¸öºËÐIJ¿·Ö×é³É£ºctkPluginActivator¡¢ctkPluginContext
ºÍ ctkPlugin¡£
ctkPluginActivator
ctkPluginActivator£º×Ô¶¨Òå plugin µÄÆô¶¯ºÍÍ£Ö¹¡£
ctkPluginActivator ÊÇÒ»¸ö½Ó¿Ú£¬±ØÐëÓÉ¿ò¼ÜÖеÄÿ¸ö²å¼þʵÏÖ¡£¿ò¼Ü¿ÉÒÔ¸ù¾ÝÐèÒª´´½¨Ò»¸ö²å¼þµÄ
ctkPluginActivator ʵÀý¡£Èç¹ûÒ»¸öʵÀýµÄ?ctkPluginActivator::start()?·½·¨³É¹¦Ö´ÐУ¬ÔòÐèÒª±£Ö¤ÔÚ²å¼þֹͣʱµ÷ÓÃͬһ¸öʵÀýµÄ?ctkPluginActivator::stop()?·½·¨¡£
ctkPluginContext
ctkPluginContext£ºÒ»¸ö plugin ÔÚ¿ò¼ÜÄÚµÄÖ´ÐÐÉÏÏÂÎÄ£¬¸ÃÉÏÏÂÎÄÓÃÓÚÊÚÓè¶ÔÆäËû·½·¨µÄ·ÃÎÊ£¬ÒÔ±ã¸Ã²å¼þ¿ÉÒÔÓë¿ò¼Ü½»»¥¡£
ctkPluginContext ÌṩµÄ·½·¨ÔÊÐí²å¼þ£º
¶©ÔÄÓÉ¿ò¼Ü·¢²¼µÄʼþ£»
ʹÓà Framework Service Registry ×¢²á·þÎñ¶ÔÏó£»
´Ó Framework Service Registry ¼ìË÷ ServiceReferences£»
ΪÒýÓõķþÎñ»ñÈ¡ºÍ·¢²¼·þÎñ¶ÔÏó£»
ÔÚ¿ò¼ÜÖа²×°ÐµIJå¼þ£»
»ñÈ¡¿ò¼ÜÖа²×°µÄ²å¼þÁÐ±í£»
»ñµÃÒ»¸ö²å¼þµÄ ctkPlugin ¶ÔÏó£»
Ϊ£¨ÓÉ¿ò¼ÜΪ²å¼þÌṩµÄ£©³Ö¾Ã´æ´¢ÇøÓòÖÐΪÎļþ´´½¨ QFile ¶ÔÏó¡£
µ±Ê¹ÓÃ?ctkPluginActivator::start()?·½·¨Æô¶¯Ê±£¬½«´´½¨Ò»¸ö ctkPluginContext
¶ÔÏ󣬲¢½«ÆäÌṩ¸øÓë´ËÉÏÏÂÎĹØÁªµÄ²å¼þ¡£µ±Ê¹ÓÃ?ctkPluginActivator::stop()?·½·¨Í£Ö¹Ê±£¬ÏàͬµÄ
ctkPluginContext ¶ÔÏ󽫱»´«µÝ¸øÓë´ËÉÏÏÂÎĹØÁªµÄ²å¼þ¡£ctkPluginContext
¶ÔÏóͨ³£ÓÃÓÚÆä¹ØÁª²å¼þµÄ˽ÓÐÓÃ;£¬²¢²»Òâζ×ÅÓë²å¼þ»·¾³ÖÐµÄÆäËû²å¼þ¹²Ïí¡£
Óë ctkPluginContext ¶ÔÏó¹ØÁªµÄ ctkPlugin ¶ÔÏó³ÆÎªÉÏÏÂÎIJå¼þ¡£
ctkPluginContext ¶ÔÏóÖ»ÓÐÔÚËüµÄÉÏÏÂÎIJå¼þÖ´ÐÐʱ²ÅÓÐЧ£»Ò²¾ÍÊÇ˵£¬ÔÚÉÏÏÂÎIJå¼þ´¦ÓÚ
STARTING¡¢STOPPING¡¢ºÍ ACTIVE ״̬µÄʱ¶ÎÄÚ¡£Èç¹ûËæºóʹÓà ctkPluginContext
¶ÔÏó£¬Ôò±ØÐëÅ׳öÒ»¸ö ctkIllegalStateException Òì³£¡£µ±ÉÏÏÂÎIJå¼þÍ£Ö¹ºó£¬ctkPluginContext
¶ÔÏó²»Äܱ»ÖØÓá£
Framework ÊÇΨһÄܹ»´´½¨ ctkPluginContext ¶ÔÏóµÄʵÌ壬²¢ÇÒÕâЩ¶ÔÏó½öÔÚ´´½¨ËüÃǵÄ
Framework ÖÐÓÐЧ¡£
ctkPlugin
ctkPlugin£ºFramework ÖÐÒѰ²×°µÄ²å¼þ¡£
ctkPlugin ¶ÔÏóÊǶ¨ÒåÒ»¸öÒѰ²×°²å¼þµÄÉúÃüÖÜÆÚµÄ·ÃÎʵ㣬ÔÚ²å¼þ»·¾³Öа²×°µÄÿ¸ö²å¼þ¶¼±ØÐëÓÐÒ»¸öÏà¹ØµÄ
ctkPlugin ¶ÔÏó¡£´ËÍ⣬²å¼þ±ØÐëÓÐÒ»¸öΨһµÄ±êʶ£¬ÔÚ²å¼þµÄÉúÃüÖÜÆÚÖУ¬Õâ¸ö±êʶ²»Äܸı䣨¼´Ê¹ÊÇÔÚ²å¼þ¸üÐÂʱ£©£¬Ð¶ÔغÍÖØÐ°²×°²å¼þ±ØÐë´´½¨Ò»¸öеÄΨһ±êʶ¡£
²å¼þÓÐÒÔÏÂ״̬£¨×´Ì¬ÊǶ¯Ì¬¿É±äµÄ£¬ÕâЩ״̬ÔÚÌØ¶¨Ìõ¼þÏ¿ÉÒÔ»¥Ïàת»»£¬¼ûÉÏͼ£©£º
UNINSTALLED
INSTALLED
RESOLVED
STARTING
STOPPING
ACTIVE
Ҫȷ¶¨²å¼þÊÇ·ñ´¦ÓÚÓÐЧ״̬֮һ£¬¿ÉÒÔʹÓà States ÀàÐͽøÐС°»ò¡±ÔËËã¡£
²å¼þÖ»ÄÜÔÚ״̬Ϊ STARTING¡¢ACTIVE »ò STOPPING ״̬ʱִÐдúÂë¡£Ò»¸ö UNINSTALLED
²å¼þ²»Äܱ»ÉèÖÃΪÁíÒ»¸ö״̬£¬ËüÊÇÒ»¸ö¡°½©Ê¬¡±¡£
Framework ÊÇΨһÔÊÐí´´½¨ ctkPlugin ¶ÔÏóµÄʵÌ壬²¢ÇÒÕâЩ¶ÔÏó½öÔÚ´´½¨ËüÃÇµÄ Framework?ÄÚÓÐЧ¡£
|