【问题标题】:Restlet obtaining ApplicationRestlet获取申请
【发布时间】:2015-06-04 10:16:47
【问题描述】:

在 Restlet 2.3 中,获得Application 的推荐方法是什么?

docs 暗示有一个静态方法Application.getCurrent() 暗示可以获取正在执行的Application。但是,这需要从正在执行的Application 进行调用。

假设我有几个应用程序并且它们都在运行:

public class ApplicationA extends Application {...}

public class ApplicationB extends Application {...}

是否可以从ApplicationB 获取ApplicationAApplication

【问题讨论】:

    标签: java restlet-2.0


    【解决方案1】:

    这取决于您配置 Restlet“应用程序”的方式,但由于您根据应用程序实例定义路由,您可以将一个注入另一个,如下所述:

    Component c = new Component();
    (...)
    
    MyApplication1 app1 = new MyApplication1();
    c.getDefaultHost().attach("/app1", app1);
    
    MyApplication1 app2 = new MyApplication2(app1);
    c.getDefaultHost().attach("/app1", app2);
    
    (...)
    

    您会注意到,您还可以在运行时内省您的应用程序。 Restlet 的 APISpark 扩展做了类似的事情。参见课程org.restlet.ext.apispark.internal.introspection.application.ComponentIntrospectororg.restlet.ext.apispark.internal.introspection.application.ComponentIntrospector

    为什么在您的应用程序中需要这样的功能?只是为了确保给出正确的答案;-)

    已编辑

    您可以通过地址https://github.com/templth/restlet-stackoverflow/tree/master/restlet/test-restlet-application-manager 获得适用于您的用例的示例应用程序。

    希望对你有帮助 蒂埃里

    【讨论】:

    • 我试图想出一种从命令行关闭应用程序的有效方法。该应用程序被妖魔化了,并且有一个更新程序,它会关闭当前版本,然后启动新版本。 Application.stop() 似乎是完美的解决方案,但我正在尝试建立获得它的最佳方式。在我从特定路线设置关闭挂钩之前,我想看看是否有可能以任何其他方式获得Application
    • 你使用 OSGi 还是纯 Java 应用程序?
    • 纯java。我考虑过 OSGi,但它有很多额外的工作,而且它的好处非常具有侵入性。
    • 顺便说一句,我刚刚尝试调用Application.getCurrent().stop(),但它似乎并没有关闭应用程序。
    • 事实上,要真正“停止”一个 Restlet 应用程序,您需要将它与相应的虚拟主机分离。调用stop方法只是为了释放一些资源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多