Matt RaibleMatt Raible is a Web Developer and Java Champion. Connect with him on LinkedIn.

The Angular Mini-Book The Angular Mini-Book is a guide to getting started with Angular. You'll learn how to develop a bare-bones application, test it, and deploy it. Then you'll move on to adding Bootstrap, Angular Material, continuous integration, and authentication.

Spring Boot is a popular framework for building REST APIs. You'll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.

For book updates, follow @angular_book on Twitter.

The JHipster Mini-Book The JHipster Mini-Book is a guide to getting started with hip technologies today: Angular, Bootstrap, and Spring Boot. All of these frameworks are wrapped up in an easy-to-use project called JHipster.

This book shows you how to build an app with JHipster, and guides you through the plethora of tools, techniques and options you can use. Furthermore, it explains the UI and API building blocks so you understand the underpinnings of your great application.

For book updates, follow @jhipster-book on Twitter.

10+ YEARS


Over 10 years ago, I wrote my first blog post. Since then, I've authored books, had kids, traveled the world, found Trish and blogged about it all.

Locking Records in Webapps

Our tester, Roberto, started working at my day job today. This means that I've been hacking and interacting with Bugzilla all day. It's great to have someone to validate our code meets the requirements (BTW, all our requirements are kept in Bugzilla - how's that for dynamic requirements?!) So, as far as satisfying my desire to be a productive American, today has been a good day. After I ride home (~20 miles) tonight, I'll feel on top of the world. Anyway, back to the point of this post.

One of the bugs that Roberto entered was that a user could login using two separate browser sessions (same user), and blah, blah, blah. I'm sure anyone who's worked with webapps has seen this. You open a page up in both browsers, click "Save" in the first, and then "Save" in the second. The second browser overwrites the first one's changes. I've seen this bug many times, but I've never solved it, nor even tried.

I'm curious to know if any of you have solved this? I think Hibernate has a way of locking an object - but will that solve this issue? I'm willing to implement a quick solution, otherwise, I'll argue the bugs validity until I'm blue in the face. Hmmm, I wonder if I can simply use Struts' Tokens feature to solve this problem? Please hook me up if you've solved this problem in your webapps.

Posted in Java at Apr 21 2003, 05:07:24 PM MDT 4 Comments
Comments:

I am new to Hibernate too, so I have not tried this yet. I think Hibernate can help with the use of versioning. You can get Hibernate to add a version column to your tables and it will track them. When someone tries to upate the record the version will be checked to see it matches, if not someone must have updated the record. There is an example here: http://hibernate.bluemars.net/hib_docs/reference/html/transactions.html I believe the Struts Tokens will stop people submitting the same data twice (such as pressing refresh or clicking back and submitting again), in the same session. If the other browser had it's own session you would still have the same problem.

Posted by Jason Lea on April 21, 2003 at 11:35 PM MDT #

Well, that didn't take long... I have had a play with struts-hibernate example that Ted Husted created here http://sourceforge.net/projects/struts/ In ContactList.execute() add the following to the try/catch/finally block: } catch (StaleObjectStateException e) { //do something here } Hibernate throws the StaleObjectStateException when the version numbers don't match. I can then add an error message or forward to a failure page etc

Posted by Jason Lea on April 22, 2003 at 12:09 AM MDT #

Easiest way is to make all the updated fileds a part of the where clause (and flush the cache). The "other" way of a timestamp field is not as good. hth, .V

Posted by Vic on April 22, 2003 at 11:31 AM MDT #

>> Easiest way is to make all the updated fileds a part of the where clause Slooowwww. >> The "other" way of a timestamp field is not as good. There are TWO other ways! timestamp field (not quite as safe) version number field (the best) Hibernate supports both <timestamp> and <version> mappings.

Posted by Gavin on April 24, 2003 at 12:56 AM MDT #

Post a Comment:
  • HTML Syntax: Allowed