2010-12-09 17 views
15

जांचे हुए अपवादों के कारण, हम सभी अपवादों को सही जगह में पकड़ा हो रही उत्पादन में कुछ समस्याएं हैं और सही ढंग से लॉग इन कर सकते हैं।लेखा परीक्षा जावा: (? AOP) फेंक दिया/पकड़ा अपवाद पता लगाने के लिए प्रणाली

मुझे आश्चर्य है कि अगर वहाँ इन समस्याओं को लेखा परीक्षा के साथ मदद करने के लिए कुछ खुला स्रोत उपकरण है।

उदाहरण के लिए, क्या कुछ एओपी उपकरण है जो सभी अपवादों को फेंक दिया जाएगा और देखें कि क्या उन्हें फिर से फेंक दिया गया है, लपेटा या लॉग किया गया है? इससे खराब कैच की पहचान करने में मदद मिलेगी।

+0

अरे कोई नहीं जानता? :) –

+0

क्या आपके पास अच्छी कोड कवरेज के साथ यूनिट परीक्षण हैं? – pstanton

उत्तर

2

मुझे पता है:

लिए एक अच्छा स्थान प्रलेखन के मामले में शुरू करने के लिए स्प्रिंग डॉक्स में AOP अध्याय है सवाल एक खुला स्रोत समाधान के लिए पूछता है। मुझे एक के बारे में पता नहीं है, लेकिन यदि विकल्प है तो DynaTraceठीक जो आप चाहते हैं। आपकी सर्च के लिए शुभकामनाएं।

2

ऐसे टूल हैं जैसे FindBugs, पीएमडी और चेकस्टाइल जो कुछ सामान्य अपवाद हैंडलिंग मुद्दों की पहचान कर सकते हैं। मुझे कभी ऐसा टूल नहीं देखा जाता है जो विशेष रूप से आपके अपवाद हैंडलिंग का विश्लेषण करता है, अगर कोई जानता है कि मुझे दिलचस्पी होगी!

4

आप तय कर लिया है कि आप AOP मार्ग लेना चाहते हैं, तो वसंत फ्रेमवर्क एक आसान AOP ढांचे का उपयोग करने के लिए प्रदान करता है। अनिवार्य रूप से, वसंत की तरह, आप एक एक्सएमएल कॉन्फ़िगरेशन फ़ाइल और कुछ जावा कोड के संयोजन का उपयोग करेंगे जो एओपी कार्यक्षमता को परिभाषित करने के लिए करते हैं।

आपके मामले में, मेरा मानना ​​है कि आप 'फेंकने के बाद सलाह' को परिभाषित करना चाहते हैं, जिसमें आपको निश्चित रूप से अपवाद के लिए उपयोग करना होगा। ओह http://static.springsource.org/spring/docs/2.5.x/reference/aop.html

, और मेरा मानना ​​है कि सभी स्प्रिंग परियोजनाओं खुला स्रोत के रूप में अच्छी तरह से कर रहे हैं =)

+1

मुझे एओपी करने के लिए उपकरण पता हैं और थोड़े से देखते हैं कि कैसे, लेकिन जानना चाहते हैं कि किसी ने पहले से ही किया है! :) –

+0

मैंने निश्चित रूप से वसंत एओपी का उपयोग किया है, लेकिन आप जो भी सोच रहे हैं उसके साथ कुछ भी नहीं। मैंने उन घटकों को स्टब करने के लिए एक देव उपकरण के रूप में अधिक उपयोग किया है, जिन्हें अभी तक कोडित किया गया है या मेरे पास अभी तक पहुंच नहीं है। आखिरकार, मेरे एओपी कोड में से कोई भी उत्पादन में कभी नहीं चला है। आप जो करने के बारे में बात कर रहे हैं वह निश्चित रूप से अधिक है कि एओपी पारंपरिक रूप से कैसे उपयोग किया जाता है, लेकिन आपको ओओ आवेदन के भीतर एओपी डिज़ाइन के तत्वों को लागू करना है या नहीं, इसके बारे में निर्णय लेना होगा। ओओ purists shudder हो सकता है, लेकिन मैं कहूंगा कि यह निश्चित रूप से एक उपयोगी उपकरण है! =) – Kai

+0

असल में एओपी केवल देव उद्देश्य के लिए नहीं है और मैं पूरी तरह से एओपी उद्देश्यों के लिए फिट करना चाहता हूं -> लेखा परीक्षा, लॉगिंग, लेनदेन प्रबंधन, सुरक्षा ... –

1

मैं इस सटीक सवाल किया था, और मैं कुछ अपने आप को लिखने का प्रयास किया, और AOP नेस्टेड प्रॉक्सी और instrumenation/बुनाई उपयोग करने की क्षमता की कमी के कारण, मैं छोड़ दिया और बस एक विस्तृत खोज, प्रतिस्थापित किया

एक वह उपकरणों की मैं वापस तो था के लिए AppSight बीएमसी सॉफ्टवेयर के द्वारा पता चला है, लेकिन यह उच्च लागत एक मुद्दा था है

1

इंटेलीजे के इंस्पेक्टर कई समस्याओं के लिए कोड की जांच कर सकते के रूप में आप इसे लिखते:

http://www.jetbrains.com/idea/documentation/inspections.jsp

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

हम लॉगिंग, ट्रेसिंग, प्रदर्शन गणना आदि करने के लिए हमारे उत्पादन प्रणालियों के लिए स्प्रिंग पहलुओं का उपयोग करते हैं। पहले, बाद में, और अपवाद सलाह अद्भुत काम करते हैं - वे कोड को एक ही स्थान पर रखते हैं और घोषित लचीलापन देते हैं कि उन्हें कहां लागू किया जाता है ।

सिर्फ एक सावधानी: पहलू मुक्त नहीं हैं। वे आपके द्वारा लागू प्रत्येक विधि को लागत जोड़ते हैं, इसलिए उन्हें केवल ढेर न करें। सभी चीजों में संयम कुंजी है।

0

मैंने नहीं किया कि हालांकि अभी तक, लेकिन एक समाधान है, यदि आप उत्पादन envirionment पर फेंका अपवाद का पता लगाने की जरूरत नहीं है, अपने जावा अनुप्रयोग है कि जब भी एक अपवाद उठाया है शुरू किया जा सकता एक कस्टम डिबगर को संलग्न करने के लिए है के बारे में ।

इसे कैसे करना के बारे में यह फ्रेंच ब्लॉग लेख बात: Xdebug -Xrunjdwp: परिवहन = dt_socket, पता = 8000, सर्वर = y

डिबग के साथ रन: http://blog.xebia.fr/2011/12/12/legacy-code-gestion-des-exceptions-avec-jpda/

यहाँ कोड है , = n

कनेक्ट निलंबित JVM करने के लिए:

public static VirtualMachine connect(String port) throws IOException, IllegalConnectorArgumentsException { 
     AttachingConnector connector = null; 
     VirtualMachineManager vmManager = Bootstrap.virtualMachineManager(); 
     for (Connector aconnector : vmManager.allConnectors()) { 
      if ("com.sun.jdi.SocketAttach".equals(aconnector.name())) { 
    connector = (AttachingConnector) aconnector; 
    break; 
    } 
} 
Map<String, Connector.Argument> args = connector.defaultArguments(); 
     Connector.Argument pidArgument = args.get("port"); 
     pidArgument.setValue(port); 
     return connector.attach(args); 
} 

अपने breakpoints बनाएँ। उदाहरण के लिए:

public static void createExceptionBreakPoint(VirtualMachine vm) { 
     EventRequestManager erm = vm.eventRequestManager(); 
     List<ReferenceType> referenceTypes = vm.classesByName("java.lang.Throwable"); 
     for (ReferenceType refType : referenceTypes){ 
    ExceptionRequest exceptionRequest = erm.createExceptionRequest(refType, true, true); 
    exceptionRequest.setEnabled(true); 
} 
} 

और फिर अपवाद संभाल:

public static void handleExceptionEvent(ExceptionEvent exceptionEvent) throws Exception { 
     ObjectReference remoteException = exceptionEvent.exception(); 
     ThreadReference thread = exceptionEvent.thread(); 
     List<Value> paramList = new ArrayList<Value>(1); 
     paramList.add(dumpFileName); 
     //crer un printStream dans la JVM cible 
     ObjectReference printStreamRef = printStreamClassType.newInstance(thread, printStreamConstructor, paramList, 
      ObjectReference.INVOKE_SINGLE_THREADED); 
    ReferenceType remoteType = remoteException.referenceType(); 
    Method printStackTrace = (Method) remoteType.methodsByName("printStackTrace").get(1); 
    paramList.clear(); 
    paramList.add(printStreamRef); 
    remoteException.invokeMethod(thread, printStackTrace, paramList, ObjectReference.INVOKE_SINGLE_THREADED); 
    Scanner scanner = new Scanner(new File(dumpFileName.value())); 
    while (scanner.hasNextLine()){ 
    System.out.println(scanner.nextLine()); 
} 
} 

थोड़ा भारी है, लेकिन यह काम करता है, अब कैसे अपवाद लॉग इन कर रहे है कि और दूसरों को पकड़ने के लिए?

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