问题标签 [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-whiteboardwaretc/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/.stylehttp://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-apiandslf4j-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在. _OSGiApache KarafTomcat
我们应用程序的某些部分是非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 暴露在错误的位置。我们还没有找到一种方法来配置白板包以某种方式请求所需的HttpServicefrom Servlet Bridge,并且由于所有涉及的包都是第三方的东西,我们也希望避免更改它们的Java代码......
解决这个问题的最佳方法是什么?
(为了可维护性,我们更喜欢配置而不是代码,并且我们希望将ActiveMQ控制台保持在自己的端口上)