Hi everyone,
I have a series of wizard like pages which runs in conversation scope without any issue. Now with a new business requirement a need to run this series of pages without taking any user input, interaction. So following code implements the new requirement;
public void renewProducts(List<Product> products){ if(logger.isDebugEnabled()) logger.debug("renewing products {0}", products.size()); for(Product product : products){ this.renewSingleProduct(product); } } public void renewSingleProduct(Product product) { Conversation conversation = Conversation.instance(); conversation.begin(); if (conversation != null) { logger.info("Conversation.instance().isLongRunning() = "+conversation.isLongRunning()); logger.info("Conversation.instance().getDescription() = "+conversation.getDescription()); logger.info("Conversation.instance().getId() = "+ conversation.getId()); } Customer customer = retrieveCustomer(); Contexts.getConversationContext().set("customer", customer); ProductController productController = (ProductController)Component.getInstance("productController",ScopeType.CONVERSATION, true); productController.chooseProduct(product); //calls to other seam scoped components conversation.end(true); }
i see the same conversationId in the renewSingleProduct(Product product) method despite of calling conversation.end(true) explicitly. if i call conversation.leave() instead of conversation.end(true) new conversation created but this time first conversation variables aren't disinjected, because of this first conversation variables are used with the second one. Should i clean the conversation scoped components manually or there is a better way?
regards ....