2013-05-16 42 views
0

我有一個想法來創建一個小的Java桌面應用程序,當它在Oracle數據庫中找到新記錄時顯示通知。使用dbms_alert的Java桌面應用程序

我不希望所有的桌面客戶端都運行查詢,所以我想我會做的就是創建一個運行查詢的主進程,並讓所有其他進程知道何時顯示通知。

我僅限於Oracle 9i,因此無法使用更改通知。 AskTom說dbms_alert是Oracle 9i的一個很好的選擇。

所以從我現在的想法是,我會寫一個sqlplus腳本通過crontab運行,它將定期運行一個查詢,然後發出一個dbms_alert。

對於我的桌面應用程序,我有點困惑。 dbms_alert具有像waitany和waittone這樣的方法。這是否意味着我的桌面應用程序需要將數據庫的實時活動會話保持打開狀態,以便他們接收dbms_alerts?

我不能讓我的桌面應用程序定期連接到數據庫,並拿起他們還沒有拿起的任何警報嗎?

謝謝

+0

Ajax使用http作爲協議。必須有一個服務器監聽請求,所以除非你想在每個客戶端上運行Web服務器,否則Ajax不是正確的方法。此外,PL/SQL沒有我知道的用於發出Web請求或任何其他基於套接字的請求的功能。您可以編寫一個服務器來輪詢Oracle新行,並將通知推送給通過套接字連接到它的客戶端。然後,你只有一個進程通過民意測驗進入Oracle。 – jalynn2

+0

不確定http方法是否合適。我不確定你是否不希望應用程序與數據庫進行交流,或者你是否想要避免投票;如果後者你可以看看更改通知或討論的其他選項[這裏](http://stackoverflow.com/a/16255360/266304)。 –

+0

感謝您的反饋人。我今天看了一下更改通知,但由於我運行的是Oracle 9i,因此這不是一個選項。 AskTom表示,對於版本9i,dbms_alert可以用作更改通知的替代方案。我可能會改變我的原始問題,以提出有關dbms_alert – Richie

回答

1

我會創建一個執行查詢的數據庫作業。此外,我會創建一個維護表,在那裏留下通知。時間戳,如果發現新的recored。每個(Java)客戶端都有自上次查詢維護表的時間戳,因此會註冊是否發現了新的備份。但是您必須確保每個客戶都在特定的時間段內對維護表進行查詢。

+0

tks的與建築相關的問題。這是一個很好的解決方案。 – Richie