Я хочу, чтобы иметь возможность регистрировать время, которое любой запрос берет на мой db. Я использую MyBatis для запроса БД.Шаблон для регистрации всех взаимодействий с базой данных с использованием перехватчика на bean-компоненте
В настоящее время у меня есть компонент без состояния, на котором есть методы, такие как select, update и т. Д., И клиенты моего компонента (через аннотацию @EJB) называют эти методы. Вдобавок к этому у меня есть перехватчик уровня класса на компоненте взаимодействия без учета состояния db, который выполняет мою регистрацию.
С любым вызовом bean-компонента без состояния бездействия я открываю сеанс, запускаю запрос пользователя, а затем закрываю сеанс, все в блоке try try. Это хорошо, потому что тогда клиенту EJB не нужно беспокоиться о закрытии сеансов или протоколировании того, как долго выполнялся запрос.
Проблема возникает, когда клиент EJB хочет сделать два запроса одному и тому же. Я не могу использовать источник данных XA, потому что поставщик не поддерживает его.
У меня есть обходное решение для этого, где я реализовал аналогичный компонент взаимодействия без привязки db, который не открывает и не закрывает сеансы в каждом методе выбора, обновления и т. Д., А скорее использует функции openSession() и closeSession ().
Моя забота о том, что это все еще фасол без состояния, и он может быть уничтожен в середине транзакции клиента, что приведет к откату. Это так? Должен ли я сделать его фасоль с состоянием?
Я также написал перехватчик, чтобы на самом деле вызвать openSession() и closeSession() для пользователя, чтобы они могли просто комментировать их класс или метод.
Это похоже на хороший образец или существует общий шаблон для обработки этого случая, который мне не хватает? Спасибо.
Я не использую сущности или любого сущ., Хотя я использую mybatis и простые старые сеансы sql, чтобы поговорить с базой данных. Любой совет? – user1608137
Проверьте это обсуждение использования iBatis в EJB с транзакциями, охватывающими несколько вызовов: http://www.mail-archive.com/[email protected]/msg16139.html – Bogdan
А также вы должны указать в своем оригинальный вопрос, что вы используете iBatis. – Bogdan