问题标签 [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.

0 投票
1 回答
332 浏览

pax - Pax Web Whiteboard ResourceMapping 的路径可以指向捆绑包之外吗?

我尝试将以下内容注册ResourceMapping为 OSGi 服务:

但在浏览器下看不到结果http://127.0.0.1:8282/resources/aFileUnderMyPath。我可以看到 Pax Web 正在日志中访问我的映射。这是可能的还是我需要编写一个servlet?

0 投票
1 回答
4846 浏览

jetty - 如何让 Karaf 中的 Jetty 从文件系统中提供静态内容?

我需要从 Karaf 的捆绑包之外提供静态内容。由于它已经内置了 Pax Web 和 Jetty,我认为这不是问题,但到目前为止还没有成功:(

我已安装jettyhttp和功能。在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

0 投票
1 回答
568 浏览

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

0 投票
1 回答
802 浏览

caching - 为 OSGi 环境中提供的静态资源设置自定义响应标头

我们试图解决的任务是使用HttpService.registerResources()方法Cache-Control为在 OSGi 环境中公开的静态资源(例如)设置自定义响应标头。

考虑到以下细节,实现这一目标的最佳方式是什么:

  • 基于“资源”服务集可能有大量资源注册。这些 OSGi 服务提供有关它们所在的静态资源路径和捆绑包的信息。我们预计的资源路径注册量在 50 到 200 之间。
  • 实现应该是 OSGi 友好的。Pax Web 扩展的使用是可以接受的。
  • 实现应该与 Web 服务器无关(例如,没有关于 Jetty 的直接知识)。

我们想到的解决方案是:

  1. 在HttpContext.handleSecurity中设置响应头

    • 这种方法的缺点是处理安全的方法还将负责与安全无关的逻辑。
  2. registerResource()使用与资源 URI 相同的 URI为每个调用注册过滤器。过滤器将是设置响应标头的响应。

    • 这种方法的缺点是可能有太多的过滤器用于相同的目的。但到目前为止,这似乎是最简单的解决方案。
  3. 如果请求 URI 对应于已知资源 URI 路径,则在根路径上注册一个过滤器并将其配置为设置响应标头。

    • 这种方法的缺点是必须对过滤器进行教育以了解资源路径,这意味着实现更复杂一些。

我们渴望听到有关建议解决方案的意见并了解其他替代方案。

0 投票
1 回答
149 浏览

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 中不起作用?有什么解决方法吗?

0 投票
2 回答
722 浏览

jetty - jetty osgi:使用一个 securityHandler 保护所有 servlet

我正在使用码头作为与 paxweb 的 osgi 捆绑包。我想确保通过 OSGI HttpService 注册的所有 servlet 和资源都由一个通用的 SecurityHandler 保护(此外,我想使用 JAASLoginService)。我还想将所有未经身份验证的请求重定向到单个登录页面。

是否可以配置此场景?

0 投票
1 回答
1300 浏览

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 包中使用蓝图?

0 投票
1 回答
1429 浏览

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 桥示例)

0 投票
0 回答
602 浏览

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。知道这里可能有什么问题吗?谢谢!

0 投票
1 回答
886 浏览

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控制台保持在自己的端口上)