У меня есть существующее корпоративное приложение J2EE, к которому я должен добавить аудит, т.е. быть в состоянии записать операции CRUD на нескольких важных доменных типах (Сотрудник, AdministratorRights, и т.д.).
Приложение имеет стандарт n-tier архитектура:
Мой вопрос: есть ли какие-либо стандартные шаблоны или (лучше все еще) платформы/библиотеки специально для добавления аудита как сквозное беспокойство? Я знаю, что AOP может использоваться для реализации сквозных проблем в целом; я хочу знать, существует ли что-то конкретно нацеленное на аудит.
Прямо сейчас я склоняюсь к использованию Spring AOP (использующий стиль "@AspectJ") для уведомления бизнес-операциям, которые подвергнуты веб-слою.
Попробуйте платформу Аспектно-ориентированного программирования.
Из Википедии "Аспектно-ориентированное программирование (AOP) является парадигмой программирования, которая увеличивает модульный принцип путем разрешения разделения сквозных проблем".
Я собираюсь пойти немного против мелкой частицы сюда и предложить, чтобы Вы посмотрели на решение нижнего яруса. У нас есть подобная архитектура в нашем приложении, и для нашего аудита мы пошли с триггерами аудита уровня базы данных, которые отслеживают операции в RDBMS. Это может быть сделано как прекрасное - или крупномодульное как Вам угодно, просто необходимо определить объекты, которые требуется отследить.
Теперь, это не идеологически чистое решение; это вовлекает логику помещения в базу данных, которая, как возможно предполагается, остается в бизнес-уровне, и я не могу отклонить то это представление, имеет значение, но в нашем случае у нас есть многие независимое приложение, взаимодействующее с моделью данных, некоторые записанные в C, некоторые заданные сценарием, и другие приложения J2EE, и все они должны последовательно контролироваться.
Существует возможно все еще некоторая работа AOP, которая будет сделана здесь на стороне J2EE, обратите внимание; любому методу, который обновляет базу данных вообще, вероятно, придется иметь некоторую дополнительную работу, сделанную для сообщения базы данных, какой пользователь делает работу. Мы используем переменные сеанса базы данных, чтобы сделать это, но существуют другие решения, конечно.
Для всего EJBs можно использовать перехватчики EJB 3.0 (Это - что-то подобное фильтру Сервлета) и другой подобный перехватчик для Spring (не знакомый с пружиной), Поскольку Вы используете EJBs, а также Spring, который не может покрыть целые транзакции. Другой подход мог использовать Фронтальный контроллер однако, который требует некоторой модификации в стороне клиента. Еще один подход мог использовать Фильтр Сервлета однако, который означает реализовывать доменную логику на уровне представления.
Я рекомендовал бы Фронтальный контроллер в этом случае.