Вопрос

Я работаю над приложением Java EE 5, работающим на WebSphere 7.0, и пытаюсь найти безопасную и эффективную способность для многопоточного журнала журнала аудита базы данных. Существуют ли какие-либо известные методы для безопасного и эффективного выполнения многопоточного регистрации аудита в приложении Java EE?

Если вам нужна некоторая справочная информация: приложение - это веб -служба, и каждое сообщение о запросе, которое оно получает, приводит к созданию 100 или 200 сообщений журнала аудита, которые должны сохраняться в базе данных. Первоначально регистрация аудита проводилась с помощью пользовательского класса обработчика аудита, который расширяет java.util.logging.handler, и метод публикации откроет подключение к базе данных, заполняет подготовленный оператор из Logrecord и выполнит вставку. Поскольку этот пользовательский обработчик работал в потоке EJB, регистрация аудита могло составить до нескольких секунд времени ответа для каждого сообщения запроса и заставляло пропустить SLAS.

Таким образом, обработчик аудита был заменен обработчиком обертки, который добавляет, создает отдельный поток (Да, с новым потоком () против правил Java EE) Обработчик обертки использует вектор для очереди в аудиторских записях, и он сохраняет их как можно быстрее в отдельном потоке, используя обработчик аудита.

В то время как это нарушает правила java ee -потока, эта обертка работала довольно хорошо ... Пока мы не допустям одновременные призывы на MDB. Обертка имеет потенциал, чтобы испортить, когда разрешено несколько вызовов EJB, и потенциально сохранит каждую запись журнала в базу данных несколько раз. Похоже, что это указывает на то, что логика создания обертки или потока имеет ошибку.

Я собирался поработать над выявлением и решением этой проблемы, но подумал, что впервые спрошу, есть ли лучший способ.

Это было полезно?

Решение

Используя JMS, поместите эти аудиторские сообщения в очередь, а затем вызовите какой -нибудь другую службу, которая заберут их и хранит в базе данных. Это, конечно, означает, что все журналы не обязательно хранятся в базе данных в режиме реального времени, но этот подход разгрузит некоторую работу с WebSphere, и у вас не будет стандартного разбитого многопоточного потока в вашем коде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top