与Web应用程序

时间:2015-06-08 21:50:15

标签: java eclipse tomcat ibm-cloud

我已经坚持这个问题几天了。我已无休止地搜索,但几天后仍然没有找到解决方案。我的截止日期对我的项目来说非常重要,所以你们是我最后的选择。

我的项目:

我有一个足够简单的Web应用程序,您可以在其中提交文件(让我们称之为请求)并等待它被处理。提交请求后,详细信息将插入文本文件并保存。可以随时检查他/她的请求状态。这是我的客户端。

然后我在后台运行一个恒定的24/7引擎,不断检查上述文本文件以获取新请求。一旦找到新请求,它就可以开始工作了。完成后,它会更改其状态并更改文本文件中所需的任何详细信息。在eclipse中我将它作为java应用程序运行。我也可以将它导出为可运行的jar并通过命令行运行。

我想做什么:

我希望能够将这两个部分组合在一起同时工作。这意味着一旦我部署了Web应用程序(WAR文件),我也希望引擎也能运行。我希望在BLUEMIX上部署它。我已经在BLUEMIX上完美地部署了客户端部件,但我不知道如何用它封装引擎。我在Eclipse上使用WebSphere Application Server和Tomcat进行测试。这一切都在努力找到,但我只需要将这两个部分组合成1.我尝试将一个监听器类添加到项目中但问题是,一旦我运行引擎类,它就不会加载我的Web应用程序,因为引擎假设只是继续运行(它有一个while循环),直到它被终止。

我是网络应用程序开发的新手,如果有人可以指出我的方向非常有用,那我就非常有用了!

3 个答案:

答案 0 :(得分:1)

即使我可以帮助您获取在Bluemix中运行的内容(例如,通过自定义启动命令,或从Liberty分叉另一个进程等),我认为这不是正确的设计为你的问题。正如其他人已经指出的那样,您可以考虑将这两个部分(Web部件和工作器部件)部署为两个应用程序,并通过队列服务(如MQ Light服务)集成它们,或者使用线程池重写工作线程自由。如果应用程序要处理大量请求,则第一个选项更好。您可以在此处找到有关如何在Bluemix中执行此操作的示例:https://developer.ibm.com/messaging/2015/05/22/getting-started-with-java-apps-using-the-mq-light-service-for-bluemix/

答案 1 :(得分:0)

所以基本上你想在你的应用程序中允许并发。

您建议使用多个进程来实现此目的:一个用于侦听Web请求,另一个用于查找文件中的更改。您的操作系统将支持此功能。我不知道你的IDE是否允许你这样做(它应该,如果没有尝试Intellij IDEA),但你可以运行命令,一旦你正确部署你的项目,从命令行启动每个进程。在那个阶段,你不再需要IDE了。

另一个选择是在您的Java中引入多线程。线程允许在单个Java程序中进行并行化。在您的情况下,这意味着,当您的while循环无限期地执行时,webapp可以继续提供服务客户端。

有关此问题的教程,请参阅http://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html

答案 2 :(得分:0)

将应用程序客户端更改为MDB(消息驱动的bean),Bluemix Liberty应该支持它,例如内部JMS引擎。然后,在客户端接收并存储文件之后,它会向MDB发送异步JMS消息,其中包含一些详细信息。 MDB自动获取消息并处理该文件。

如果您的文件不是很大,就像其他人建议的那样将它放在数据库中,如果您的应用程序变得更大,并且更容易检查/更新流程的状态,那么在群集解决方案中使用它会容易得多。