[英]Java and event driven programming
我正在使用javaeventing編寫一個甚至驅動的外殼程序來訪問數據庫。 因此,我的用例是:
現在,如何避免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.