如何在WildFly

时间:2016-02-26 06:17:01

标签: servlets wildfly jca inbound

我正在尝试实现一个入站资源适配器,它将通过HTTP协议接收数据。我有两种实现方式:使用Jetty作为内部服务器,并使用WildFly中的Web容器。我知道如何使用Jetty,但认为使用Undertow是最好的。但是怎么样? WildFly在RAR中看不到@WebServlet。如何告诉WildFly部署位于RAR的servlet?

1 个答案:

答案 0 :(得分:1)

当谈到整个生态系统对我不利的时候,我常常问自己,我是否确定整个想法是正确的。你的想法似乎根本不对。不过,如果你确定的话,我会解释做一些接近你想要的事情的方式。

在资源适配器中使用servlet的想法有点奇怪。实现入站HTTP适配器也很奇怪。从某种逻辑意义上讲,servlet容器本身就是一个入站HTTP资源适配器。它并没有真正使用JCA容器,但它与入站资源适配器所代表的非常接近。

不这样做的另一个原因是资源适配器和应用程序部署具有完全不同的生命周期。虽然WAR / EAR部署代表了一个“充当生命”的应用程序,但RAR语义却截然不同:资源适配器只是提供其他部署的接口,而不是做一些业务逻辑。您可以确保将RAR捆绑到您的EAR中,但如果您不是针对一个可怕的整体,那么您最终会将RAR部署为应用程序使用的单独工件。资源适配器不应包含任何特定的业务逻辑。如果您需要这样做,请考虑重新考虑您是否首先需要应用程序服务器:与EJB和Web相比,JCA容器相当差,如果您不需要所有功能,Java SE可能会派上用场

现在,如果你仍然100%确定你需要这个,那么让我们来看看你的选择:

  1. 您可以尝试实现ServiceActivator - 一个特定于JBoss的自定义扩展的起点。在此激活器中,您可以访问UndertowService并手动执行servlet容器引导程序。 Here是来自Wildfly团队的SA动力人工制品的一个例子。由于您的问题很不寻常,我无法确认JCA部署是否会支持它,但似乎是。

  2. 如果您不能仅强制Wildfly的Web容器来处理RAR部署,则可以回退到手动容器实例化。 Undertow本身只是Wildfly中的一个模块,因此您可以通过在RAR的JAR清单中指定模块依赖性子句来访问它,如下所示:

    Dependencies: io.undertow
    

    通过类加载器部署后,您可以使用Undertow的类,并且您将能够在其中实例化具有自定义servlet的新服务器。

相关问题