2012-04-05 33 views
8

Tôi đã cố định cấu hình thời gian tải dệt (để làm hồ sơ với Perf4J) theo cách tiếp theo:Làm thế nào để cấu hình thời gian tải dệt với AspectJ và Tomcat?

1) Tôi đã thêm aop.xml vào thư mục META-INF. Khi được triển khai, META-INF được đặt trong thư mục gốc tạo tác (ví dụ: MyAppDeployed/META-INF).

2) Tôi đặt aspectjrt-1.6.1.jar, aspectjweaver-1.6.1.jar, commons-jexl-1.1.jar, commons-logging.jar vào thư mục Tomcat/lib (lúc đầu tôi đã cố gắng MyAppDeployed/WEB-INF/libs nhưng nó cũng không làm việc).

3) Tôi đã thêm -javaagent:C:\apache-tomcat-6.0.33\lib\aspectjweaver-1.6.1.jar vào các tùy chọn VM khi khởi động Tomcat.

4) My 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> 

Tôi không thấy bất kỳ dấu hiệu cho thấy thời gian nạp dệt xảy ra. Cả báo cáo lỗi cũng như kết quả không cần thiết. Thông báo lỗi duy nhất tôi có là:

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 

trong trường hợp tôi nhầm lẫn trong tên aspectjweaver-1.6.1.jar khi chỉ định tham số javaagent. Nếu nó được viết chính xác - không có thông báo lỗi nào được in.

Bất kỳ ý tưởng nào, tôi đang làm gì sai?

P.S. Tôi sử dụng Java 5 và tôi đã thử những điều tương tự với phiên bản 1.5.4 của aspectj với kết quả giống hệt nhau.

+0

Bạn đã bao giờ tìm ra vấn đề này chưa? Tôi đang cố gắng để cấu hình Aspectj + tomcat với thời gian tải dệt trong Eclipse. Cụ thể là tôi đang cố gắng dệt JSP nhưng không có may mắn. – bsimic

+0

Tôi có một tình huống tương tự nhưng có nó hoạt động khi chú thích là trên lớp thực hiện của tôi.Đó là com.mypackages.MyClass của bạn một giao diện hoặc thực hiện? Các khía cạnh của tôi không được dệt khi tôi có chú thích trên giao diện. Ngoài ra một điều nữa tôi có tập tin aop.xml dưới ../webapps/MyAppDeployed/WEB-INF/classes/META-INF/aop.xml không chắc chắn nếu điều đó tạo ra sự khác biệt. – dineshr

Trả lời

4

Nếu bạn muốn sử dụng thời gian tải dệt, trước tiên bạn có thể biên dịch các lớp học của bạn với javac như bình thường sau đó biên dịch khía cạnh của bạn (s) với (i) AJC. Bạn có thể làm điều này với một nhiệm vụ kiến ​​như dưới đây

<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> 

Nó là đủ để có aspectjrt.jar trong classpath ("master-classpath") trong quá trình biên dịch.

Vì tất cả các lớp Java của tôi trong $ {src.dir}, tôi cung cấp danh sách nguồn cho iajc. Trong danh sách nguồn chỉ có một dòng.

sources.lst

com/xx/yy/zz/LoggingAspect.java 

tôi thiết lập một số thuộc tính nhiệm vụ iajc như sau

outxml="true" 
outjar="jar_file_name" 

Khi tôi chạy biên dịch-khía cạnh công việc tôi có một jar jar_file_name.jar tập tin chứa

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

Và cuối cùng thêm * jar_file_name.jar * vào thư mục WEB-INF/lib của ứng dụng web của bạn.

Sau đó bắt đầu Tomcat với -javaagents: /path_to_aspectjweaver.jar như bạn đã làm trước đây.

Khi tôi đặt aop.xml (hoặc aop-ajc.xml) vào META-INF dưới tệp chiến tranh trực tiếp, nó không hoạt động. Bằng cách này (tôi có nghĩa là các lớp khía cạnh tách biệt thành một cái lọ) chỉ hoạt động tốt cho tôi.

Hy vọng điều này sẽ hữu ích.

+1

Giải pháp này làm việc cho tôi. Điểm mà tôi đã bỏ lỡ và phù thủy rõ ràng là rất quan trọng là thẻ 'outxml =" true "' khi xây dựng. Nếu không có điều này, bạn không có 'META-INF/aop-ajc.xml' mà aspectjweaver sử dụng để biết những gì là _aspects_ để áp dụng. –

4

Tôi đã cố gắng giải quyết cùng một vấn đề trong Tomcat. Ngoài tùy chọn -javaagent, bạn cần đảm bảo aop.xml phải nằm trong thư mục WEB-INF/classes/META-INF. Điều này tạo ra sự khác biệt cho tôi.

+0

Nó cũng làm việc cho tôi –

Các vấn đề liên quan