破门点滴(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 破门 阅读(407) 评论(0)  编辑  收藏 所属分类: Triones

只有注册用户登录后才能发表评论。


网站导航: