Hi,
If we have a look at the BookingListAction class (listed below), its transaction attribute
suggests, that each method in that class will trigger a new transaction. My question is
about the cancel() method, which as you can see removes the booking, and updates the list
of bookings. What confuses me is that getBookings() is called from cancel(), before
cancel() is finished, which means that cancel's transaction is not commited and no
changes is made persistent. According to my understanding getBookings() should get the
same unupdated list of objects, which makes no sense and in fact is not true. Can anyone
kindly suggest what I miss here? Thanks
@Stateful
| @Scope(SESSION)
| @Name("bookingList")
| @Restrict("#{identity.loggedIn}")
| @TransactionAttribute(REQUIRES_NEW)
| public class BookingListAction implements BookingList, Serializable
| {
| private static final long serialVersionUID = 1L;
| @PersistenceContext
| private EntityManager em;
|
| @In
| private User user;
|
| @DataModel
| private List<Booking> bookings;
| @DataModelSelection
| private Booking booking;
|
| @Logger
| private Log log;
|
| @Factory
| @Observer("bookingConfirmed")
| public void getBookings()
| {
| bookings = em.createQuery("select b from Booking b where b.user.username =
:username order by b.checkinDate")
| .setParameter("username", user.getUsername())
| .getResultList();
| }
|
| public void cancel()
| {
| log.info("Cancel booking: #{bookingList.booking.id} for
#{user.username}");
| Booking cancelled = em.find(Booking.class, booking.getId());
| if (cancelled!=null) em.remove( cancelled );
| getBookings();
| FacesMessages.instance().add("Booking cancelled for confirmation number
#{bookingList.booking.id}");
| }
|
| public Booking getBooking()
| {
| return booking;
| }
|
| @Destroy @Remove
| public void destroy() {}
| }
|
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4086995#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...