破門點滴(Java技術版)

          在日常學習和工作中記錄

            BlogJava :: 首頁 ::  :: 聚合  :: 管理
            15 Posts :: 7 Stories :: 36 Comments :: 0 Trackbacks
           

          完成通過測試程序調用 Triones Framework Runtime 插件的工作:

          1、? 只需要利用 Eclipse 的核心插件包。

          org.eclipse.core.runtime???????? // Eclipse Plugin Runtime

          org.eclipse.osgi??????????????????????????? // Eclipse OSGi Implemention

          org.eclipse.update????????????????? // Eclipse Plugin Loader/Updater

          2、? 平臺啟動就自動調用了 Triones 核心產品 org.softme.triones.runtime.framework 。部分輸出如下:

          Time to load bundles: 10

          Starting application: 921

          ------------------------------------

          Triones Framework: Started!

          Triones Framework: Hello!

          Triones Framework: Stoped!

          ------------------------------------

          ?

          3、? EclipseStarter 設計為應用運行完畢就自動調用 shutdown 使得平臺退出, Triones 框架需要等待 ServletContext Destroyed 事件,因此必須對此進行處理:

          方案一: 創建 Triones 系統任務,并將其掛起直到獲得 ContextDestroyed 事件。

          方案二: 擴展 EclipseStarter 修改運行程序,不自動調用 shutdown ;等待 ContextDestroyed 事件由 TrionesContextListener 顯式調用 shutdown 方法。

          ?

          研究了一下午,方案一似乎不太合理,掛起的系統進程??郁悶中 …..

          ?

          考慮方案二 ….


          以上,實現方案二:

          通過反射直接調用 EclipseStarter startup(String[], Runable) run(Object) 方法以啟動平臺并保留在內存;關閉平臺時調用 EclipseStarter shutdown() 方法。

          ?

          問題: 如何保留進程,如何與 Context 環境交互?

          總不能全部使用反射吧?

          方案: 通過反射取到 TrionesFramework 對象。

          步驟一: Triones Runtime 采取 分離接口模式

          步驟二: 修改 launcher.EclipseLanucher 對象,通過反射獲取 TrionesFramework

          1)????? 需要通過 URLClassLoader 加載 Triones Runtime 插件;

          2)????? 需要修改 DevPath ,增加 Triones Runtime 的插件路徑。

          3)????? 增加接口,取得 TrionesFramework 對象。

          ?

          實現了對 TrionesStarter 的反射調用啟動和關閉 Eclipse 平臺,但是 getFramework 方法調用失敗!!!!!

          Get the Triones framework....

          java.lang.reflect.InvocationTargetException

          ???????? at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

          ???????? at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

          ???????? at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

          ???????? at java.lang.reflect.Method.invoke(Unknown Source)

          ???????? at org.softme.triones.launcher.TrionesEclipseLauncher.getFramework(TrionesEclipseLauncher.java:815)

          ??

          Caused by: java.lang.NoClassDefFoundError: org/eclipse/core/runtime/Platform

          ???????? at org.softme.triones.runtime.TrionesFramework.<init>(TrionesFramework.java:55)

          ???????? at org.softme.triones.runtime.TrionesStarter.getFramework(TrionesStarter.java:52)

          ???????? ... 22 more

          ?

          看來設計架構上還是出了問題,檢查一下 URLClassLoader 的文檔:

          StartupClassLoader 僅僅包含啟動包的類路徑,而 Triones 必須將所有類路徑加載到 context 中,才能夠實現 Context Servlet )與框架的交互。

          以上方案失敗!! ? Sign….. : ( ):

          ?

          改進方案,設法使得 OSGi 類路徑加載到 Context 路徑中!

          ( 雖然難度大了點,但是必須解決 )


          不得窺道門,不得悟佛門,不得入窄門,實乃破門。
          posted on 2006-03-27 10:20 破門 閱讀(427) 評論(0)  編輯  收藏 所屬分類: Triones
          主站蜘蛛池模板: 建昌县| 如东县| 禹州市| 酉阳| 延川县| 丹江口市| 新邵县| 游戏| 壶关县| 射阳县| 武宣县| 武陟县| 弋阳县| 晋江市| 东丰县| 贵德县| 三亚市| 兖州市| 韶山市| 五常市| 怀安县| 教育| 广河县| 曲阜市| 综艺| 恩施市| 蓝田县| 吉水县| 久治县| 宜黄县| 屏山县| 右玉县| 兴城市| 庆云县| 清涧县| 马关县| 聂荣县| 晴隆县| 上思县| 全州县| 郸城县|