簡體   English   中英

調用其他Java應用程序(工作人員)的Java Web應用程序

[英]Java web application calling different other Java applications (workers)

我正在尋找一種更好的邏輯解決方案,以解決一個核心Java EE(Web)應用程序將調用/執行許多其他Java應用程序/工作人員 (可以是核心Java或J2EE(web)應用程序(不知道會是什么)的情況)的問題。最好))。

那些其他Java應用程序/工作人員將基本上(分別)與不同的數據源(可以來自遠程DB或REST或SOAP等)連接,並在特定時間段內填充/更新本地DB。

我最近正在研究Java Quartz Scheduler。 您對這種企業級體系結構有什么好的建議嗎?

順便說一句,我正在使用Spring 4,Java 7

一如既往地感謝您提出所有好的專業建議。

示例圖可以如下: 在此處輸入圖片說明

不確定理解得很好,但是您可以看一下消息傳遞機制。 通常,WebApp將發送一條消息,所有工作人員都會收到該消息。

看一看JMS ,它是為這種使用而設計的,並且與JEE(它是JEE規范的一部分)和Spring很好地集成在一起的。

您可以使用spring的httpInvokerrmiInvoker輕松將Java應用程序與其他應用程序連接。 此處提供更多信息: http : //docs.spring.io/spring/docs/current/spring-framework-reference/html/remoting.html

您的問題基本上分為兩部分:

  1. 如何在Java EE服務器上安排作業?
  2. 如何從該計划作業調用遠程服務?

作業調度

在Java EE環境中進行作業調度的技巧是,您通常在群集或多個服務器中運行作業。 因此,一次只能代表集群一個節點運行該作業,否則,對於同一件事,您將多次調用這些遠程資源。

為此,有一個標准JSR-237 ,它涵蓋了Timers和WorkManagers。 每個Java EE供應商都有自己的實現。 WebLogic有一個WebSphere有一個 ,而JBoss有一個 (JBoss不與JSR兼容,但功能相同)。

如果運行的服務器之一僅運行Java EE規范的Web層(即Tomcat或Geronimo),則Quartz是一個不錯的選擇。

如何從定時作業中調用遠程服務

與@Alexandre Cartapanis的回答相呼應,可能您想做的就是在Java EE服務器中創建一個JMS主題 ,然后在作業運行時向該主題發布消息。 遠程服務(無論Java EE服務器如何)都訂閱了該主題,然后您可以運行查詢。

這里的最大優點是,如果您需要添加另一個需要填充本地數據庫的服務,那么您要做的就是讓該服務器訂閱該主題-無需更改代碼。 使用JSch或遠程處理,每次新服務上線時都必須更改代碼。 如果DNS地址或IP地址發生更改等,您還必須更改代碼,而JMS方法只是在服務器上進行配置。 JMS可以做很多事情,而且全面的支持要好得多。

Spring有用於Quartz的適配器,我認為那里也有一個用於WorkManagers和Timers的適配器。

您可以使用JSch - Java Secure Channel來觸發遠程ssh調用,這些調用可以啟動JVM並運行Worker類。
這里有些例子。

暫無
暫無

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

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