Как узнать, какие SQL-операторы выполняются в транзакции на Websphere AS 7.0? - PullRequest
0 голосов
/ 06 февраля 2012

У меня есть Websphere Application Server 7.0.0.9, на котором запущено приложение, которое использует springframework 2.0.9 и hibernate 3.3.0 (или 3.4.0, или оба, я не уверен). TransactionManager - org.springframework.transaction.jta.WebSphereUowTransactionManager.

У меня есть метод, аннотированный как @org.springframework.transaction.annotation.Transactional. Этот метод вызывает другой метод, который также аннотируется как @org.springframework.transaction.annotation.Transactional:

@Transactional
public void myMethod() {
    doSomeUpdates();
    nestedMethod();
}
@Transactional
public void nestedMethod() {
    doSomeMoreUpdates();
}

Метод "myMethod" должен быть атомарным. Иногда возникает ошибка при откате обновлений из «doSomeUpdates», но обновления из «doSomeMoreUpdates» фиксируются.

Настройки распространения по умолчанию: Propagation.REQUIRED. Я попытался изменить свой код на:

@Transactional
public void myMethod() {
    doSomeUpdates();
    nestedMethod();
}
@Transactional(propagation = Propagation.MANDATORY)
public void nestedMethod() {
    doSomeMoreUpdates();
}

Я попытался посмотреть в журналах, чтобы выяснить, решило ли это изменение мою ошибку, но у меня не получилось ни головы, ни хвоста болота, которым являются мои файлы журналов. Я регистрирую SQL-операторы с помощью класса org.hibernate.jdbc.util.SQLStatementLogger и выкидываю транзакционные мелочи в файл trace.log websphere со следующими настройками:

com.ibm.wsspi.uow.*=finest: com.ibm.ws.uow.*=finest:
com.ibm.ws.jtaextensions.*=finest: org.hibernate.transaction.*=finest:
org.springframework.transaction.*=finest: com.ibm.ws.Transaction.*=finest:
com.ibm.ws.LocalTransaction.*=finest: com.ibm.ws.tx.*=finest:
oracle.jdbc.*=finest:

Это приводит к кучам бесполезных данных, но операторы sql выгружаются только SQLStatementLogger, который, похоже, не имеет никакого отношения к транзакциям websphere. Как узнать, какие операторы sql действительно выполняются веб-сферой в каждой транзакции?

1 Ответ

0 голосов
/ 12 марта 2012

Мы только что столкнулись с этой проблемой на прошлой неделе. Похоже, что специализированный плагин класса WebSphereUowTransactionManager был изменен в Spring для адаптации к Websphere 7.x

Мы использовали Spring Framework версии 3.0.5 против установки WebSphere 6.1. Однако когда мы перешли на WebSphere 7.1, у нас были проблемы, аналогичные тем, которые вы упомянули выше. Некоторое время мы сходили с ума, пытаясь выяснить проблему, пока не обновили нашу среду Spring до версии 3.1.1. Теперь все снова проходит гладко.

Удачи.

...