[débutant] aide pour l'utilisation de conversations
Bonjour,
Je travaille avec Jboss 4.2.3, Seam 2.1.1 et jsf 1.2 et richfaces 3.2.1
J'ai un formulaire de saisie avec des comboBox. Quand je sélectionne une valeur dans un, ça doit réduire le champ des valeurs des suivants.
Pour ça, dans la page j'utilise :
Code:
<a4j:support event="onchange" reRender="maComboBox" />
Les valeurs de ma combobox sont données par un service qui génère les listes de SelectItem depuis les listes d'entités que je souhaiterais garder en cache, pour pouvoir faire les liens id/entité sans passer par ma base.
Mon idée, pour réaliser cette sorte de cache des listes d'entités, était de faire de ce service une conversation : une par utilisateur, qui dure jusqu'à ce qu'on fasse un submit.
Code:
1 2 3 4 5
| @Name("selectItemGenerator")
@Stateful
@Scope(ScopeType.CONVERSATION)
@TransactionAttribute
public class SelectItemGeneratorBO implements SelectItemGeneratorBS |
J'ai rajouté le transactionAttribute pour le lazy loading.
j'ai une fonction begin
Code:
1 2
| @Begin
public void init() { |
et une fonction end
Code:
1 2 3
| @End
@Remove
public void finish() { |
et j'ai lu dans la doc de seam (mais j'ai peut être mal compris) que pour s'assurer que la conversation commence à l'affichage de la page, il fallait ajouter dans pages.xml ceci :
Code:
<page view-id="mapage.xhtml" action="#{selectItemGenerator.init()}"/>
Mon problème, c'est qu'à l'affichage de la page, tout va bien, mais quand je sélectionne une valeur qui va appeller le reRender d'un élément, j'ai ce message d'erreur :
Citation:
javax.el.ELException: javax.ejb.EJBTransactionRolledbackException: begin method invoked from a long-running conversation, try using @Begin(join=true) on method: init
Selon moi, rajouter un (join=true) ne résoudras pas le problème puisqu'il y aura très probablement des conflits au niveau des sessions hibernate, et donc j'aimerais savoir :
1) est ce que mon idée de conversation est bonne ou je me suis totalement planté ?
2) si oui, qu'est ce que j'ai fait de mal ? (probablement le pages.xml, qui me semble louche)
3) Quand est ce que je suis sensé appeller le begin et le end en réalité ?
D'avance, merci beaucoup.