動的 Web プロジェクトで Eclipse と Aspectj を機能させようとすると問題が発生します。Eclipse ビジュアライゼーション機能を使用できるように、コンパイル時のウィービングを探しています。
ここに記載されている手順に従いました:
https://forums.oracle.com/forums/thread.jspa?messageID=8591748
Eclipse Indigo (3.7) と最新の Aspectj Eclipse プラグイン (2.1.3) を使用します。
手順は次のとおりです。
[1]基本的なサーブレットを作成する
//imports omitted
public class MyServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response){
PrintWriter out= null;
try {
out = response.getWriter();
out.write("hello from MyServlet");
} catch (IOException e) {
e.printStackTrace();
} finally {
if(out!=null)
out.close();
}
}
}
[2] デプロイメント記述子 (web.xml) にサーブレットを追加する
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.myCompany.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet/*</url-pattern>
</servlet-mapping>
</web-app>
【3】アスペクトを作る
package com.myCompany;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public aspect MyServletAspect {
pointcut doGet() :
execution(public void MyServlet.doGet(HttpServletRequest,HttpServletResponse));
after() returning : doGet() {
System.out.println("Hello from doGet (via aspectj)");
}
}
ただし、このノーサイコロを実行すると、アスペクトは実行されません (サーブレットは応答に書き込み、アスペクトはコンソールに書き込みます)。通常のJavaプロジェクトでも同様のことを行いましたが、うまくいきました。
Web アプリの META-INF ディレクトリに aop.xml を追加するためのガイドラインがあることに注意してください。ただし、これはうまくいきませんでした。
私たちの目標は、Spring 以外のフレームワーク (または Maven) プロジェクトの eclipse を介して、開発中に非侵襲的に aspectj を実行することです。これは簡単なはずですが、機能させることができませんでした。
Eclipse での Web アプリのコンパイル時のウィービングに関する提案やチュートリアルへの参照は役に立ちます。アプリ サーバーは Tomcat 6 に組み込まれています (ただし、必要に応じて tomcat 7 にアップグレードできます)。
本番環境のコードに影響を与えずに実行時に開発環境を微調整できる機能は、機能させることができれば素晴らしいことです。回答は大歓迎です。