【发布时间】:2017-12-27 15:14:03
【问题描述】:
当多个包使用相同的 ServletContextHelper 时,我需要一些与 Http Whiteboard 规范相关的 ServletContextHelper 行为的精确度
规范说:
Http Whiteboard 实现必须创建一个单独的 每个 ServletContextHelper 服务的 ServletContext 实例。 白板服务可以与 Servlet 上下文助手相关联 通过使用 osgi.http.whiteboard.context.select 属性。如果这 未设置属性,使用默认的 Servlet 上下文助手。
如果我理解正确,所有使用相同 ServletContextHelper 引用的 Servlet 或过滤器都绑定到相同的“ServletContext”
然后:
可以实现 ServletContextHelper 的一些实现 使用服务工厂,例如从 关联的捆绑包,就像默认实现一样。因此 白板实现必须使用 Servlet Context Helper 注册白板的包的包上下文 服务。
所以如果一个bundle A用ServletContextHelper X注册了一个Servlet,而bundle B用同样的ServletContextHelper引用注册了一个Filter,那么Servlet和Filter注册到同一个ServletContext,但是它们的init方法被两个调用ServletContext 的不同实例(以不同方式实现 getClassLoader() 方法)?
此外,“默认” ServletContextHelper 的行为是什么?是否总是有一个“默认”的 ServletContextHelper 注册?它是在捆绑包之间共享还是捆绑包只有一个实例?
【问题讨论】:
标签: osgi pax-web osgi-http-service