2014-06-16 5 views
7

मैंने अपने आवेदन में audit-logging प्लगइन स्थापित किया है। Grails संस्करण 2.1.1 है और प्लगइन संस्करण 1.0.1 है।लेखापरीक्षा-लॉगिंग प्लगइन का उपयोग कर ग्रिल में डाले गए डबल रिकॉर्ड

मेरी Config.groovy कक्षा में, मैं इस

auditLog { 
    verbose = true // verbosely log all changed values to db 
    logIds = true // log db-ids of associated objects. 
    // Note: if you change next 2 properties, you must update your database schema! 
    tablename = 'audit_logs' // table name for audit logs. 
    transactional = false 
    actorClosure = { request, session -> 
     org.apache.shiro.SecurityUtils.getSubject()?.getPrincipal() 
    } 

जोड़ लिया है और मेरे डोमेन वर्ग में मैं इस

class Survey { 
    static auditable = true 
    static final int NO_RUNNING_SURVERY = 0 
    static final int RUNNING_SURVERY = 1 

    static final int CALL_NO_Record_SURVEY = 0 
    static final int CALL_Record_SURVEY = 1 

    static final int REALTIME_SURVEY = 0 
    static final int HISTORICAL_SURVEY = 1 
    static final int STANDARD_SURVERY = 2 

    String name 
    String description 
    int status 
} 

जब मैं जोड़ने, हटाने और कुछ बात अद्यतन जोड़ लिया है। मेरी audit_logs तालिका में, एक ऑपरेशन के खिलाफ डबल रिकॉर्ड डाला गया उदा। मैं अपने नियंत्रक वर्ग

def stopSurvey(Long id) { 
     def survey = Survey.findById(params['stop']) 
     survey.status = Survey.NO_RUNNING_SURVERY 


     redirect(action: "list") 
    } 

से स्थिति मान बदलते हैं तो यह प्रति कॉल दो रिकॉर्ड डाल देता है।

+2

मैं बिना 'actorClosure' (Shiro का उपयोग नहीं किया) एक ही परीक्षण किया है और मैं इस व्यवहार को नहीं दिख रहा। क्या आप इस समस्या को दोहराने वाले जिथब में नमूना ऐप साझा कर सकते हैं (शिरो का उपयोग करके)? मैंने देखा है कि आपने नियंत्रक में एक कस्टम पहचानकर्ता का उपयोग किया है जिसे मैं कहीं भी मैप किए गए डोमेन क्लास में नहीं देखता हूं। – dmahapatro

उत्तर

1

यहां भी इस व्यवहार को नहीं देखा। कई परियोजनाओं में इस प्लगइन का उपयोग करना। क्या आप कृपया verbose = false सेट कर सकते हैं और फिर परीक्षण कर सकते हैं? यदि समस्या तब भी होती है, तो इसका मतलब है कि घटनाओं को न केवल एक बार निकाल दिया जा सकता है।

एक छोटा टेस्टएप बहुत अच्छा होगा।

Btw: हम कितने ईवेंट audit_log तालिका में जमा हो जाती है के लिए जाँच करने के लिए प्लग-इन परियोजना निहित परीक्षण आवेदन (ऑडिट परीक्षण) में स्पॉक परीक्षण का उपयोग करें। इसलिए मैं आपके ऐप में एक एज केस या एक विशिष्ट समस्या मानता हूं।

+1

मैंने verbose = झूठा किया है लेकिन कुछ नहीं हुआ। :(। जब मैं डिबगर चलाने के लिए और प्लगइन समारोह getActor में से एक (में तोड़ सूचक निशान)। इस समारोह कॉल अनुरोध के अनुसार पर तीन बार। मुझे नहीं अपने आवेदन में किसी भी समस्या नहीं बल्कि उसके बाद यह एक –

+0

फॉलो-अप टिप्पणियाँ दिख रहा है। जेआईआरए टिकट पर GPAUDITLOGGING-64 – Bertl

2

@Bertl

मैं इस समस्या पाया है, मुझे लगता है, समस्या प्लगइन में है। मेरा एप्लिकेशन तीन डेटाबेस का उपयोग करता है, एक मुख्य डेटाबेस है और अन्य दो अन्य उद्देश्यों के लिए हैं। मेरा डेटाबेस स्रोत निम्नानुसार है।

dataSource.driverClassName = net.sourceforge.jtds.jdbcx.JtdsDataSource 
dataSource.dbCreate = update 
dataSource.url = jdbc:jtds:sqlserver://localhost:1433/test 
dataSource.username = test 
dataSource.password = 123 

       #TEST1 
dataSource_TEST1.driverClassName = net.sourceforge.jtds.jdbcx.JtdsDataSource 
dataSource_TEST1.readOnly = true 
dataSource_TEST1.url = jdbc:jtds:sqlserver://xxx.xxx.xxx.xxx:1433/test1 
dataSource_TEST1.username = test1 
dataSource_TEST1.password = 123 


#     TEST2 
dataSource_TEST2.driverClassName = net.sourceforge.jtds.jdbcx.JtdsDataSource 
dataSource_TEST2.readOnly = true 
dataSource_TEST2.url = jdbc:jtds:sqlserver://xxx.xxx.xxxx.xxx:1433/test2 
dataSource_TEST2.username = test2 
dataSource_TEST2.password = 123 

जब मैं केवल test डेटा स्रोत का उपयोग करें और अन्य dataSources निकालने के लिए, यह एक रिकॉर्ड डाल देता है। जब मैं दो डेटा स्रोतों का उपयोग करता हूं तो यह audit logging तालिका में दो reocrd डालें। जब मैं तीन डेटा स्रोतों का उपयोग करता हूं तो यह ऑडिट लॉगिंग में तीन रिकॉर्ड डालता है। मुझे सभी तीन डेटाबेस की आवश्यकता है लेकिन यह समस्या पैदा करता है। अब मुझे क्या करना चाहिए?

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

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