2011-02-08 37 views
8

我正在使用javaeventing來編寫一個偶數驅動的shell來訪問數據庫。所以,我的用例是:Java和事件驅動編程

  1. 在命令行中打開shell。
  2. 現在,shell連接到數據庫並偵聽進入的命令。
  3. 當它獲取命令時,它會執行它並返回所需的輸出。

現在,我該怎麼避免while(!exit){ //do stuff }這種循環呢?如何正確使用Java事件?

的直接的方式可以是:

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

但是,我要找如果java的三項賽可以給一個更好的解決方案。

UPDATE1:

這是我想實現:

  1. 我的應用程序是一個shell(如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 eventi ng會來這裏嗎?我希望用戶觸發該事件。

+0

也許我誤解你的問題,但不是這個到底是什麼事件觸發呢?你註冊你的事件,在這裏退出,當它發生時,你的代碼被調用。所以你不需要寫這樣的循環。如果我在左外野,請糾正我。 – 2011-02-08 01:44:40

回答

2

我發現很難理解你想要做什麼,但我有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),它確實如此。

我希望這有助於 鮑勃

2

所有事件庫都會向偵聽器發送事件。除此之外,您需要實際創建事件。在這種情況下,您將需要代碼來讀取控制檯並生成事件,您可能需要其他東西來「監聽」數據庫並從中生成事件(假設您正在查找異步數據庫事件,如表或行更改)。

該代碼仍然需要編寫。

除非該框架爲您提供這樣的實用程序類,否則您必須親自編寫這些類,而這些類可能就像您所描述的那樣。

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