问题标签 [pax-web]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
pax - Pax Web Whiteboard ResourceMapping 的路径可以指向捆绑包之外吗?
我尝试将以下内容注册ResourceMapping
为 OSGi 服务:
但在浏览器下看不到结果http://127.0.0.1:8282/resources/aFileUnderMyPath
。我可以看到 Pax Web 正在日志中访问我的映射。这是可能的还是我需要编写一个servlet?
jetty - 如何让 Karaf 中的 Jetty 从文件系统中提供静态内容?
我需要从 Karaf 的捆绑包之外提供静态内容。由于它已经内置了 Pax Web 和 Jetty,我认为这不是问题,但到目前为止还没有成功:(
我已安装jetty
、http
和功能。在http://team.ops4j.org/wiki/display/paxweb/Advanced+Jetty+Configuration之后,我将其添加到:http-whiteboard
war
etc/jetty.xml
完整的文件是:
并使用以下内容创建了文件org.ops4j.pax.web.cfg
:
在我看到的日志中
但文件不可见。例如,我有一个文件,/home/aromanov/workspaces/odp-server/ru.focusmedia.odp.server.poim.resources-rodniki/.style
但是会出现404 错误。http://192.168.1.9:8080/app/.style
http://192.168.1.9:8282/app/.style
java - 使用声明式服务的 OSGi+Pax-Web 中的 GWT 问题
我正在迁移在 OSGi (Equinox) 和 Pax-web 上运行的现有 GWT 应用程序,以使用声明式服务而不是程序化服务跟踪器。
我在 Equinox 中使用 Pax-Web。PAX-WEB War 扩展器可以毫无问题地加载基于 WAR 的 GWT 应用程序,但在这种操作方式中您不能拥有声明式服务。
我成功地从战争中重构了所有 servlet,并将它们转换为声明性 OSGi 服务 ( <provide interface="javax.servlet.Servlet"/>
)。这样我就摆脱了 servlet 中所有凌乱的 ServiceTracker 代码和特定的 OSGi 依赖项。我进一步复制了所有其他 web.xml 功能,以使用[1]上的信息注册过滤器、提供静态内容和欢迎页面
此时,它通常应该可以工作,但我遇到了 PAX-WEB 和 GWT 尝试加载其资源的方式的问题:
在加载序列化描述符时,GWT 从本地上下文加载序列化策略文件。在我的例子中,它尝试解析这样的资源:/ctx/ctx/62394587E47773FB1594FF.gwt.rpc 此资源由 GWT 编译器创建并放置在:/war/ctx/ctx/resource...
以前,使用标准 wab 映射 ( Webapp-Context: /ctx, Webapp-Root: /war
) gwt 会正确找到它的资源。现在我正在使用程序化资源映射:
GWT 无法加载资源并产生以下错误:
[注意最后一句应该是“你会因此而遇到大量的序列化问题”]
我已经跟踪到 HttpServiceContext 加载资源并将路径解释为文件而不是相对于编程 Web 上下文的 url 的问题:
这显然失败了,因为此资源位于捆绑文件系统中的 /war/ctx/ctx/ 下。这似乎与错误 PAXWEB-314 [2] 有关,其实现是将相对路径转换为文件路径:
有没有办法解决这个问题?有人使用 GWT 和 PAX-WEB 使用 OSGi DS 而不是 WAB?一种可能的方法是将 GWT 编译器生成的 /war/ctx 复制回 /ctx,但我想在进入 hack 方向之前找到一个不错的解决方案。
有任何想法吗?
1 - https://github.com/ops4j/org.ops4j.pax.web/blob/master/samples/whiteboard/src/main/java/org/ops4j/pax/web/extender/samples/whiteboard/internal/ Activator.java [2] - http://team.ops4j.org/browse/PAXWEB-314
caching - 为 OSGi 环境中提供的静态资源设置自定义响应标头
我们试图解决的任务是使用HttpService.registerResources()方法Cache-Control
为在 OSGi 环境中公开的静态资源(例如)设置自定义响应标头。
考虑到以下细节,实现这一目标的最佳方式是什么:
- 基于“资源”服务集可能有大量资源注册。这些 OSGi 服务提供有关它们所在的静态资源路径和捆绑包的信息。我们预计的资源路径注册量在 50 到 200 之间。
- 实现应该是 OSGi 友好的。Pax Web 扩展的使用是可以接受的。
- 实现应该与 Web 服务器无关(例如,没有关于 Jetty 的直接知识)。
我们想到的解决方案是:
在HttpContext.handleSecurity中设置响应头
- 这种方法的缺点是处理安全的方法还将负责与安全无关的逻辑。
registerResource()
使用与资源 URI 相同的 URI为每个调用注册过滤器。过滤器将是设置响应标头的响应。- 这种方法的缺点是可能有太多的过滤器用于相同的目的。但到目前为止,这似乎是最简单的解决方案。
如果请求 URI 对应于已知资源 URI 路径,则在根路径上注册一个过滤器并将其配置为设置响应标头。
- 这种方法的缺点是必须对过滤器进行教育以了解资源路径,这意味着实现更复杂一些。
我们渴望听到有关建议解决方案的意见并了解其他替代方案。
java - NCSA 请求处理程序在 pax-web 1.1.4 中不起作用
我尝试在 pax-web 1.1.4 中启用 NCSA 请求日志记录。推荐的方法不起作用。该文件已创建,但它保持为空。查看源代码,我发现 Jetty 服务器的 pax Web 实现将请求传递给 JettyServerHandlerCollection,它假定每个处理程序都应该对应一个上下文。所以我看起来不可能只使用 org.ops4j.pax.web.log.ncsa.* 选项。
我是否遗漏了什么或此功能在 pax web 中不起作用?有什么解决方法吗?
jetty - jetty osgi:使用一个 securityHandler 保护所有 servlet
我正在使用码头作为与 paxweb 的 osgi 捆绑包。我想确保通过 OSGI HttpService 注册的所有 servlet 和资源都由一个通用的 SecurityHandler 保护(此外,我想使用 JAASLoginService)。我还想将所有未经身份验证的请求重定向到单个登录页面。
是否可以配置此场景?
java - 如何从 Pax Web 部署的 Web 包访问(蓝图)OSGi 服务?
我目前正在使用 Pax Web 部署 OSGi Web 应用程序包。从这个 Web 包中,我需要访问一组 OSGi 服务。在系统的其余部分,我使用蓝图来创建和使用服务。这很棒,因为它提供了代理、阻尼等。
从 Pax Web 部署的 Web 应用程序包中,访问这些 OSGi 服务的最佳方式是什么?
我的想法是
1)通过osgi-bundlecontext属性从ServletContext中获取BundleContext,然后使用OSGi ServiceTracker类。
2) 在 Web 包中创建一个蓝图上下文文件,其中包含对我需要的服务的引用。Blueprint 上下文由 Blueprint 扩展程序在 OSGi 服务注册表中注册,我可以从中检索它,然后按 id 查找 bean。
3) 使用 Springs ContextLoaderListener 之类的东西在 web.xml 文件中创建蓝图上下文。
选项 1 很好,但意味着我必须跟踪服务并且无法获得蓝图的任何好处。
选项 2 也可以正常工作,只是遇到时间问题。实际上,现在有两个服务正在部署应用程序 - 使用 web.xml 文件部署的 Pax Web 扩展器和部署蓝图上下文文件的(在我的例子中是 Gemini)蓝图扩展器。在启动时,这些扩展程序会同时部署,并且当 Pax Web 扩展程序实例化任何 servlet 上下文侦听器时,无法保证应用程序上下文在 OSGi 服务注册表中可用。这意味着不能从上下文侦听器代码调用 OSGi 服务。
选项 3 - 不太确定是否可以这样做。看起来 Spring DM 曾经使用过这种方法?
我觉得我一定遗漏了一些东西 - 有没有一种简单的方法可以从 Pax Web 部署的 Web 包中使用蓝图?
osgi - 在 Felix servletbridge 战争中添加 OSGi 片段包
我正在尝试创建战争托管 OSGi 包。完整的配置应该能够托管 WAB 包,现在我尝试为此进行集成pax-web-extender-war
。它需要一些依赖项,例如slf4j-api
andslf4j-log4j12
问题是:我总是遇到这个异常:
因为slf4j-log4j12
真的是一个片段包。我认为菲利克斯应该解决这个问题,但事实并非如此。所以我尝试将这个 jar 移动到,WEB-INF/lib
但随后由于 osgi 无法将其解析为捆绑包而导致接线失败。
所以,
- 我应该把片段包放在哪里?
- 它应该以某种方式配置吗
framework.properties
? - Apache Felix 甚至能够处理片段包吗?
以下是战争的当前布局(请注意,它基于 felix http 桥示例):
java - 在 OSGi Felix 中使用 pax-web 提供静态资源
我被一些应该非常简单的东西难住了。我正在使用 pax-web-jetty-bundle 3.0.0 并注册以下内容:
/tmp/static/somefile.txt
然而,我在访问时看不到http://localhost:8080/somefile.txt
(我得到一个 404 未找到)。
当然,这只是基本示例。registerResources
通话顺利结束(我已经调试过了),但根本没有提供资源。
我还尝试了一个更复杂的示例,HttpContext
但没有成功:甚至没有调用 getResources 方法。
我还有其他使用 null httpcontextx 注册的 servlet。知道这里可能有什么问题吗?谢谢!
java - 在“错误的”OSGi HttpService 上注册的 Servlet
基于嵌入HttpService
在. _OSGi
Apache Karaf
Tomcat
我们应用程序的某些部分是非OSGi
基于的,直接通过我们的代码响应请求WAR
,而某些部分通过Felix Servlet Bridge
调用Felix
OSGi
容器中的 servlet 来响应请求。我们也在使用Felix
's whiteboard bundle 来实现 servlet 的自动注册。
我们也在使用 中的ActiveMQ
功能Karaf
,它包含Pax Web
在它的控制台中。结果是我们最终得到一个HttpService
来自 的Felix Servlet Bridge
,它与嵌入应用程序服务器集成,另一个HttpService
来自,它在不同的端口上Pax Web
运行它自己的服务器。Jetty
所以,问题是一些初创公司的白板包连接到了Pax Web HttpService
,因此将我们的 servlet 暴露在错误的位置。我们还没有找到一种方法来配置白板包以某种方式请求所需的HttpService
from Servlet Bridge
,并且由于所有涉及的包都是第三方的东西,我们也希望避免更改它们的Java
代码......
解决这个问题的最佳方法是什么?
(为了可维护性,我们更喜欢配置而不是代码,并且我们希望将ActiveMQ
控制台保持在自己的端口上)