Я разрабатываю проект rcp с несколькими плагинами, и я использую AJDT aspectJ для целей ведения журнала в приложении. Я создал два аспекта для ведения журнала информации и один для регистрации ошибок в каждом плагине. Аспект отлично работает для базового плагина, но он не работает для другого плагина.Создание аспекта для нескольких плагинов в проекте RCP проекта eclipse
Я имею несколько запросов относительно выше реализации:
- это правильный способ определить аспект для каждого плагина, или мы можем создать один аспект для всех плагинов
- если имя пакета одинаковы в разные плагины - это проблема при создании отдельного аспекта для каждого плагина.
- Я попытался создать один аспект для обычного ведения журнала и регистрации исключений, но не работал для меня. Прикрепление образца для нормального аспекта и аспекта исключения.
- Есть ли способ определить аспект без указания имени пакета, я думаю, поскольку я упоминаю имя пакета в pointcut, это создает проблему.
Я получаю ниже ошибки, если имеет один аспект в каждом плагине:
Caused by: org.aspectj.lang.NoAspectBoundException: com_tsystems_rvs_client_gui_user_RvsUserAspect
at com.tsystems.rvs.client.gui.user.RvsUserAspect.aspectOf(RvsUserAspect.aj:1)
at com.tsystems.rvs.client.gui.user.RvsUserAspect.<clinit>(RvsUserAspect.aj:27)
код для нормального аспекта, используемый для информации в журнал Msg
public aspect RvsFrameworkAspect {
public pointcut scope(): within(com.tsystems.rvs.client.gui.framework.*);
before() : scope(){
Signature sig=thisJoinPointStaticPart.getSignature();
String infoFormat="Entering ["+sig.getDeclaringType().getName()+"."+sig.getName();
logTrace(infoFormat, thisJoinPointStaticPart, thisEnclosingJoinPointStaticPart);
}
after() : scope(){
Signature sig=thisJoinPointStaticPart.getSignature();
String infoFormat="Leaving ["+sig.getDeclaringType().getName()+"."+sig.getName()+"]";
logTrace(infoFormat, thisJoinPointStaticPart, thisEnclosingJoinPointStaticPart);
}
protected synchronized void logTrace(String info, StaticPart location,
StaticPart enclosing) {
Signature signature = location.getSignature();
String source = signature.getDeclaringTypeName() + ":" +
(enclosing.getSourceLocation().getLine());
LoggerMode.getInstance().logInfo(" " + source + " - " + info);
}
}
код исключения войти плагин
public aspect RvsFrameworkExceptionAspect {
public pointcut scope(): within(com.tsystems.rvs..*);
private Map<Throwable, String> loggedThrowables = new WeakHashMap<Throwable, String>();
after() throwing(Throwable t): scope() {
logThrowable(t, thisJoinPointStaticPart,
thisEnclosingJoinPointStaticPart);
}
before (Throwable t): handler(Exception+) && args(t) && scope() {
logThrowable(t, thisJoinPointStaticPart,
thisEnclosingJoinPointStaticPart);
}
protected synchronized void logThrowable(Throwable t, StaticPart location,
StaticPart enclosing) {
if (!loggedThrowables.containsKey(t)) {
loggedThrowables.put(t, null);
Signature signature = location.getSignature();
String source = signature.getDeclaringTypeName() + ":"
+ (enclosing.getSourceLocation().getLine());
LoggerMode.getInstance().logError(" " + source + " - " + t.toString(), t);
}
}
Пожалуйста, помогите мне, что я делаю неправильно в моей реализации.
не могли бы вы направить мне пример. – Gaurav
Я отредактировал ответ и надеюсь, что это поможет. – kriegaex