Collection refreshing?
maciekpazur Apr 29, 2009 2:13 PMI'm fighting a very strange problem while trying to implement simple message system for my application.
I use Hibernate for persistence and have three entities - User, MessageFolder and Message. User has two elements of type MessageFolder: inbox and sentMessages. MessageFolder contains a list of Messages.
I have a bean MessagesUI, which main method is:
public void sendMessage() { message.setFrom(loggedUser); message.getTo().receiveMessage(receivedMessage); entityManager.merge(receivedMessage.getTo()); message.getFrom().sendMessage(message); entityManager.merge(message.getFrom()); }
The code for sendMessage and receiveMessage is almost identical:
public void sendMessage(Message message) { if (sentMessages == null) { sentMessages = new MessageFolder(); sentMessages.setName("sent messages"); } message.setFolder(sentMessages); sentMessages.add(message); } public void receiveMessage(Message message) { if (inbox == null) { inbox = new MessageFolder(); inbox.setName("inbox"); } message.setFolder(inbox); inbox.add(message); }
To show the list of messages I use a simple Factory methods:
@Factory(value = "sentList", scope = ScopeType.PAGE) public List<Message> getSentList() { return loggedUser.getSentMessages().getMessages(); } @Factory(value = "inboxList", scope = ScopeType.PAGE) public List<Message> getInboxList() { return loggedUser.getSentMessages().getMessages(); }
As you can see receiving and sending a message is totally symmetrical. Thus, I am extremely surprised with a following scenario. I log in and senda message to myself. Then I enter the page with message lists. The just-sent message appears only in the sent, not in the inbox. But in the database everything is ok - there are two messages, one in each folder! Only when I log out and log in again, everything's fine - the message appears in both the lists.
I tried a lot of things, but still can't find out why this happens. Can anybody help me?