将 pyra 嵌入 Java 来自

Embed Payara in Java SE

上下文:用 Swing 编写的现有 JavaSE 应用程序可以启动嵌入式服务器(到目前为止是 Jetty),但我们需要切换到 Java EE,因此我们考虑引入一个企业容器(候选者是:Payara、Tomee、Wildfly)。 服务器应该能够 运行 基于动态输入的 Web 应用程序:Web 上下文,具有自己的 web.xml,在构建时未知的特定 Web 资源,因此 uber jar 不是一个真正的选择为了我们。 我们已经使用如下代码在 Payara 上成功启动了一个网络应用程序(这不是工作代码,但它显示了我们使用 Payara 所采取的步骤)

GlassFish glassfish;
WebContainer container;
GlassFishRuntime glassfishRuntime =  = GlassFishRuntime.bootstrap();
glassfish = glassfishRuntime.newGlassFish();
glassfish.start();

// Access WebContainer
container = glassfish.getService(WebContainer.class);
WebContainerConfig config = new WebContainerConfig();
container.setConfiguration(config);

Context context = container.createContext(contextPathLocation);
m_webAppContexts.put(p_contextName, context);
WebListener listener = container.createWebListener("listener-1", HttpListener.class);
listener.setPort(myDynamicPortNumber);
container.addWebListener(listener);
container.addContext(context, myDynamicContextPath);
context.addServlet(myDynamicMapping, myServletName);

这一切正常,当从我们的 Java SE 应用程序调用时,一个基本的 Web 应用程序在 Payara 中启动。

我们还有一个 web.xml 的片段,用于声明我们希望在满足给定条件的情况下引入此动态部署的其他 servlet。 用另一个 web.xml 的片段覆盖现有 web.xml 的最佳方法是什么?我们需要指向文档的指针,以及来自更有经验的 Payara 用户的指导。

这对于 Payara 或 Wildfly 是不可能的,因为它们的工作方式与 Jetty 的工作方式截然不同。 但是,使用 Tomee 是可能的。