Java 如何在应用程序中嵌入Wildfly服务器

Java 如何在应用程序中嵌入Wildfly服务器,java,wildfly,Java,Wildfly,我正在构建一个只包含(目前)业务逻辑的OSGi应用程序。由于我希望我的用户通过浏览器与我的软件进行交互,我正在考虑尝试通过以下命令在我的应用程序中添加应用程序服务器: public void startApplicationServer(); public void stopApplciationServer(); public void deployApp(App appToDeploy); public void undeployApp(App appToUndeploy); 经过深思熟虑

我正在构建一个只包含(目前)业务逻辑的OSGi应用程序。由于我希望我的用户通过浏览器与我的软件进行交互,我正在考虑尝试通过以下命令在我的应用程序中添加应用程序服务器:

public void startApplicationServer();
public void stopApplciationServer();
public void deployApp(App appToDeploy);
public void undeployApp(App appToUndeploy);
经过深思熟虑,我选择的应用服务器是“wildfly 10”。但是,我找不到任何允许我以编程方式调用wildfly的资源。我的问题是你知道为了实现我的目标要遵循的程序或一般步骤吗?

您可以找到一些有用的信息来帮助我:

  • 我选择Wildfly是因为它完全支持Java EE 7,在JDK8上运行,并且是在LGPL下发布的(我更喜欢开源glassfish,但它是在GPL下发布的,因此必须提供源代码。因为(将来)我想让这个软件商业化,我被迫放弃它)
  • 也许你们中的一些人会建议在应用服务器上构建我的整个应用程序。我不喜欢这样做,因为web界面可能只是我的应用程序的一个可能的用户界面(谁知道,也许将来我想切换到另一个界面,如CLI或类似桌面的界面)
  • 我看过一些内容,比如wildfly swarm或Arquillian:我知道这些项目的目标与我的完全不同,但也许它们可以成为解决方案的一部分?这只是我个人的想法(可能是错误的) 我是整个“应用服务器”领域的新手,所以很有可能我遗漏了什么


    谢谢您的回复。

    您可能想看看

    虽然没有文档记录,但也存在以下问题。您可以看到一些示例,说明如何在中使用它


    另一个选择将是。尽管我可能倾向于使用WildFly Swarm作为您的用例。

    我最终将tomcat 8嵌入到OSGi环境中。我真的很想对OSGi和应用服务器使用相同的JVM进程(至少对我来说,有两个单独的进程,所有随之而来的开销都没有意义),因此嵌入tomcat是完美的。放弃JavaEE7的完整配置文件并不是一个很大的损失,因为我只需要Web配置文件(+Jersey for Web服务)

    我已经写了一篇关于如何在OSGi上嵌入tomcat的指南:如果链接出现故障,我将在这里写下最重要的阶段:

  • 向maven添加所有“tomcat嵌入”依赖项
  • 将“felix.service.urlhandlers=false”添加到config.properties
  • 从URI喜欢的
    StandardJarScanner
    创建新的
    JarScanner
    “http://.extensions:/“被忽视
  • 对于每个
    context=tomcat.addWebApp(String,String)
    call,使用
    context.setJarScanner(JarScanner js)
    方法
  • 将“tomcat捆绑包”作为框架扩展包(请参见)
  • 通过正常的
    ServiceRegistration
    过程,通过“扩展包激活器”注册“tomcat捆绑包”服务
  • 将tomcat接口捆绑包添加到“org.osgi.framework.system.packages.extra”config.properties中(例如,如果“tomcat捆绑包”的接口位于com.acme.applicationserver包中,请添加“com.acme.applicationserver”

  • 我不会把这个答案标记为正确的答案,只是因为我的问题与野鸟有关。我认为这个答案只是一个解决办法(即使对我来说,这个答案肯定解决了我的问题)。

    可能与此相关。请注意,您的第2期有缺陷。将您的软件创建为Web应用程序并不会阻止以后为其创建其他用户界面,特别是如果您事先考虑过的话。我已经看过了您发布的资源。将wildfly与OSGi完全集成将非常棒,但该项目似乎已被取消在wildfly 8.0.0 alpha之后。关于第2期中的缺陷:它与问题无关,但是你能给我链接一个资源来提高我对这个论点的认识吗?那真是太棒了!好吧,假设你用一些javascript框架(如angularjs)创建了视图层,并将你的业务逻辑作为REST接口,然后你就可以了创建使用REST界面执行操作的任何类型的用户界面。当然,如果您以前没有使用过REST界面的经验,那么首先要学习的内容很多。我从未使用过angularjs,但我知道框架背后的概念。我也熟悉REST界面;如果我的业务逻辑与vie通信,您是对的w如果通过REST,那么就不会有任何问题。我意识到我的第二点是因为我希望我的业务逻辑独立于应用程序服务器:在安装中可能根本没有应用程序服务器(例如,只有CLI UI),因此我根本不希望我的应用程序依赖于应用程序服务器的存在。当然,也许只是我实施了一个糟糕的设计!我曾尝试使用wildfly swarm,但显然它生成了一个uber可执行jar,其中包含了您软件的所有应用逻辑。我的需求不同:我只希望安装一个连接器能够从嵌入式服务器启动/停止、部署/取消部署应用程序。我觉得swarm可能是一个解决方案。你知道启动/停止方法在wildfly源代码中的位置吗?这些入口点应该是我问题的答案!我只是想了解,你想启动一个Java进程,你创建的这个进程将正确启动和停止wildfly吗?如果是这样的话,你可以使用launcher API来实现这一点,但它会启动一个额外的进程。我试图在同一个进程中启动服务器,但显然简单的方法是使用你提供给我的launcher API。我会尝试一下(对不起,我现在才意识到你提供给我的已经是我正在寻找的入口!)我个人认为单独的过程最简单。要部署你可以使用maven插件的核心部分。