2013-03-14 2 views
0

Я ищу лучшую стратегию в дизайне Java-класса. Я использую JSF 2.1, и в основном у меня есть класс, который размещает заказ и извлекает из веб-службы.Commit Transaction в Java Class Design

  • Я хочу совершить транзакцию или откат, если есть ошибка, используя этот класс.

Каков наилучший подход в отношении класса, который я могу предпринять для решения этой проблемы. Нужно ли использовать дизайн вложенного класса? У меня есть по меньшей мере 15 методов, которые должны работать в координации, чтобы убедиться, что даже если один не удается, транзакция откатывается. Любые рекомендации приветствуются.

+0

Вы можете сделать это в рамках транзакции, неважно, какой у вас классный дизайн. –

ответ

0

JSF - это технология просмотра. Если вы все делаете правильно, он вообще не должен участвовать в транзакциях.

JSF вид должен разговаривать с контроллером. Контроллер должен иметь ссылку на службу, которая является объектом, который знает об единицах работы и транзакциях. Служба выполняет моделирование объектов модели, объектов персистентности и других служб для выполнения прецедента.

Логика получения соединений с базой данных и фиксация или откат транзакции принадлежит службе.

Если вы используете аспектно-ориентированное программирование, это легко сделать. (Вот как это делает весна.)

view--->controller--->service--+--->persistence 
           | 
           +--->model 

Это называется многоуровневый дизайн. Зависимости должны следовать за стрелками, когда я их нарисовал. Модель и настойчивость не знают о сервисе, контроллере или представлении.

+0

Извините, я должен был упомянуть, что я использую EJB, а не Spring. Итак, что сказал Рим С, мне помогает. Я просмотрел другие статьи потока стека, и я нашел эту полезную ссылку в отношении EJB. http://entjavastuff.blogspot.cz/search/label/EJB3 – Sunny

+0

EJB делает это через аспекты и аннотации, точно так же, как Spring. Неудивительно, что Род Джонсон был в комитете EJB3. Они многому научились с весны. – duffymo

+0

Я должен дать вам правильный ответ, потому что вы инициировали ответ в правильном направлении. Благодарю duffymo. – Sunny