2012-04-02 12 views
5

मैं pmd नियमों का सम्मान करने के लिए अपने आवेदन कोड को संशोधित कर रहा हूं। मैं इस कोड में एक बंद संसाधन त्रुटि थी:मैं पीएमडी क्लोज रिसोर्स उल्लंघन से कैसे बचूं?

Connection c = DataSourceUtils.getConnection(dataSource); 
Statement request = null; 
try { 
    request = c.createStatement(); 
    request.execute(loadDataRequest); 
} catch (SQLException e) { 
    dataLogger.error(e); 
    throw e; 
} 

तो मैं खोज की है और यह से बचने के लिए एक अपाचे उपयोगिता पाया: DButils मेरे कोड इस

Connection c = DataSourceUtils.getConnection(dataSource); 
Statement request = null; 
try { 
    request = c.createStatement(); 
    request.execute(loadDataRequest); 
} catch (SQLException e) { 
    dataLogger.error(e); 
    throw e; 
} finally { 
    DbUtils.closeQuietly(request); 
    DbUtils.closeQuietly(c);    
} 

की तरह बन गया है हालांकि, मैं अभी भी हो रही है ग्रहण और सोनार रिपोर्ट में पीएमडी अलर्ट! क्या आपको कोई विचार है कि इसे स्थायी रूप से कैसे ठीक किया जाए?

उत्तर

0

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

आपके विकल्प: 1) जोड़े // NOPMD टिप्पणी 2 को दबाने के लिए) प्राप्त/एक सुपर क्लास में कनेक्शन बंद ताकि आप केवल एक बार के लिए कोड refactor।

0

पीएमडी closeTargets नामक इस नियम के लिए पैरामीटर को परिभाषित करता है। डिफ़ॉल्ट रूप से, यह पैरामीटर close विधि पर सेट है। आप DbUtils.closeQuietly

2

निर्दिष्ट करने के लिए इसे बदल सकते हैं आप 0RCloseResource पीएमडी नियम की संपत्ति सेट कर सकते हैं। जब PMD closeTargets संपत्ति के रूप में इसी तरह के विधि के नाम पाता है, यह चेतावनी संदेश सक्रिय नहीं होगा:

<properties> 
    <property name="types" value="Connection,Statement,ResultSet"/> 
    <property name="closeTargets" value="closeQuietly, closeConnection, close"/> 
</properties> 

वैकल्पिक रूप से, आप SourceMeter है, जो इस विन्यास देशी रूप में शामिल कर सकते हैं।

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