2014-09-24 26 views
8

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

public class Task1 { //each task looks like this 
    void addInput(String key, String value){ 
     .... 
    } 
    void run(){ 
     .... 
     updateStatus(); 
     .... 
    } 
    HashMap getOutput(){ 
     .... 
    } 
    Status getStatus(){ 
     .... 
    } 
} 

मैं इन कार्यों से एक कार्यप्रवाह बनाना चाहते हैं और फिर मैं कार्यप्रवाह संरचना जानकारी का उपयोग करेंगे एक गतिशील जीयूआई का निर्माण और प्रत्येक कार्य के आउटपुट की निगरानी के लिए। क्या मुझे स्क्रैच से वर्कफ़्लो निष्पादन प्रणाली लिखनी है या क्या कोई आसान विकल्प उपलब्ध है?

क्या कोई वर्कफ़्लो इंजन है जिसे मैं अपने जावा कक्षाओं, इनपुट और आउटपुट और निष्पादन कार्यों को दे सकता हूं (इसे एक्सएमएल में) कर सकता हूं और इसे निष्पादित कर सकता हूं?

+2

आप एक [बीपीईएल इंजन] (http://en.wikipedia.org/wiki/Business_Process_Execution_Language) की तलाश में हैं। – CodeNewbie

+0

मुझे आपकी परियोजना के उपयोग के बारे में निश्चित नहीं है। वाणिज्यिक, स्कूल परियोजना या सिर्फ व्यक्तिगत अध्ययन के लिए? – Jiang

+0

@ जियांग मैं इसे अपने शोध परियोजना के लिए एक प्रोटोटाइप/अवधारणा के सबूत के रूप में बना रहा हूं। यह वर्कफ़्लो स्वचालित करने के बारे में है। मैं टेस्ट केस वर्कफ़्लो बना रहा हूं। यह एक वैज्ञानिक वर्कफ़्लो है, डीएनए खोजें, प्रोटीन में परिवर्तित करें, होमोलॉजी, प्रोटीन मॉडलिंग और अंत मॉडल सत्यापन में खोजें। प्रत्येक चरण विभिन्न सेवाओं का उपयोग करता है। – SMUsamaShah

उत्तर

2

Activity देखें। यह आपके उपयोग के मामले को हल करने के लिए सख्ती से डिज़ाइन नहीं किया गया है, लेकिन आप इसका उपयोग करने के लिए अपने प्रोसेस इंजन का उपयोग और अनुकूलन कर सकते हैं क्योंकि यह पूरी तरह से जावा में लिखा गया है। गतिविधि मॉडलिंग इंजन की बजाय प्रक्रिया है, इसलिए इसे रनटाइम पर समानांतर में चल रहे कार्यों को नियंत्रित करने के लिए डिज़ाइन नहीं किया गया है, फिर भी आपको कई चीजें मिलेंगी जिन्हें आप "बॉक्स से बाहर" का पुन: उपयोग कर सकते हैं।

  • आप कार्यों xml फ़ाइल
  • के आधार पर आप मुक्त करने के लिए कार्यों को जोड़ने (ग्रहण के आधार पर)
  • आप प्रक्रिया चल ब्राउज़ करने के लिए वेब ब्राउज़र में जीयूआई मिल जाएगा के लिए अपने GUI मिल जाएगा जोड़ने मिल जाएगा, शुरू नया, और कार्यों की वर्तमान स्थिति देखें: http://activiti.org/userguide/index.html#N12E60
  • आपको रिपोर्टिंग इंजन मुफ्त में मिलेगा, जहां आप रिपोर्ट और चार्ट देख सकते हैं ("कार्य कितने समय तक लेते थे", "प्रक्रिया कितनी देर चल रही थी"
  • आपको मुफ्त में आरईएसटी एपीआई मिल जाएगी। अन्य आवेदन abl होगा ई सरल आरईएसटी कॉल के माध्यम से अपने आवेदन की वर्तमान स्थिति प्राप्त करने के लिए

तो इस दिशा में आपको कई चीजें मुफ्त में मिलेंगी। प्रोग्रामर पॉइंट ऑफ व्यू से आप उदाहरण के लिए गतिविधि एपीआई से Task कक्षा से प्राप्त कर सकते हैं। देर से जब कार्य पूरा हो जाता है

taskService.complete(task.getId(), taskVariables); 

आप एक और रास्ता भी जा सकते हैं। तो यह मानते हुए कि पृष्ठभूमि में गणना करने वाली आपकी कक्षा को गणना टास्क कहा जाता है, आप गतिविधि कार्य के नए उदाहरण के साथ कैलकुटाइन टास्क को जोड़ सकते हैं। इसके द्वारा आपको गतिविधि प्रक्रिया इंजन के लिए एक पुल मिलेगा। तो अगर आप की तरह

class CustomActivityTask extends Task { // inherit from Activity Task class to add your own fields 
    private int someStateOne; 
    private String someOtherState; 

    (...) 
    // getters and setters 

} 

class CalculationTask { 
    private CustomActivityTask avtivityTask; // by updating the state of this task you are updating the state of the task in Activity process engine 
    private RuntimeService activityRuntimeServiece; 

    public void run() { // this is your execution functin 

     while (true) { 
     // calulate 
     activityTask.setSomeStateOne(45) 
     activityTask.setSomeOtherState("Task is almost completing..."); 

     (...) 

     if (allCompleted) { 
      activityRuntimeServiece.complete(avtivityTask.getId(), taskVariables); 
      break; 

     } 

    } 
} 
4

जावा दुनिया में कुछ कर सकते हैं, आपके उपयोग के मामले (व्यवसाय प्रक्रिया प्रबंधन) बीपीएम के रूप में कहा जाता है।

नेट दुनिया में, इसे विंडोज वर्कफ़्लो फाउंडेशन (डब्ल्यूडब्ल्यूएफ) कहा जाता है।

कई जावा आधारित ओपन सोर्स बीपीएम टूल्स हैं। मुझे पसंद है jBPM

यह अधिक शक्तिशाली है और Drools जैसे नियम इंजनों के साथ एकीकृत किया जा सकता है।

नमूना jBPM स्क्रीनशॉट: jBPM Diagram

इसके अलावा Activiti एक और अच्छा विकल्प है।

नमूना activiti स्क्रीनशॉट: Activiti Diagram

+0

जेबीपीएम आकार और अद्यतन कर सकता हूं आकार में 400 एमबी है और मौजूदा वर्गों के साथ उपयोग करना आसान नहीं है। हालांकि सक्रियता सरल दिखती है। – SMUsamaShah

2

Apache Camel एक खुला स्रोत एकीकरण रूपरेखा है कि एक हल्के कार्यप्रवाह प्रणाली के रूप में इस्तेमाल किया जा सकता है। रूट्स को जावा, एक्सएमएल, ग्रोवी या स्कैला डीएसएल के साथ परिभाषित किया जा सकता है। अपाचे कैमल में एकीकृत निगरानी क्षमता शामिल है। इसके अलावा आप बाहरी निगरानी उपकरण जैसे Hawtio का उपयोग कर सकते हैं।

Work Flow in Camel vs BPM पर भी एक नज़र डालें।

2

शायद State Chart XML (SCXML) आपकी मदद कर सकता है। वर्तमान में यह डब्ल्यू 3 सी

द्वारा प्रकाशित एक कार्यशील ड्राफ्ट विनिर्देश है, एससीएक्सएमएल हरेल स्टेट टेबल्स के आधार पर एक सामान्य राज्य-मशीन आधारित निष्पादन वातावरण प्रदान करता है।

अपाचे नींव एक जावा कार्यान्वयन प्रदान करता है जिसे हम (मेरी कंपनी) वर्तमान में "नौकरियों" पर राज्य-संक्रमण करने के लिए उपयोग कर रहे हैं। यहाँ अपाचे Commons SCXML कार्यान्वयन

1

कॉपर इंजन http://copper-engine.org/

activiti और ​​इस तरह, यह की आवश्यकता नहीं पड़ती पर एक नजर डालें एक्सएमएल के लिए ढेर लिखने के लिए सिर्फ एक सरल कार्यप्रवाह

+0

यह दस्तावेज नहीं है। मुझे इसकी मदद कहां मिल सकती है, एपीआई आदि? – SMUsamaShah

+0

जावाडोक मेवेन सेंट्रल से एक जार के रूप में उपलब्ध है और इसके कारण उनके गिटूब पर नहीं है ... कुछ कारण। वैसे भी, मेरी टीम ने तांबे को काफी कमी महसूस की। इसमें वर्कफ़्लो सिस्टम से अपेक्षा की जाने वाली कुछ मौलिक चीजें नहीं हैं - जैसे एक सीमित राज्य मशीन को परिभाषित करने की क्षमता। वर्कफ़्लो बहुत अधिक एफएसएम है और तांबे की इसकी कोई अवधारणा नहीं है। आप बस जावा क्लास को परिभाषित करते हैं और जब आप प्रतीक्षा() के अपने कस्टम संस्करण का उपयोग कर बाहरी घटनाओं को पूरा करने की प्रतीक्षा कर रहे होते हैं तो मतदान करना होता है। मैं लोगों को कहीं और देखने के लिए प्रोत्साहित करता हूं। – chairbender

2

जा रहा अपने विश्लेषण तो प्राप्त करने के लिए है समय लेने वाली है और आपको तत्काल प्रतिक्रिया की आवश्यकता नहीं है, तो शायद आपको वर्कफ़्लो इंजन की आवश्यकता नहीं है, लेकिन बैच प्रोसेसर पर भी। Spring Batch प्रोजेक्ट पर एक नज़र डालें जिसका उपयोग Camel Apache के साथ किया जा सकता है (इस विकल्प के बारे में अधिक जानकारी के लिए मेरा दूसरा उत्तर देखें)।

1

मैं निश्चित रूप से the Apache Storm project पर विचार करता हूं। तूफान को आसानी से एक्स्टेंसिबल, समानांतर गणना इंजन के रूप में डिज़ाइन किया गया है। इसकी कई विशेषताओं में से, प्रबंधन की आसानी, गलती सहनशीलता और सामान्य सादगी स्थापित करने के लिए (हडोप जैसी अन्य समान तकनीकों की तुलना में, मुझे विश्वास है) शायद प्रोटोटाइप सिस्टम के लिए आपके लिए आकर्षक होने जा रहे हैं।

वर्कफ़्लो तूफान टोपोलॉजीज के समान होगा; विभिन्न कार्य धाराएं होंगी; और कार्यों में विभिन्न विधियां spouts और bolts से मेल खाती हैं। इसके अलावा, तूफान अपने एपीआई में हडोप की तरह कई प्रोग्रामिंग भाषाओं का समर्थन करता है।

तूफान को शुरुआत में ट्विटर द्वारा डिजाइन किया गया था और फिर खुले स्रोत, जैसे कि कैसंद्रा (फेसबुक) और हडोप स्वयं (याहू!) जैसी अन्य परियोजनाओं के समान। उपयोगकर्ता के रूप में आपके लिए इसका अर्थ यह है कि यह पूरी तरह से सैद्धांतिक अवधारणा के बजाय वास्तविक उपयोग के लिए बनाया गया था। यह भी सुंदर लड़ाई का परीक्षण किया गया है।

मुझे आशा है कि यह आपके लिए उपयोगी होगा, और आपको अपनी परियोजना के साथ शुभकामनाएं देता है!

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