Я написал своего рода тест, который оценивает, как различные комбинации атрибутов транзакций влияют на производительность программы Java EE. Эталонный вызов вызывает метод, аннотированный аннотацией «Y» из метода с аннотацией «X». Операции в моем тесте освещающих ситуацию банковского перевода:@Never атрибут транзакции ужасно медленный
@Required @RequiresNew
theCallerMethod() -> updateAccount(Account acc)
@RequiresNew
-> updateOwner(Company c)
@RequiresNew
-> addLogEntry(Transfer t)
Так быть в контексте транзакции callerMethod контейнер должен приостановить сделку звонившего, начать новую транзакцию, обновить учетную запись, фиксации, переключатель вызывать, приостанавливать, запускать новую, обновлять компанию, совершать, возвращать в вызывающий, приостанавливать, запускать еще одну, добавлять запись в журнал, совершать и возвращать метод вызывающего абонента, где, наконец, совершают транзакцию вызывающего абонента.
И я был очень удивлен, когда выяснилось, что самые медленные звонки были из @ Никогда-аннотированного метода звонящего: для выполнения 1000 описанных выше вызовов для @Required -> @Required сценария потребовалось 5,71 сек., @ Требуется -> @RequiresNew 6,35 сек., Но 9,05 сек. для @Never -> @Not_Supported и 8,95 sec. для @Never -> @Поддержка.
Это нормально для @ Никогда-контекстов для выполнения так долго? Я имею в виду, что у нас даже нет транзакции для приостановки и возобновления. Может быть, есть общие знания о атрибуте @Never, который я пропустил?
Я использую Java EE 6, GlassFish 3, MySQL 5.1.69 InnoDB.
Заранее спасибо.