在OSGi中,不能的bundle分属不同的装载器(Class Loader), 在J2EE 应用中,不同BUNDLE 中的JSP 所对应的ServletContext对象不同,这与通常情况下的应用是不一样的。
一个例子如下,分别访问bundle a和bundle b, 打印出访问时的ServletContext 属性参数(attributes):
Bundle a:
[2014-07-22 11:08:21,335] SG-UAP : INFO Config:331 - ---------------------------------------------------------
[2014-07-22 11:08:21,336] SG-UAP : INFO Config:336 - javax.servlet.context.tempdir=D:\NR\workpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\mx_test\proxytemp\hc_20238918
[2014-07-22 11:08:21,336] SG-UAP : INFO Config:336 - __CONFIG_GLOBAL_CONFIG__={UPLOADMODE=file, THEMEPATH=~/mx/resources/themes, DEBUGMODE=true, COMPRESSMODE=false, THEME=aero,ERRORTYPE=friendly, actionScope=GLOBAL, ENABLE_WEBLET_I18N=true, UPLOAD_LIMIT_TYPES=exe,bat}
[2014-07-22 11:08:21,343] SG-UAP : INFO Config:338 - ---------------------------------------------------------
Bundle b:
[2014-07-22 11:09:27,681] SG-UAP : INFO Config:142 - ---------------------------------------------------------
[2014-07-22 11:09:27,682] SG-UAP : INFO Config:147 - javax.servlet.context.tempdir=D:\NR\workpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\mx_test\proxytemp\hc_6240380
[2014-07-22 11:09:27,682] SG-UAP : INFO Config:147 - org.apache.jasper.runtime.JspApplicationContextImpl=org.apache.jasper.runtime.JspApplicationContextImpl@5e8368
[2014-07-22 11:09:27,683] SG-UAP : INFO Config:149 - ---------------------------------------------------------
可以看到,两个bundle中的ServletContext内容不一样,servlet context临时目录也不一样。
原Application级的变量读、存储可使用静态类实现。