簡體   English   中英

與Web應用程序同時運行jar文件(獨立的Java控制台應用程序)

[英]Runing a jar file (standalone java console application) simultaneously with a Web Application

我已經在這個問題上停留了幾天。 我無休止地搜索了Google,但幾天后仍未找到解決方案。 我的項目截止日期幾乎在這里,所以你們是我的最后選擇。

我的項目:

我有一個足夠簡單的Web應用程序,您可以在其中提交文件(將其稱為請求)並等待其處理。 提交請求后,詳細信息將插入文本文件並保存。 一個人可以隨時檢查他/她的請求狀態。 這是我的客戶端。

然后,我在后台運行了一個恆定的24/7引擎,該引擎不斷檢查上述文本文件中是否有新請求。 找到新請求后,就可以對其進行處理。 完成后,它將更改其狀態,並更改文本文件中所需的任何詳細信息。 在eclipse中,我將其作為Java應用程序運行。 我還可以將其導出為可運行的jar並通過命令行運行。

我想做的事:

我希望能夠將這兩個部分結合在一起以同時工作。 這意味着一旦部署了Web應用程序(WAR文件),我就希望引擎也能運行。 我希望將其部署在BLUEMIX上。 我已經在BLUEMIX上完美地部署了客戶端部分,但是我只是不知道如何用它來打包引擎。 我正在Eclipse上使用WebSphere Application Server和Tomcat進行測試。 一切正常,但我只需要將這兩部分都合並為1。我曾嘗試將偵聽器類添加到項目中,但是問題是,一旦運行引擎類,該引擎便不會加載Web應用程序假設只是繼續運行(它有一個while循環)直到終止。

我是Web應用程序開發的新手,如果有人可以向我指出正確的方向,那將非常有幫助!

即使我可以幫助您獲得在Bluemix中運行的功能(例如,通過自定義啟動命令,或從Liberty派生另一個進程等),但我確實認為這不是解決問題的正確方法。 正如其他人已經指出的那樣,您可以考慮將兩個部分(Web部分和工作器部分)部署為兩個應用程序,並通過隊列服務(例如MQ Light服務)將它們集成,或者使用線程池重寫工作器。自由。 如果該應用程序旨在處理大量請求,則第一個選項更好。 您可以在此處找到有關如何在Bluemix中執行此操作的示例: https : //developer.ibm.com/messaging/2015/05/22/getting-started-with-java-apps-using-the-mq-light-服務換bluemix /

因此,實質上,您希望允許應用程序中的並發。

您所建議的是要通過多個過程來實現這一目標:一個過程偵聽Web請求,另一個過程尋找文件中的更改。 您的操作系統將支持此功能。 我不知道您的IDE是否允許您執行此操作(如果不嘗試Intellij IDEA,它應該執行此操作),但是一旦正確部署了項目,您就可以運行命令從命令行啟動每個進程。 在那個階段,您不再需要IDE。

另一個選擇是將多線程引入Java。 線程允許在單個Java程序內並行化。 在您的情況下,這意味着當您的while循環無限執行廣告時,webapp可以繼續為客戶提供服務。

有關此內容的教程,請參見http://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html

將您的應用程序客戶機更改為MDB(消息驅動的Bean),它應該由Bluemix Liberty支持,例如內部JMS引擎。 然后,在客戶端接收並存儲文件之后,它會將異步JMS消息發送到MDB,其中包含一些詳細信息。 MDB自動接收消息並處理文件。

如果您的文件不是很大,如其他人建議的那樣,將其放入數據庫中,則如果應用程序變得更大,則在群集解決方案中使用它會容易得多,並且檢查/更新進程的狀態也更加容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM