Arhn - архитектура программирования

Компонент области сеанса в Aspect

У меня проблема с автоматическим связыванием компонента с областью действия сеанса в Aspect.

Мой аспект выглядит так:

@Aspect
public class AuditAspect {

   Logger logger = LoggerFactory.getLogger(this.getClass());

   @Autowired
   private AuditService auditService;

   @Autowired
   private SessionData sessionData;


   @AfterReturning(value = "@annotation(fasthiAudit) && execution(* *(..))")
   public void audit(JoinPoint joinPoint, FasthiAudit fasthiAudit) {
      final String className = joinPoint.getTarget().getClass().getName();
      final String methodName = joinPoint.getSignature().getName();

      try {

         UserId userId = sessionData.getUserId();
         TenantId tenantId = sessionData.getTenantId();

      } catch (Exception e) {
         logger.error("Could not log audit entry for method name: " + methodName + " in class " + className, e);
      }

   }

}

Мой bean-компонент SessionData ограничен сеансом и выглядит следующим образом:

@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class SessionData {

   private UserId userId;
   private TenantId tenantId;

   public UserId getUserId() {
      return userId;
   }

   public void setUserId(UserId userId) {
      this.userId = userId;
   }

   public TenantId getTenantId() {
      return tenantId;
   }

   public void setTenantId(TenantId tenantId) {
      this.tenantId = tenantId;
   }
}

В этом аспекте AuditService автоматически подключается, а SessionData не является нулевым, но выдает исключение, например

Method threw 'org.springframework.beans.factory.BeanCreationException' exception. Cannot evaluate se.reforce.fasthi.core.infrastructure.SessionData$$EnhancerBySpringCGLIB$$26c0d5bb.toString()

Я добавил ContextLoaderListener для отображения запроса следующим образом:

event.getServletContext().addListener(new RequestContextListener());

Он отлично работает для автоматического подключения в компоненте SessionData в качестве прокси-сервера в других компонентах синглтона, но проблема возникает в аспекте

Что мне не хватает?

Спасибо / Йохан

14.06.2016

Ответы:


1

Я обнаружил проблему после нескольких дней головной боли. Проблема заключалась в моей интеграции с Vaadin (которую я забыл упомянуть в своем вопросе). Аннотация @Push в моем пользовательском интерфейсе vaadin сделала что-то запутанным с сервлетом, так что Spring не распознал bean-компоненты с областью действия сеанса. Я решил это, изменив аннотацию на:

@Push(transport= Transport.WEBSOCKET_XHR)

Вот и все, теперь bean-компоненты с областью действия сеанса отлично работают вместе с bean-компонентами Singelton.

16.06.2016
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..