2011-02-08 16 views
8

मैं डेटाबेस तक पहुंचने के लिए एक भी संचालित शैल लिखने के लिए javaeventing का उपयोग कर रहा हूं। तो, मेरा उपयोग मामला है:जावा और इवेंट संचालित प्रोग्रामिंग

  1. कमांड लाइन में खोल खोलें।
  2. अब, खोल डेटाबेस से जुड़ता है और आने वाले कमांड के लिए सुनता है।
  3. जब यह कमांड हो जाता है, तो यह निष्पादित करता है और आवश्यक आउटपुट देता है।

अब, मैं while(!exit){ //do stuff } प्रकार के लूप से कैसे बच सकता हूं? जावा इवेंटिंग का सही तरीके से उपयोग कैसे करें?

सीधे आगे तरीका हो सकता है:

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

लेकिन, मुझे देख रहा हूँ अगर जावा इवेंट एक बेहतर समाधान दे सकते हैं।

Update1:

यहाँ मैं लागू करने के लिए कोशिश कर रहा हूँ है:

  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
}

अब, यहाँ मैं नहीं जावा इवेंट के उपयोग देख पा रहे हैं और मुझे लगता है मेरी समस्या हल, क्या आप कृपया मुझे बता सकते हैं, कैसे जावा घटना एनजी तस्वीर में आएगा? मैं चाहता हूं कि उपयोगकर्ता ईवेंट को ट्रिगर करे।

+0

शायद मैं आपके सवाल का गलत समझ रहा हूँ, लेकिन इस वास्तव में क्या इवेंट के लिए है? आप बाहर निकलने के लिए यहां अपना ईवेंट पंजीकृत करते हैं, और जब ऐसा होता है, तो आपका कोड कॉल हो जाता है। इसलिए आपके जैसे लूप को लिखने की कोई आवश्यकता नहीं होनी चाहिए। अगर मैं बाएं क्षेत्र में हूं तो कृपया मुझे सही करें। –

+0

हाँ, आप सही हैं। लेकिन मैं यह समझने में सक्षम नहीं हूं कि इसे कैसे प्राप्त किया जाए? – zengr

उत्तर

2

मुझे यह समझना मुश्किल लगता है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं, लेकिन मुझे जावावेन्टिंग के साथ अनुभव है, और मैं आपकी मदद करने की कोशिश करूंगा जितना मैं कर सकता हूं। क्या हार्टंग सही होगा, आपको कहीं भी अपनी घटनाएं बनाने की ज़रूरत है।इसलिए यदि मैं आपको सही ढंग से समझता हूं, तो आप कमांड लाइन से अपना जावा-ऐप शुरू करना चाहते हैं, फिर आप डेटाबेस से कनेक्ट करना चाहते हैं और कुछ कमांड डालने के लिए देखना चाहते हैं, और जब डाला जाता है, तो आप एक ईवेंट बनाना चाहते हैं। क्या ये सही है?

उस स्थिति में, आपको शायद डेटाबेस के खिलाफ कुछ मतदान करने की आवश्यकता होगी, क्योंकि सामान्य डेटाबेस के पास कुछ स्थिति सत्य होने पर आपके आवेदन को सूचित करने का कोई तरीका नहीं है। इसका मतलब है कि आपको शायद {} क्लॉज के दौरान आवश्यकता होगी, जिसमें आप डेटाबेस के विरुद्ध क्वेरी करते हैं, जिसके परिणामस्वरूप आप जिस कमांड को ढूंढ रहे हैं उसके परिणामस्वरूप प्रतीक्षा करें।

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) के लिए सुन घटना प्राप्त करेंगे, और घटना पेलोड से आदेश प्राप्त कर सकते हैं: जब पाया, तो आप इस तरह की एक घटना बना सकते हैं।

अब सवाल यह है कि आप आदेशों को संवाद करने के लिए डेटाबेस का उपयोग क्यों करना चाहते हैं? क्या आप बस अनुप्रयोगों के बीच संवाद करने के लिए इसका इस्तेमाल करते हैं? यदि आपका अन्य एप्लिकेशन जावा में भी लिखा गया है, तो आप वितरित कार्यक्रमों का उपयोग करने पर विचार कर सकते हैं, जिससे एक जावा ऐप नेटवर्क में अन्य मशीनों पर अन्य जेवीएम में चल रहे जावा ऐप्स को ईवेंट भेजने की अनुमति देता है। आप जेईडी (http://code.google.com/p/jed-java-event-distribution) को देखना चाहते हैं, जो वास्तव में ऐसा करता है।

मुझे आशा है कि इस मदद करता है, बॉब

2

सभी घटनाक्रम लाइब्रेरी श्रोताओं को घटनाओं को प्रेषित करती है। इसके अलावा आपको वास्तव में घटनाओं को बनाने के लिए कुछ चाहिए।

इस मामले में, आपको कंसोल पढ़ने और घटनाओं को उत्पन्न करने के लिए कोड की आवश्यकता होगी, आपको संभावित रूप से डीबी को "सुनने" और कुछ घटनाओं को उत्पन्न करने की आवश्यकता होगी (मान लीजिए कि आपके पास एसिंक्रोनस डीबी घटनाएं हैं जिन्हें आप ढूंढ रहे हैं , जैसे टेबल या पंक्ति परिवर्तन)।

उस कोड को अभी भी लिखा जाना चाहिए।

और जब तक कि ढांचा आपको ऐसी उपयोगिता कक्षाएं प्रदान नहीं करता है, आपको इसे स्वयं लिखना होगा, और उन वर्गों की तरह ही आप वर्णन करेंगे।

लेकिन वे कक्षाएं डेटा चलाते हुए सिस्टम के किनारे पर हैं। आपका शेष कोड पूरी तरह से घटना आधारित हो सकता है।

संबंधित मुद्दे