Live a simple life

          沉默(zhu_xing@live.cn)
          隨筆 - 48, 文章 - 0, 評論 - 132, 引用 - 0
          數據加載中……

          【原創】Eclipse插件開發:用戶自定義插件會在Eclipse實例運行期間被stop嗎?

                  還記得剛接觸插件開發不久的時候,加上看了點OSGI協議(其實,當時根本看不懂~_~),留下了如下的錯覺:
              1、我的插件在不用的時候會被自動stop的。例如我的插件主要貢獻了一個自定義的編輯器,如果用戶把我提供的編輯器都關閉了,我的插件會馬上被自動stop掉;用戶過會再打開的時候,我的插件會再啟動回來
              2、基于以上觀點,我的資源釋放就放在我的Plugin.stop中,反正會馬上被釋放(不管eclipse實例--osgi framework--是否退出)
              3、...
              
                  想想當初,當時是把OSGI協議中的bundle生命周期管理想象的過于神話了??赡苁遣幌胼p易放棄自己的觀點,所以后來特意又仔細看了兩次OSGI協議,里面確實講了Bundle會被stop,而且如果stop的過程中發生異常,osgi framework會怎樣處理云云......但是,翻了幾遍也只發現了默認兩種情況下Bunlde會被stop:
              1、OSGI framework退出的時候。映射到Eclipse插件開發場景下,也就是說當Eclipse實例退出的時候,我們的Plugin肯定會被stop
              2、在支持osgi控制臺的協議實現中,用戶可以通過_stop來強制stop一個bundle。(這種情況,在Eclipse插件開發的場景下,就不討論了)

                  難道讓我自己去判斷我的插件是否被使用了,然后自己stop自己???

                  看來有點心灰意冷了,自己想要的那種自己的Eclipse插件會在不用的時候馬上stop,用的時候再馬上start的效果(注明:在osgi framework即Eclipse實例一直運行的情況下)是不存在的。于是,有點不相信協議了,就直接去翻了一下Eclipse對osgi的實現代碼,發現Bundle.stop被調用的地方非常少,總結一下基本上兩種情況:
                  1、osgi framework在用,在framework退出的時候,stop掉俺的插件
                  2、FrameworkCommandProvider在用,那不用說了,就是osgi控制臺命令行在使用了

                 Eclipse,難道你即時動態地判斷一下俺的插件是否可以被stop就這么難嗎?
                 確實很難,關于這個問題過兩天閑下來會寫個豆腐塊文章來大膽地揣測一下(這可能涉及到了osgi對狀態支持等...)

                   說到這邊,有人可能會問了?為什么不在程序里面強制調用Bundle.stop來stop掉自己想stop的插件呢?
                 關于這個問題的原因也挺復雜的,插件的上下文環境、目標插件所處的位置......總之,如果不是osgi那塊的高手,在做Eclipse插件開發的過程中,最好不要這么做?。。?/span>

                 現在,我們基本可以瞑目了,對一般Eclipse插件開發者,請記住如下可能看起來不是太嚴謹的結論吧:
                的確,你的插件會被lazy start,但是一旦start了,就等到Eclipse實例退出的時候stop吧。

                再想想以前犯的錯誤:把心想馬上釋放的資源直接丟到了Bundle.stop中。那知道,直到Eclipse實例退出的時候,它才被執行啊....


          本博客中的所有文章、隨筆除了標題中含有引用或者轉載字樣的,其他均為原創。轉載請注明出處,謝謝!

          posted on 2008-08-05 10:56 zhuxing 閱讀(1762) 評論(2)  編輯  收藏 所屬分類: Eclipse Plug-in & OSGI

          評論

          # re: 【原創】Eclipse插件開發:用戶自定義插件會在Eclipse實例運行期間被stop嗎?  回復  更多評論   

          呵呵 看了你的文章 讓我感覺 OSGI 不過又是某些人炒作的新概念 或者說 尚未完善 這兩年好像計算機軟件技術發展遇到瓶頸了 能看到的都是炒作概念 把幾個老技術組合一下就開始大吹

          概念總是很高深 開發過程就是手工寫啊寫啊 寫XML 這點 需要好好學習微軟的用戶友好技術
          2008-08-06 08:20 | BeanSoft

          # re: 【原創】Eclipse插件開發:用戶自定義插件會在Eclipse實例運行期間被stop嗎?  回復  更多評論   

          @BeanSoft
          "OSGI 不過又是某些人炒作的新概念 或者說 尚未完善"

          不能說單純的炒作新概念了,畢竟是一種不錯的組件化開發理論

          尚未完善是真的。包括OSGI到底適應于那些場景等等,現在也都是人云亦云
          2008-08-06 09:19 | zhuxing
          主站蜘蛛池模板: 天门市| 固原市| 工布江达县| 大竹县| 毕节市| 烟台市| 当雄县| 法库县| 阳谷县| 武乡县| 五河县| 鄂尔多斯市| 兴山县| 义乌市| 锡林浩特市| 宜昌市| 来安县| 河曲县| 五家渠市| 白银市| 略阳县| 眉山市| 灌南县| 柏乡县| 万年县| 峨边| 濉溪县| 南木林县| 蒙城县| 揭东县| 鄂伦春自治旗| 久治县| 逊克县| 新干县| 江永县| 娄底市| 泸水县| 五家渠市| 长治县| 芜湖市| 湘潭市|