Tuscany Home
 

在equinox之上初始化struts 1环境

From Tuscany中文社区

Jump to: navigation, search

这几天我在eclipse上操作了一下struts1的使用,现在向大家汇报一下(我使用的是eclipse3.3)。取得了一些成绩,也发现了一些问题。

[编辑] 动态发布struts资源

目前,并没有一个成型的struts的extension point,equinox提供的参考做法是通过equinox的java api在用户的activator类里面动态发布struts的ActionServlet。

  • 第一步就是创建一个plugin项目,然后在自己的Activator里面添加动态发布代码

Image:struts001.png

上面这个类图中,包test1229是我的plugin使用的类,其中MyActivator是这个plugin的Activator,它的start方法中,增加了这些代码,请参考cvs服务器上的

src/osgi-integate/java/test1229/Activator.java

我同时还需要创建一个org.osgi.util.ServiceTracker的一个子类,并重载其addingService方法。

org.apache.struts.action.ActionServlet的初始化是通过一个“适配器”完成的,equinox提供了这个适配器(图中ContextPathServletAdaptor),但是只有cvs代码可供下载(没有现成的bundle),所以我还创建了另一个plugin(下载的代码结构可以直接在eclipse做import)。

  cvs命令行:cvs -d :pserver:anonymous@dev.eclipse.org/cvsroot/eclipse co equinox-incubator/org.eclipse.equinox.http.helper

动态发布代码使用了两次这个适配器,一次是发布org.eclipse.equinox.jsp.jasper.JspServlet(这样,jsp编译器就被映射到*.jsp上);第二次就是发布org.apache.struts.action.ActionServlet。

运行这段代码需要做不少配置工作。详述如下:

[编辑] 运行动态发布代码

以下是我的运行环境中所必需的bundle的列表:

(序号)id State Bundle

  1. 0 ACTIVE org.eclipse.osgi_3.3.1.R33x_v20070828
  2. 50 ACTIVE org.eclipse.osgi.services_3.1.200.v20070605
  3. 55 ACTIVE org.apache.commons.logging_1.0.4.v200706111724
  4. 73 ACTIVE org.eclipse.osgi.util_3.1.200.v20070605
  5. 328 ACTIVE org.eclipse.equinox.registry_3.3.1.R33x_v20070802
  6. 329 ACTIVE org.eclipse.equinox.jsp.jasper.registry_1.0.0.v20070607
  7. 330 ACTIVE org.eclipse.equinox.http.registry_1.0.0.v20070608
  8. 331 ACTIVE org.eclipse.equinox.http.servlet_1.0.1.R33x_v20070816
  9. 332 ACTIVE org.apache.commons.el_1.0.0.v200706111724
  10. 333 ACTIVE org.eclipse.equinox.jsp.jasper_1.0.1.R33x_v20070816
  11. 334 ACTIVE javax.servlet.jsp_2.0.0.v200706191603
  12. 335 ACTIVE javax.servlet_2.4.0.v200706111738
  13. 337 ACTIVE org.eclipse.equinox.common_3.3.0.v20070426
  14. 341 ACTIVE org.springframework.osgi.commons-collections.osgi_3.2.0.SNAPSHOT
  15. 343 ACTIVE org.springframework.osgi.commons-beanutils.osgi_1.7.0.SNAPSHOT
  16. 344 ACTIVE commons.fileupload_1.0.0
  17. 347 ACTIVE org.mortbay.jetty_5.1.11.v200706111724
  18. 349 ACTIVE org.eclipse.equinox.http.jetty_1.0.1.R33x_v20070816
  19. 358 ACTIVE test1229_1.0.0
  20. 360 ACTIVE org.springframework.osgi.struts.osgi_1.2.9.SNAPSHOT
  21. 361 ACTIVE commons.digester_1.0.0
  22. 363 ACTIVE commons.validator_1.0.0
  23. 364 ACTIVE org.eclipse.equinox.http.helper_1.0.0
  24. 365 ACTIVE org.apache.jasper_5.5.17.v200706111724

其中test1229_1.0.0是我自己创建的,其中有本文所介绍的动态struts发布代码,而org.eclipse.equinox.http.helper_1.0.0也是我创建的plugin,但是里面的代码是从equinox-incubator下载的那个适配器的代码。 列表中,org.springframework.osgi.struts.osgi是从spring的网站上下载的,其实它只是在struts1.2.9的jar里面修改了META-INF/MANIFEST.MF的内容,增加了bundle的属性,如import-package和export-package等。 org.springframework.osgi.commons-collections.osgi org.springframework.osgi.commons-beanutils.osgi也是从spring的网站上下载的,其内容和*struts*是一样的。

而commons-digester、commons-validator、commons-fileupload也是启动struts环境所必须的,但是并没有相关的下载。我们只需要将原来的jar文件打开,修改一下META-INF/MANIFEST.MF,增加bundle属性,就OK了。

在我们成功运行这段代码之前,一定会遇到大量的ClassNotFound异常,我们需要注意修改META-INF/MANIFEST.MF文件的Import-package:段落,将找不到的包增加进去。


Personal tools