在码头嵌入非网络应用程序

时间:2011-02-09 16:32:13

标签: jetty

如何配置jetty6来启动非Web应用程序(而不是servlet)?我的Java应用程序是一个通过tcp监听ampq消息的rabbitmq消费者。我可以让jetty init()调用我的Main入口点。有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

为什么不提供一个简单的servlet来提供init()方法并从那里调用你的应用程序?即将它包装在一个无所事事的servlet包装器中。

它没有 来回复GETs / POSTs等。虽然你可能会发现它很有用并通过简单的HTML页面报告应用程序状态。< / p>

答案 1 :(得分:2)

如果您想要一个完整的答案,您需要提供更多信息,但我可以建议一些方法,这将提供不同的行为(您需要为您的用例选择正确的行为)< / p>

1。只需将正确的代码放入jetty.xml文件即可。 XML文件是一种非常完整的执行语言,因此您只需调用对象上的方法即可。一个适当的静态方法,以及一个<call>标签应该可以做到这一点 缺点是,你并没有从Jetty那里得到任何东西 - 你只是将你的启动方法绑定到Jetty使用的相同启动过程中。

2. 构建实现Jetty LifeCycle界面的组件(您最好的选择是扩展AbstractLifeCycle),然后调用Server.addLifeCycle()
这将允许您在Jetty启动时打开您的端口,在Jetty,停止等时干净地关闭。
但你得到的只是生命周期。你没有得到任何有关部署的信息。

3. 与选项1相同,但将其放在jetty-web.xml(或jetty-env.xml)中,这样可以将其绑定到WAR文件的部署中。<登记/> 它对选项1的收购并不多,但如果您尝试将应用程序部署到现有的Jetty设置,它可能会有所帮助。

4. 与选项1相同,但使用jetty-web.xml。我不确定这会有多好,因为我认为你不能将LifeCycle附加到WebAppContext,但它可能正常 - 你需要对此进行更多调查

5. 根据Brian's solution,只需使用init()方法和initialise-on-startup编写一个servlet,然后不要将其映射到任何网址。在init内调用您的输入法。