Details

Description

If a conversation gets deactivated, the code which actually iterates the map of conversations in org.jboss.weld.context.AbstractConversationContext is erroneous and easily runs into a ConcurrentModificationException if there is more than one conversation. We consider this a pretty serious defect because its not possible to use JBoss AS 6.0 GA for a real-world application.

For JBoss 6 users we have to wait for 6.0.1, and I've found a workaround.

Instead of e.g.:

@Begin
void beginConversation();

@End
void endConversation();

You may write:

void beginConversation()
{
if (conversation.isTransient())

{
conversation.begin();
}

}

void endConversation()
{
if (!conversation.isTransient())

{
conversation.end();
}

}

This would be a workaround this issue for Weld 1.1.0.Final users. However, for Seam Faces the interceptor (org.jboss.seam.faces.context.conversation.ConversationBoundaryInterceptor) would not be able to discover manual call to conversation begin / end.

Ove Ranheim
added a comment - 01/May/11 3:10 PM I experience the same issue with Seam Solder and Faces 3.0.0.Final.
For JBoss 6 users we have to wait for 6.0.1, and I've found a workaround.
Instead of e.g.:
@Begin
void beginConversation();
@End
void endConversation();
You may write:
void beginConversation()
{
if (conversation.isTransient())
{
conversation.begin();
}
}
void endConversation()
{
if (!conversation.isTransient())
{
conversation.end();
}
}
This would be a workaround this issue for Weld 1.1.0.Final users. However, for Seam Faces the interceptor (org.jboss.seam.faces.context.conversation.ConversationBoundaryInterceptor) would not be able to discover manual call to conversation begin / end.