Win a copy of Modern JavaScript for the Impatient this week in the Server-Side JavaScript and NodeJS forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Ron McLeod
  • Paul Clapham
  • Bear Bibeault
  • Junilu Lacar
Sheriffs:
  • Jeanne Boyarsky
  • Tim Cooke
  • Henry Wong
Saloon Keepers:
  • Tim Moores
  • Stephan van Hulst
  • Tim Holloway
  • salvin francis
  • Frits Walraven
Bartenders:
  • Scott Selikoff
  • Piet Souris
  • Carey Brown

SpringMVC and Transactions

 
Ranch Hand
Posts: 44
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi

I am working on spring MVC application and i want to delete the record from DB. I am starting the transaction in referenceData() and closing in onSubmit() mehtods. Code is below, Please advice is that right way to define trnsaction boundries in Controller. Should we handle transactions in Controllers for MVC applications.

<blockquote>code:
<pre name="code" class="core"> protected Map referenceData(HttpServletRequest request) throws Exception {
// start a transaction
tx = (ResourceTransactionManager) ctx.getBean("transactionManager");
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = tx.getTransaction(def);
HashMap model = new HashMap();
List list = userServiceImpl.findAllUsers();
model.put("users", list);
return model;
}

/** returns ModelAndView(getSuccessView()) */
public ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command,
BindException errors) throws Exception {

UserImpl userImpl = (UserImpl) command;
userServiceImpl.removeUser(userImpl);
//Commit transaction
tx.commit(status);

return new ModelAndView(getSuccessView());
}
</pre>
</blockquote>
 
ranger
Posts: 17346
11
Mac IntelliJ IDE Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Personally, and this is just my opinion. I thought declaring transactions at your service/use case level is the place to do it, and I personally would use @Transactional, but that is my preference. Rather than manually code transaction support, which couples it with that code. Which we want to avoid tight coupling, otherwise we wouldn't be using Spring.

If you don't like @Transactional, then what about declaring Transactions through Spring AOP. Then it is 100% decoupled from your code.

Mark
 
bacon. tiny ad:
Building a Better World in your Backyard by Paul Wheaton and Shawn Klassen-Koop
https://coderanch.com/wiki/718759/books/Building-World-Backyard-Paul-Wheaton
    Bookmark Topic Watch Topic
  • New Topic