【问题标题】:How to share an ignite instance among jetty webapps如何在 jetty webapps 之间共享一个 ignite 实例
【发布时间】:2017-10-25 02:04:40
【问题描述】:

文档状态:

https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/startup/servlet/ServletStartup.html

基于 Servlet 的启动可用于任何 Web 容器,如 Tomcat, Jetty 等。根据该启动的部署方式, 所有 Web 应用程序都可以访问 Ignite 实例,也可以通过 只有一个。查看 web 容器类加载架构:

然后指向一个关于 Jetty 的死链接。

我正在使用码头。这将如何完成(在所有 Web 应用程序之间共享 ignite 实例)?

【问题讨论】:

标签: ignite


【解决方案1】:

Link to Jetty classloading

Link to Ignite web configuration

后者描述了 Web 会话集群,但您不必启用它即可使用 Ignite。我认为这些文档应该涵盖您的情况。

要在 Web 应用程序之间共享 Ignite 实例,您需要:

代码:

Server service = new Server();
service.addListener("localhost:8090");
ServletHttpContext ctx = (ServletHttpContext)service.getContext("/");
    ServletHolder servlet = ctx.addServlet("Ignite", "/IgniteStartup",
         "org.apache.ignite.startup.servlet.ServletStartup");
    servlet.setInitParameter("cfgFilePath", "config/default-config.xml");
servlet.setInitOrder(1);
servlet.start();

这假设您以编程方式启动 Jetty,即with your own code。如果您不这样做,您的里程可能会有所不同。

【讨论】:

  • 嗯,也许我遗漏了一些明显的东西,但我仍然没有看到 - 这些文档中没有任何内容解释如何在 Jetty 服务器中的所有 Web 应用程序之间共享一个 ignite 实例(单例) .
  • 那么当提到的servlet启动时,ignite实例是如何访问的呢? Ignition.ignite()?如何在另一个 servlet、相同的方法或注释中引用相同的 ignite 实例?共享同一个 ignite 实例的所有 servlet 是否都必须使用 org.apache.ignite.startup.servlet.ServletStartup 作为起点,并且每个都使用 Ignition.ignite()
  • @ReedSandberg 是的,相同的实例(按名称,或不存在)将可用于所有 Web 应用程序。您不必多次初始化ServletStartup
  • 点燃实例是否可用于通过战争自动部署启动和(重新)部署的 servlet?我知道ServletStartup 不能部署为战争来共享 ignite 实例,但假设您的代码在上面,其他战争 webapps 可以通过Ignition.ignite() 访问同一个实例吗?
  • 要回答我上面的问题,是的,这可以在托管、自动部署的战争 web 应用程序之间共享 ignite,但是您必须将 Ignite 类放在顶级(共享)类加载器中,例如 WebAppContext.addSystemClasses(server, "org.apache.ignite.*"); .否则,由于每个 war webapp 都有自己的类加载器,你会得到转换错误。
猜你喜欢
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
相关资源
最近更新 更多