完成通過測(cè)試程序調(diào)用
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、?
平臺(tái)啟動(dòng)就自動(dòng)調(diào)用了
Triones
核心產(chǎn)品
org.softme.triones.runtime.framework
。部分輸出如下:
Time to load bundles: 10
Starting application: 921
------------------------------------
Triones Framework: Started!
Triones Framework: Hello!
Triones Framework: Stoped!
------------------------------------
?
3、?
EclipseStarter
設(shè)計(jì)為應(yīng)用運(yùn)行完畢就自動(dòng)調(diào)用
shutdown
使得平臺(tái)退出,
Triones
框架需要等待
ServletContext
的
Destroyed
事件,因此必須對(duì)此進(jìn)行處理:
方案一:
創(chuàng)建
Triones
系統(tǒng)任務(wù),并將其掛起直到獲得
ContextDestroyed
事件。
方案二:
擴(kuò)展
EclipseStarter
修改運(yùn)行程序,不自動(dòng)調(diào)用
shutdown
;等待
ContextDestroyed
事件由
TrionesContextListener
顯式調(diào)用
shutdown
方法。
?
研究了一下午,方案一似乎不太合理,掛起的系統(tǒng)進(jìn)程??郁悶中
…..
。
?
考慮方案二
….
以上,實(shí)現(xiàn)方案二:
通過反射直接調(diào)用
EclipseStarter
的
startup(String[], Runable)
和
run(Object)
方法以啟動(dòng)平臺(tái)并保留在內(nèi)存;關(guān)閉平臺(tái)時(shí)調(diào)用
EclipseStarter
的
shutdown()
方法。
?
問題:
如何保留進(jìn)程,如何與
Context
環(huán)境交互?
總不能全部使用反射吧?
方案:
通過反射取到
TrionesFramework
對(duì)象。
步驟一:
對(duì)
Triones Runtime
采取
分離接口模式
步驟二:
修改
launcher.EclipseLanucher
對(duì)象,通過反射獲取
TrionesFramework
。
1)?????
需要通過
URLClassLoader
加載
Triones Runtime
插件;
2)?????
需要修改
DevPath
,增加
Triones Runtime
的插件路徑。
3)?????
增加接口,取得
TrionesFramework
對(duì)象。
?
實(shí)現(xiàn)了對(duì)
TrionesStarter
的反射調(diào)用啟動(dòng)和關(guān)閉
Eclipse
平臺(tái),但是
對(duì)
getFramework
方法調(diào)用失敗!!!!!
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
?
看來設(shè)計(jì)架構(gòu)上還是出了問題,檢查一下
URLClassLoader
的文檔:
StartupClassLoader
僅僅包含啟動(dòng)包的類路徑,而
Triones
必須將所有類路徑加載到
context
中,才能夠?qū)崿F(xiàn)
Context
(
Servlet
)與框架的交互。
以上方案失敗!!
? Sign….. : (




):
?
改進(jìn)方案,設(shè)法使得
OSGi
類路徑加載到
Context
路徑中!
(
雖然難度大了點(diǎn),但是必須解決
)
。
不得窺道門,不得悟佛門,不得入窄門,實(shí)乃破門。