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

时间:2016-09-19 16:17:14

标签: java wildfly

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

public void startApplicationServer();
public void stopApplciationServer();
public void deployApp(App appToDeploy);
public void undeployApp(App appToUndeploy);

经过一番思考,我选择的应用服务器是“wildfly 10”。但是,我没有找到任何允许我以编程方式调用wildfly的资源。我的问题是你知道要遵循的程序或一般步骤以实现我的目标吗?

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

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

    感谢您的回复。

2 个答案:

答案 0 :(得分:1)

您可能需要查看WildFly Swarm

虽然没有记录,但还有WildFly launcher API。您可以在wildfly-maven-plugn中看到一些示例。

另一种选择是application client。虽然我可能会倾向于使用WildFly Swarm作为你的用例。

答案 1 :(得分:1)

我最终在OSGi环境中嵌入了tomcat 8。我真的想为OSGi和应用服务器使用相同的JVM进程(至少对我来说有两个独立的进程,所有后续的开销都没有意义),因此嵌入tomcat是完美的。放弃Java EE 7 Full Profile并不是一个很大的损失,因为我只需要Web Profile(+用于Web服务的Jersey)。

我写了一篇关于如何在OSGi here上嵌入tomcat的指南:如果链接崩溃,我会在这里写下最重要的阶段:

  1. 向maven添加所有“tomcat embed”依赖项;
  2. 将“felix.service.urlhandlers = false”添加到config.properties;
  3. JarScanner创建一个新的StandardJarScanner,其中忽略“http:// .extensions: /”等URI;
  4. context.setJarScanner(JarScanner js)次电话使用context= tomcat.addWebApp(String, String)方法;
  5. 使“tomcat bundle”成为框架扩展束(参见OSGi R6 3.15 section);
  6. 通过普通ServiceRegistration程序通过“扩展束激活器”注册“tomcat bundle”服务;
  7. 将tomcat接口捆绑包添加到“org.osgi.framework.system.packages.extra”config.properties(例如,如果“tomcat bundle”的接口位于com.acme.applicationserver包内,则添加“com.acme”。 ApplicationServer的“
  8. 我不会仅仅因为我的问题与野蝇有关而将此答案标记为正确答案。我认为这个答案只是一种解决方法(即使对我来说这个答案肯定能解决我的问题)