簡體   English   中英

Java和事件驅動的編程

[英]Java and event driven programming

我正在使用javaeventing編寫一個甚至驅動的外殼程序來訪問數據庫。 因此,我的用例是:

  1. 在命令行中打開外殼。
  2. 現在,shell連接到數據庫並偵聽傳入的命令。
  3. 當它收到命令時,它將執行該命令並返回所需的輸出。

現在,如何避免while(!exit){ //do stuff }的循環? 如何正確使用Java事件?

直接的方法可以是:

while(!exit)
{
   exit = myClass.execute("command"); //when command is exit, return true.
}

但是,我正在尋找java事件是否可以提供更好的解決方案。

更新1:

這是我想要實現的:

1我的應用程序是一個外殼(如mongodb外殼),用於試用鍵值數據庫。
2簡單的代碼:

init(); //Initialize the connection with database
while(!exit)
{  
    //exit = myClass.execute("put(5)"); //This returns false  
    exit = myClass.execute("exit"); //returns true, i.e. the user wants to exit the shell
}

現在,在這里我看不到Java事件的使用,並且解決了我的問題,請您告訴我, 如何在這里出現Java事件? 我希望用戶觸發事件。

事件庫所做的只是將事件分發給偵聽器。 除此之外,您還需要一些東西來實際創建事件。

在這種情況下,您將需要代碼來讀取控制台並生成事件,可能還需要其他一些東西來“監聽”數據庫並從中生成事件(假設您要查找的是異步數據庫事件,例如表或行更改)。

該代碼仍然需要編寫。

並且除非該框架為您提供了此類實用程序類,否則您必須自己編寫該類,並且這些類很可能就像您所描述的那樣。

但是這些類都在系統的邊緣,驅動數據。 您的其余代碼都可以完全基於事件。

我發現很難理解您到底想做什么,但是我有javaEventing的經驗,我將盡力為您提供幫助。 請問Hartung是正確的,您需要在某個地方創建事件。 因此,如果我對您的理解正確,則希望從命令行啟動java-app,然后連接到數據庫並監視要插入的命令,並在插入時創建一個事件。 它是否正確?

在那種情況下,您可能需要對數據庫進行一些輪詢,因為普通的數據庫無法在某些條件為真時通知您的應用程序。 這意味着您可能需要while {}子句,在其中對數據庫執行查詢,以等待包含要查找的命令的結果集。 找到后,您可以創建如下事件:

Class ReceivedCommandEvent extends EventManager.EventObject {}   // define your event   

while (command==null) {
  command = pollDataBaseForCommand();  //poll your databae for commands
  waitForSomePeriod(); 
}

EventManager.triggerEvent(this, new ReceivedCommandEvent(command));     //trigger your event, with the command as payload

現在,任何其他監聽您事件的線程(ReceivedCommandEvent)都將接收該事件,並可以從事件有效負載中檢索命令。

現在的問題是,為什么無論如何要使用數據庫來傳遞命令? 您是否只是使用它在應用程序之間進行通信? 如果您的其他應用程序也是用Java編寫的,則可以考慮使用分布式事件,從而允許一個Java應用程序將事件發送到在網絡中其他計算機上的其他JVM中運行的Java應用程序。 您可能想看看JED( http://code.google.com/p/jed-java-event-distribution ),它正是這樣做的。

希望對您有所幫助,鮑勃

暫無
暫無

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

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