2014-07-24 2 views
6

के साथ काम नहीं कर रहा है मैं ग्रहण 4.4.0 (लुना) के साथ पहलूजे का उपयोग करने की कोशिश कर रहा हूं। वाई ग्रहण के इस संस्करण के लिए उपयुक्त कोई भी एजेडीटी प्लगइन नहीं मिल सकता है।Aspectj ग्रहण लुना

वैसे भी मुझे लगता है कि AspectJ काम करना चाहिए, इसलिए मैं अपने webapp की lib निर्देशिका में AspectJ जार रखा, और इस पहलू वर्ग बनाने के लिए:

@Aspect 
public class LoggerAspect { 

    @Before("(execution(* *.*(..))") 
    public void intercept(JoinPoint jp) { 
     System.out.print("before"); 
    } 

    @After("(execution(* *.*(..))") 
    public void afterReturning(JoinPoint jp) { 
     System.out.print("after"); 
    } 

    @AfterThrowing(pointcut = "execution(* *.*(..))") 
    public void logException(JoinPoint jp, Exception t) { 
     System.out.print("throwing"); 
    } 
} 

लेकिन कुछ भी नहीं लॉग इन किया जा रहा है। मैं क्या याद कर रहा हूँ

उत्तर

4

फिर एजेडीटी का उपयोग करना चाहते हैं तो केप्लर के साथ प्रयास करें। ;-)

बीटीडब्लू, क्या आपने एजेसी (AspectJ कंपाइलर) के साथ अपने पहलू और जावा कक्षाओं को संकलित किया है? या आप उन्हें javac से संकलित करना चाहते हैं? इस मामले में आपको रनटाइम (एलटीडब्ल्यू, लोड-टाइम बुनाई) के दौरान पहलुओं को बुनाई की आवश्यकता होती है और बुनाई एजेंट (-javaagent:path/to/aspectjweaver.jar) और aop.xml में संबंधित कॉन्फ़िगरेशन की आवश्यकता होती है। जब आप मुझे बताएंगे कि आप क्या करना चाहते हैं, तो मैं इस जवाब को एक ठोस उदाहरण के साथ अपडेट कर सकता हूं।


अद्यतन: ठीक है, मैं अपने पहलू का परीक्षण किया। इसमें कुछ वाक्यविन्यास त्रुटियां और अन्य समस्याएं शामिल हैं, उदा।

  • @Before("(execution(* *.*(..))") में संख्या संख्याएं मेल नहीं खाते हैं। इसके बजाय यह @Before("execution(* *.*(..))") होना चाहिए।
  • बाद में फेंकने वाला एनोटेशन अपवाद बाध्यकारी को याद करता है। यह @AfterThrowing(pointcut = "execution(* *.*(..))", throwing = "t") होना चाहिए।

    ड्राइवर आवेदन:

अब यहाँ एक पूरी तरह से परीक्षण योग्य स्टैंड-अलोन उदाहरण है

class Application { 
    public static void main(String[] args) { 
     new Application().foo(); 
    } 

    public void foo() { 
     try { 
      sayHello("world"); 
     } 
     catch (Exception e) { 
      System.out.println("Caught exception: " + e); 
     } 
    } 

    public void sayHello(String recipient) { 
     System.out.println("Hello " + recipient + "!"); 
     throw new RuntimeException("Oops!"); 
    } 
} 

पहलू:

import org.aspectj.lang.JoinPoint; 
import org.aspectj.lang.annotation.After; 
import org.aspectj.lang.annotation.AfterThrowing; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 

@Aspect 
public class LoggerAspect { 
    @Before("execution(* *.*(..))") 
    public void intercept(JoinPoint jp) { 
     System.out.println("before " + jp); 
    } 

    @After("execution(* *.*(..))") 
    public void afterReturning(JoinPoint jp) { 
     System.out.println("after " + jp); 
    } 

    @AfterThrowing(pointcut = "execution(* *.*(..))", throwing = "t") 
    public void logException(JoinPoint jp, Exception t) { 
     System.out.println("throwing " + jp); 
    } 
} 

कैसे & आर संकलित करने के लिए संयुक्त राष्ट्र एजेसी के साथ:

ajc -sourceroots src -1.7 -d bin -cp aspectjrt.jar 

अब चलाएँ:

यह मानते हुए कि अपने स्रोत फ़ाइलों src नाम के एक निर्देशिका में हैं और आप वर्ग फ़ाइलों bin में समाप्त करना चाहते हैं, यह आप कैसे संकलन है आवेदन:

java -cp bin;aspectjrt.jar Application 

before execution(void Application.main(String[])) 
before execution(void Application.foo()) 
before execution(void Application.sayHello(String)) 
Hello world! 
after execution(void Application.sayHello(String)) 
throwing execution(void Application.sayHello(String)) 
Caught exception: java.lang.RuntimeException: Oops! 
after execution(void Application.foo()) 
after execution(void Application.main(String[])) 

कैसे LTW साथ javac & रन के साथ संकलित करने के लिए:

आप डिबग प्रतीकों के साथ संकलन करने की जरूरत (-g): अब

<?xml version="1.0" encoding="UTF-8"?> 
<aspectj> 
    <aspects> 
     <aspect name="LoggerAspect"/> 
    </aspects> 
    <weaver> 
     <include within="*"/> 
    </weaver> 
</aspectj> 

आप कर सकते हैं:

javac -g -cp aspectjrt.jar -d bin src\*.java 

आप bin\META-INF\aop.xml (या aop-ajc.xml) के तहत एक LTW विन्यास की जरूरत है इससे पहले कि आप प्रोग्राम चला सकते हैं बुनाई एजेंट का उपयोग कर आवेदन चलाएं:

java -javaagent:aspectjweaver.jar -cp bin Application 

उत्पादन ही है, लेकिन आप की तरह

<weaver options="-verbose -showWeaveInfo"> 

यह अन्य बुनकर विकल्प जोड़ सकते निम्नलिखित उत्पादन उपज चाहिए अगर आप अधिक देखना चाहते हैं:

[[email protected]] weaveinfo Join point 'method-execution(void Application.main(java.lang.String[]))' in Type 'Application' (Application.java:3) advised by before advice from 'LoggerAspect' (LoggerAspect.java) 
[[email protected]] weaveinfo Join point 'method-execution(void Application.main(java.lang.String[]))' in Type 'Application' (Application.java:3) advised by after advice from 'LoggerAspect' (LoggerAspect.java) 
[[email protected]] weaveinfo Join point 'method-execution(void Application.main(java.lang.String[]))' in Type 'Application' (Application.java:3) advised by afterThrowing advice from 'LoggerAspect' (LoggerAspect.java) 
[[email protected]] weaveinfo Join point 'method-execution(void Application.foo())' in Type 'Application' (Application.java:8) advised by before advice from 'LoggerAspect' (LoggerAspect.java) 
[[email protected]] weaveinfo Join point 'method-execution(void Application.foo())' in Type 'Application' (Application.java:8) advised by after advice from 'LoggerAspect' (LoggerAspect.java) 
[[email protected]] weaveinfo Join point 'method-execution(void Application.foo())' in Type 'Application' (Application.java:8) advised by afterThrowing advice from 'LoggerAspect' (LoggerAspect.java) 
[[email protected]] weaveinfo Join point 'method-execution(void Application.sayHello(java.lang.String))' in Type 'Application' (Application.java:16) advised by before advice from 'LoggerAspect'(LoggerAspect.java) 
[[email protected]] weaveinfo Join point 'method-execution(void Application.sayHello(java.lang.String))' in Type 'Application' (Application.java:16) advised by after advice from 'LoggerAspect' (LoggerAspect.java) 
[[email protected]] weaveinfo Join point 'method-execution(void Application.sayHello(java.lang.String))' in Type 'Application' (Application.java:16) advised by afterThrowing advice from 'LoggerAspect' (LoggerAspect.java) 
before execution(void Application.main(String[])) 
before execution(void Application.foo()) 
before execution(void Application.sayHello(String)) 
Hello world! 
after execution(void Application.sayHello(String)) 
throwing execution(void Application.sayHello(String)) 
Caught exception: java.lang.RuntimeException: Oops! 
after execution(void Application.foo()) 
after execution(void Application.main(String[])) 

आप और भी अधिक की जरूरत है, को जोड़ने वीवर विकल्पों के लिए -debug विकल्प भी।

http://download.eclipse.org/tools/ajdt/44/dev/update/:

+0

मैं ग्रहण पर बस "सर्वर पर चलाएं ..." कर रहा हूं, इसलिए मैं एक सरल जाव कर रहा हूं। – Keetah

+0

क्या आपने कभी पहले AspectJ का उपयोग किया है? मेरा मतलब है, आप कितना जानते हैं? कृपया विस्तृत करें, इसलिए मुझे पता है कि कहां से शुरू करना है। और क्या आप पहली बार एक सादे जावा एसई प्रोग्राम पर सर्वर के बिना परीक्षण कर सकते हैं? – kriegaex

+1

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

19

आप अपने pom.xml में AspectJ Maven Plugin की स्थापना की है, तो लूना में है कि काम करने के लिए, यह आप (, मेनू सहायता नए सॉफ्टवेयर इंस्टाल) निम्नलिखित अद्यतन साइट को जोड़ने के लिए पहली जरूरत लगती है

उस साइट से, AspectJ विकास उपकरण इंस्टॉल करें।

एक बार स्थापित, आप भी पसंद के माध्यम से AJDT के लिए Maven एकता स्थापित कर सकते हैं, Maven, डिस्कवरी, ओपन सूची, और फिर AspectJ m2e कौन्फ़िगरेटर का चयन।

(उपकरण स्थापित करने से पहले अंतिम चरण करने के लिए कोशिश कर रहा है, एक लापता आवश्यकता फेंक देगा: AspectJ विकास उपकरण कोर 2.1.3 जब डिफ़ॉल्ट लूना अद्यतन साइटों से AspectJ बातें स्थापित करने के लिए कोशिश कर रहा है वही त्रुटि फेंक दिया है।।)

+0

धन्यवाद अर्जुन, आपने मेरी मदद की। चरण-दर-चरण ट्यूटोरियल भी है जो एस्पेक्टजे विकास उपकरण को ग्रहण में स्थापित करने के लिए है। http://o7planning.org/web/fe/default/en/document/7174/install-aspectj-development-tools-into-eclipse –

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