2012-04-05 18 views
8

मैं लोड समय अगले रास्ते में (Perf4J साथ रूपरेखा करने के लिए) बुनाई कॉन्फ़िगर करने की कोशिश की। तैनात किए जाने पर, मेटा-आईएनएफ आर्टिफैक्ट रूट निर्देशिका में रखा गया है (यानी MyAppDeployed/META-INF)।AspectJ और Tomcat के साथ लोड-टाइम बुनाई को कॉन्फ़िगर कैसे करें?</p> <p>1) मैं <code>META-INF</code> फ़ोल्डर में <code>aop.xml</code> कहा:

2) मैं पर Tomcat/lib फ़ोल्डर में (aspectjrt-1.6.1.jar, aspectjweaver-1.6.1.jar, commons-jexl-1.1.jar, commons-logging.jar डाल पहले मैं MyAppDeployed/WEB-INF/libs की कोशिश की लेकिन यह भी काम नहीं किया)।

3) मैंने टॉमकैट शुरू करते समय वीएम विकल्पों में -javaagent:C:\apache-tomcat-6.0.33\lib\aspectjweaver-1.6.1.jar जोड़ा।

4) मेरे aop.xml:

<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"> 

<aspectj> 

    <aspects> 
     <aspect name="org.perf4j.log4j.aop.TimingAspect"/> 
    </aspects> 

    <weaver options="-verbose -showWeaveInfo">   
     <include within="com.mypackages.MyClass"/> 
    </weaver> 
</aspectj> 

मैं कोई लक्षण नहीं दिख रहा है कि लोड समय बुनाई होता है। न तो त्रुटि-रिपोर्ट और न ही आवश्यक परिणाम। मैं केवल त्रुटि संदेश है:

Error occurred during initialization of VM 
agent library failed to init: instrument 
Error opening zip file: C:\apache-tomcat-6.0.33\lib\wrong-jar.jar 
एक मामले में

एक javaagent पैरामीटर निर्दिष्ट जब जब मैं एक aspectjweaver-1.6.1.jar नाम पर एक गलती करते हैं। अगर यह सही ढंग से लिखा गया है - कोई त्रुटि संदेश मुद्रित नहीं होते हैं।

कोई विचार, मैं क्या गलत कर रहा हूं?

पीएस मैं जावा 5 का उपयोग करता हूं, और मैंने वही चीजों के साथ पहलू के 1.5.4 संस्करण के साथ एक ही चीजों की कोशिश की।

+0

क्या आपने कभी इस मुद्दे को समझ लिया था? मैं ग्रहण में लोड समय बुनाई के साथ Aspectj + tomcat को कॉन्फ़िगर करने की कोशिश कर रहा हूं। विशेष रूप से मैं जेएसपी के बुनाई की कोशिश कर रहा हूं लेकिन मुझे कोई भाग्य नहीं है। – bsimic

+0

मेरे पास एक समान स्थिति है लेकिन जब यह मेरे कार्यान्वयन वर्ग पर एनोटेशन है तो यह काम कर रहा है। क्या आपका com.mypackages.MyClass एक इंटरफ़ेस या कार्यान्वयन है? इंटरफ़ेस पर एनोटेशन होने पर मेरे पहलू बुनाई नहीं कर रहे थे। इसके अलावा एक और बात है कि मेरे पास aop.xml फ़ाइल है ../webapps/MyAppDeployed/WEB-INF/classes/META-INF/aop.xml यह सुनिश्चित नहीं करता कि इससे कोई फर्क पड़ता है या नहीं। – dineshr

उत्तर

4

आप लोड समय बुनाई का उपयोग करना चाहते हैं, तो आप पहले javac के साथ अपनी कक्षाओं को संकलित कर सकते हैं के रूप में हमेशा की तरह तो एजेसी (i) के साथ अपने पहलू (रों) संकलन। आप की तरह

नीचे
<target name="compile-aspect"> 
    <iajc source="1.6" target="1.6" showweaveinfo="true" verbose="true" outxml="true" debug="true" outjar="${dist.dir}/myaspect.jar"> 
      <argfiles> 
        <pathelement location="${src.dir}/sources.lst"/> 
      </argfiles> 
      <classpath> 
        <path refid="master-classpath" /> 
      </classpath> 
    </iajc> 
</target> 

यह संकलन के दौरान classpath में aspectjrt.jar ("गुरु-classpath") के लिए पर्याप्त है एक चींटी कार्य के साथ ऐसा कर सकते हैं।

चूंकि मेरे सभी जावा क्लासेस $ {src.dir} में, मैं iajc को एक स्रोत सूची देता हूं। स्रोत सूची में केवल एक पंक्ति है।

sources.lst

com/xx/yy/zz/LoggingAspect.java 

जब मैं संकलन पहलू काम मैं एक जार jar_file_name.jar फ़ाइल है चलाने के रूप में

outxml="true" 
outjar="jar_file_name" 

इस प्रकार मैं iajc कार्य के गुणों में से कुछ सेट

META-INF/MANIFEST.MF 
com/xx/yy/zz/LoggingAspect.class 
META-INF/aop-ajc.xml 

और अंत में * jar_file_name.jar * को अपने वेब एप्लिकेशन के वेब-आईएनएफ/lib फ़ोल्डर में जोड़ें।

फिर -javaagents: /path_to_aspectjweaver.jar के साथ टोमकैट शुरू करें जैसा आपने पहले किया था।

जब मैं युद्ध फ़ाइल के तहत मेटा-आईएनएफ में aop.xml (या aop-ajc.xml) डालता हूं तो यह सीधे काम नहीं करता है। इस तरह (मेरा मतलब है कि एक जार में अलग-अलग पहलू वर्ग) मेरे लिए ठीक काम करता है।

उम्मीद है कि इससे मदद मिलती है।

+1

यह समाधान मेरे लिए काम किया। जिस बिंदु पर मैं लापता था और चुड़ैल स्पष्ट रूप से बहुत महत्वपूर्ण है टैग बनाते समय 'outxml = "true" टैग है। इसके बिना, आपके पास 'मेटा-आईएनएफ/एओपी-एजेसीएक्सएमएल' नहीं है जो पहलूवेवर का उपयोग यह जानने के लिए करता है कि _aspects_ लागू करने के लिए क्या हैं। –

4

मैं टोमकैट में एक ही समस्या को हल करने की कोशिश कर रहा था। -जावाजेंट विकल्प के अलावा, आपको यह सुनिश्चित करना होगा कि aop.xml वेब-आईएनएफ/कक्षाओं/मेटा-आईएनएफ डीआईआर के तहत होना चाहिए। इससे मेरे लिए अंतर आया।

+0

यह मेरे लिए भी काम किया –