2011-09-20 13 views
8

मैं Grails 1.3.7 के साथ क्वार्ट्ज प्लगइन का उपयोग कर रहा हूँ। मुझे एक सर्वर ऐप को बैलेंस/क्लस्टर लोड करने की आवश्यकता है जो क्वार्ट्ज नौकरियों का उपयोग करता है। स्पष्ट रूप से यह समर्थित है लेकिन मुझे लगता है कि सभी Google खोज परिणाम और दस्तावेज़ों के भीतर लिंक टूटा हुआ है। मुझे कुछ कच्चे जावा उदाहरण मिल गए हैं, लेकिन मुझे लगता है कि Grails को ऐसा करने के लिए एक और अधिक गंभीर तरीका है। टेम्पलेट के रूप में उपयोग करने के लिए मुझे बस एक साधारण उदाहरण चाहिए। मैं समझता हूं कि मुझे नौकरियों को स्टोर करने और लॉकिंग प्रबंधित करने के लिए जेडीबीसी का उपयोग करने के लिए क्वार्ट्ज को किसी भी तरह सक्षम करने की आवश्यकता है।Grails क्लस्टरिंग क्वार्ट्ज नौकरियां नमूना कोड और कॉन्फ़िगरेशन

मुझे लगता है कि एक नमूने के लिए एक लिंक यह करेगा। लेकिन सचमुच हर बार मुझे कुछ ऐसा लगता है जो वादा करता है यह टेराकोटा की साइट पर टूटे हुए लिंक को इंगित करता है। आखिरकार हर साइट पर मुझे यहां ले जाता है: http://www.opensymphony.com/quartz/wikidocs/TutorialLesson9.html लेकिन जब मैं टेराकोटा की साइट पर देखता हूं तो मुझे जावा सामान दिखाई देता है लेकिन कोई grails नहीं। यदि जावा ऐसा करने का एकमात्र तरीका है तो ऐसा ही हो, लेकिन मुझे लगता है कि वहां कहीं कुछ grails विशेषज्ञता होनी चाहिए!

टीआईए।

उत्तर

13

Grails में क्वार्ट्ज प्लगइन क्लस्टर करने के लिए, ऐसी कुछ फ़ाइलें हैं जिन्हें आपको अपनी परियोजना में शामिल करने की आवश्यकता है। सबसे पहले, grails-app/conf/QuartzConfig.groovy स्थापित करें और सुनिश्चित करें कि jdbcStore सक्षम है।

quartz { 
    autoStartup = true 
    jdbcStore = true 
    waitForJobsToCompleteOnShutdown = true 
} 

अगला, उस डेटाबेस से संबंधित हाइबरनेट कॉन्फ़िगरेशन फ़ाइलों को स्थापित करें जिन पर आप कनेक्ट होंगे। उदाहरण के लिए, Oracle के साथ, grails-app/conf/hibernate/hibernate.cfg.xml पर आधार हाइबरनेट एक्सएमएल config है:

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
'-//Hibernate/Hibernate Configuration DTD 3.0//EN' 
'http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd'> 

<hibernate-configuration> 

<session-factory> 
    <mapping resource="Quartz.oracle.hbm.xml"/> 
</session-factory> 

</hibernate-configuration> 

इस उदाहरण के लिए वास्तविक क्वार्ट्ज-हाइबरनेट एसक्यूएल फ़ाइल Quartz.oracle.hbm.xml नाम दिया जाएगा और एक ही निर्देशिका में निवास करेंगे। ये फ़ाइलें src/templates/sql के तहत, गिटहब (https://github.com/nebolsin/grails-quartz) पर क्वार्ट्ज प्लगइन पर उपलब्ध होनी चाहिए। ध्यान दें, कि ये स्क्रिप्ट केवल डेटासोर्स create और create-drop के लिए काम करने लगती हैं, इसलिए यदि आप पिछले रन से पहले से मौजूद नहीं हैं, तो आपको update पर मैन्युअल रूप से क्वार्ट्ज टेबल बनाने की आवश्यकता होगी।

एक grails-app/conf/quartz/quartz.properties फ़ाइल बनाएँ, और संपादित अपने व्यावसायिक आवश्यकताओं के अनुरूप करने के लिए है:

ऊपर गुणों से
/* Have the scheduler id automatically generated for 
* all schedulers in a cluster */ 
org.quartz.scheduler.instanceId = AUTO 
/* Don't let Quartz "Phone Home" to see if new versions 
* are available */ 
org.quartz.scheduler.skipUpdateCheck = true 

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool 
/* Configure Quartz for only one thread as the only job 
* should run once per day */ 
org.quartz.threadPool.threadCount = 4 
/* Give the thread a Thread.MIN_PRIORITY level*/ 
org.quartz.threadPool.threadPriority = 1 

/* Allow a minute (60,000 ms) of non-firing to pass before 
* a trigger is called a misfire */ 
org.quartz.jobStore.misfireThreshold = 60000 
/* Handle only 2 misfired triggers at a time */ 
org.quartz.jobStore.maxMisfiresToHandleAtATime = 2 
/* Check in with the cluster every 5000 ms*/ 
org.quartz.jobStore.clusterCheckinInterval = 5000 

/* Use the Oracle Quartz Driver to communicate via JDBC */ 
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate 
/* Have Quartz handle its own transactions with the database */ 
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 

/* Define the prefix for the Quartz tables in the database*/ 
org.quartz.jobStore.tablePrefix = QRTZ_ 
/* Tell Quartz it is clustered */ 
org.quartz.jobStore.isClustered = true 
/* Tell Quartz that properties passed to the job call are 
* NOT all String objects */ 
org.quartz.jobStore.useProperties = false 

/* Detect the jvm shutdown and call shutdown on the scheduler */ 
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin 
org.quartz.plugin.shutdownhook.cleanShutdown = true 

/* Log the history of triggers and jobs */ 
org.quartz.plugin.triggerHistory.class = org.quartz.plugins.history.LoggingTriggerHistoryPlugin 
org.quartz.plugin.jobHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin 

ध्यान दें, आप प्रासंगिक नौकरी और ट्रिगर ट्रिगर जानकारी लॉग इन करने के Config.groovy की log4j सेटअप में org.quartz.plugins सेट कर सकते हैं। मुझे लगता है कि info स्तर पर्याप्त होना चाहिए।

संपादित करें, या बनाएं, scripts/_Events.groovy और निम्न युद्ध संशोधन बंद करें। यह प्लगइन से रिक्त स्थान की बजाय अंतिम युद्ध फ़ाइल में, सही quartz.properties को स्थापित करने के लिए ज्ञात क्वार्ट्ज प्लगइन बग को हल करता है।

eventCreateWarStart = { warName, stagingDir -> 
    // Make sure we have the correct quartz.properties in the 
    // correct place in the war to enable clustering 
    ant.delete(dir:"${stagingDir}/WEB-INF/classes/quartz") 
    ant.copy(file:"${basedir}/grails-app/conf/quartz/quartz.properties", 
     todir:"${stagingDir}/WEB-INF/classes") 
} 

और तुम किया जाना चाहिए ...

पी.एस. आप एक Oracle डेटाबेस का उपयोग कर रहे हैं, तो निर्भरता ब्लॉक में BuildConfig.groovy के लिए निम्न जोड़ते हैं, ताकि आप क्वार्ट्ज-ओरेकल संचार ड्राइवरों की पहुंच है:

runtime("org.quartz-scheduler:quartz-oracle:1.7.2") { 
    // Exclude quartz as 1.7.3 is included from the plugin 
    excludes('quartz') 
} 

पी पी एस लिंक पर एसक्यूएल फ़ाइलों से ऊपर हैं बस एसक्यूएल।एक हाइबरनेट फाइल करने के लिए इसे करने के लिये (w/ओरेकल उदाहरण फिर से) एक हाइबरनेट database-object नोड के साथ प्रत्येक व्यक्ति एसक्यूएल आदेश के चारों ओर, जैसे इतना:

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    '-//Hibernate/Hibernate Mapping DTD 3.0//EN' 
    'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'> 

<hibernate-mapping> 

    <database-object> 
     <create> 
     CREATE TABLE QRTZ_JOB_DETAILS (
     JOB_NAME VARCHAR2(200) NOT NULL, 
     JOB_GROUP VARCHAR2(200) NOT NULL, 
     DESCRIPTION VARCHAR2(250) NULL, 
     JOB_CLASS_NAME VARCHAR2(250) NOT NULL, 
     IS_DURABLE VARCHAR2(1) NOT NULL, 
     IS_VOLATILE VARCHAR2(1) NOT NULL, 
     IS_STATEFUL VARCHAR2(1) NOT NULL, 
     REQUESTS_RECOVERY VARCHAR2(1) NOT NULL, 
     JOB_DATA BLOB NULL, 
     PRIMARY KEY (JOB_NAME,JOB_GROUP) 
     ) 
     </create> 
     <drop>DROP TABLE QRTZ_JOB_DETAILS</drop> 
     <dialect-scope name='org.hibernate.SomeOracleDialect' /> 
    </database-object> 
... 
    <database-object> 
     <create>INSERT INTO QRTZ_LOCKS VALUES('TRIGGER_ACCESS')</create> 
     <drop></drop> 
     <dialect-scope name='org.hibernate.SomeOracleDialect' /> 
    </database-object> 
... 
</hibernate-mapping> 

dialect-scope हाइबरनेट यह बताती है कि डाटाबेस बनाने बोलियों और गिरावट के साथ नोड्स का इस्तेमाल किया जाना चाहिए। आप इसे छोड़कर देख सकते हैं कि यह काम करता है या नहीं, अन्यथा आपको अपने Grails डेटासोर्स द्वारा उपयोग की जाने वाली MySQL बोली को जोड़ना पड़ सकता है।

+0

विस्तृत प्रतिक्रिया के लिए आपको बहुत बहुत धन्यवाद। ऐसा लगता है कि मैं वास्तव में जिस जानकारी की तलाश में था। मैं अमेज़ॅन के आरडीएस का उपयोग डीबी के रूप में कर रहा हूं जो MySQL है। एक बार फिर धन्यवाद। –

+0

मैं Quartz.mysql.innodb.hbm.xml नामक फ़ाइल नहीं ढूंढ पा रहा हूं। मुझे table_mysql_innodb.sql मिल गया है, लेकिन इसके ऊपर नमूना एक्सएमएल कोड में इसका तात्पर्य है कि मुझे –

+0

सेट करना चाहिए, मैं Quartz.mysql.innodb.hbm.xml नामक फ़ाइल नहीं ढूंढ पा रहा हूं। मुझे table_mysql_innodb.sql मिल गया है, लेकिन इसके ऊपर नमूना एक्सएमएल कोड में इसका तात्पर्य है कि मुझे सेट करना चाहिए। मैंने जिथब से चेक किए गए सभी कोड की खोज की है और ऐसी कोई XML फ़ाइल नहीं है। मैं क्षमा चाहता हूं लेकिन मैं इन सबके लिए नया हूं। मेरा डेटाबेस अमेज़ॅन के आरडीएस MySQL है IoDB का उपयोग कर। मुझे लगता है कि मुझे समझने के लिए क्वार्ट्ज और हाइबरनेट कॉन्फ़िगरेशन में बहुत गहराई से जाना होगा। मेरे पास एक लंबा दिन रहा है, शायद जब मैं इसे सब सुबह देखता हूं तो यह और अधिक समझ में आता है! Thx –

0

स्वीकृत उत्तर थोड़ा सा दिनांकित है। Grails के हाल के संस्करणों के साथ एक सरल समाधान के लिए यह प्रश्न देखें: Using grails datasources in quartz plugin

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