Hi,
I'm trying to create a session bean that checks the contents of a potential new record against a table before adding that record to the table. The table is a list of (funnily enough) hotel bookings. I want to make sure that the booking dates don't clash for a particular room. Because a booking has a start date and end date, it's not sufficient to have a compound primary key based on dates.
I'm using EJB3 on JBOSS 4
If I were doing it in normal java it would look something like:
List<Booking> bookings = ....
Object bookingLock = new Object();
public void create(Boooking booking) {
synchronized(bookingLock) {
if (!roomBookedForInterval(booking)) {
saveBooking(booking)
}
}
}
private boolean roomBookedForInterval(Booking booking) {
for(Booking b : bookings) {
if (b.endDate() > booking.startDate() ||
b.startDate() < booking.endDate() ) {
return true;
}
}
return false;
}
private void saveBooking(Booking booking) {
bookings.add(booking);
}
synchronized{}block? IS it a transaction? If so, how does it work?