r339 - in trunk: faxtomail-service/src/main/java/com/franciaflex/faxtomail/services faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search faxtomail-ui-swing/src
Author: echatellier Date: 2014-07-03 18:18:11 +0200 (Thu, 03 Jul 2014) New Revision: 339 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/339 Log: Ouverture d'une nouvelle transaction (pas tr?\195?\168s proprement) pour casser l'isolation des transactions Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceSupport.java trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderService.java trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/UserService.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailDemandListHandler.java Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceSupport.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceSupport.java 2014-07-03 16:17:04 UTC (rev 338) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceSupport.java 2014-07-03 16:18:11 UTC (rev 339) @@ -64,27 +64,27 @@ return serviceContext.newService(serviceClass); } - public DecoratorService getDecoratorService() { + protected DecoratorService getDecoratorService() { return newService(DecoratorService.class); } - public ConfigurationService getConfigurationService() { + protected ConfigurationService getConfigurationService() { return newService(ConfigurationService.class); } - public MailFolderService getMailFolderService() { + protected MailFolderService getMailFolderService() { return newService(MailFolderService.class); } - public EmailService getEmailService() { + protected EmailService getEmailService() { return newService(EmailService.class); } - public ReferentielService getReferentielService() { + protected ReferentielService getReferentielService() { return newService(ReferentielService.class); } - public ClientService getClientService() { + protected ClientService getClientService() { return newService(ClientService.class); } } Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderService.java 2014-07-03 16:17:04 UTC (rev 338) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderService.java 2014-07-03 16:18:11 UTC (rev 339) @@ -32,6 +32,7 @@ import java.util.Map; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; + import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -204,4 +205,10 @@ return result; } + public MailFolder getMailFolder(String topiaId) { + MailFolderTopiaDao dao = getPersistenceContext().getMailFolderDao(); + MailFolder result = dao.findByTopiaId(topiaId); + return result; + } + } Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/UserService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/UserService.java 2014-07-03 16:17:04 UTC (rev 338) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/UserService.java 2014-07-03 16:18:11 UTC (rev 339) @@ -53,4 +53,10 @@ FaxToMailUserGroupTopiaDao dao = getPersistenceContext().getFaxToMailUserGroupDao(); return new ArrayList<>(dao.findAll()); } + + public FaxToMailUser getUser(String topiaId) { + FaxToMailUserTopiaDao dao = getPersistenceContext().getFaxToMailUserDao(); + FaxToMailUser user = dao.forTopiaIdEquals(topiaId).findUnique(); + return user; + } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-07-03 16:17:04 UTC (rev 338) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-07-03 16:18:11 UTC (rev 339) @@ -113,67 +113,61 @@ /** * Application context (only one for all the application). - * */ private static FaxToMailUIContext applicationContext; /** * Application global configuration. - * */ protected final FaxToMailConfiguration config; /** * ClassLoader ressource. - * */ protected final RessourceClassLoader resourceLoader; /** + * Topia application context. + */ + protected FaxToMailTopiaApplicationContext topiaApplicationContext; + + /** * Service context used by any service. - * */ protected final FaxToMailServiceContext serviceContext; /** * Swing session used to save ui states. - * */ protected final SwingSession swingSession; /** - * Erro helper. - * + * Error helper. */ protected final ApplicationErrorHelper errorHelper; /** * Current screen displayed in ui. - * */ protected FaxToMailScreen screen; /** * Current locale used in application. - * */ protected Locale locale; /** * Busy state ({@code true} when a blocking action is running). - * */ protected boolean busy; /** * Flag to hide (or not) the body of application. - * */ protected boolean hideBody; /** * Message notifiers. - * */ protected final Set<UIMessageNotifier> messageNotifiers; @@ -187,12 +181,22 @@ private final ApplicationActionEngine faxToMailActionEngine; - protected Configuration faxToMailConfiguration; - + /** + * @deprecated Ca pose problème de conserver des entités alors que le persistence contexte change (lazy). + */ + @Deprecated protected FaxToMailUser currentUser; + /** + * @deprecated Ca pose problème de conserver des entités alors que le persistence contexte change (lazy). + */ + @Deprecated protected MailFolder currentMailFolder; + /** + * @deprecated Ca pose problème de conserver des entités alors que le persistence contexte change (lazy). + */ + @Deprecated protected DemandeUIModel currentEmail; protected List<MailFolder> expandedFolders = new ArrayList<MailFolder>(); @@ -229,7 +233,7 @@ this.config = config; this.resourceLoader = new RessourceClassLoader(Thread.currentThread().getContextClassLoader()); this.serviceContext = new FaxToMailServiceContext(); - FaxToMailTopiaApplicationContext topiaApplicationContext = new FaxToMailTopiaApplicationContext(config.getTopiaProperties()); + topiaApplicationContext = new FaxToMailTopiaApplicationContext(config.getTopiaProperties()); FaxToMailTopiaPersistenceContext persistenceContext = topiaApplicationContext.newPersistenceContext(); serviceContext.setPersistenceContext(persistenceContext); serviceContext.setApplicationConfig(config); @@ -285,6 +289,17 @@ faxToMailActionEngine = new ApplicationActionEngine(faxToMailActionFactory); } + /** + * Ferme la transaction actuelle et en ouvre une nouvelle pour casser le problème d'isolation + * des données. Cela permet d'ouvrir une nouvelle transaction qui verra les modifications faites + * par le serveur hors de la transaction précédente. + */ + public void createNewTransaction() { + serviceContext.getPersistenceContext().close(); + FaxToMailTopiaPersistenceContext persistenceContext = topiaApplicationContext.newPersistenceContext(); + serviceContext.setPersistenceContext(persistenceContext); + } + @Override public ApplicationConfiguration getConfiguration() { return config; @@ -351,8 +366,8 @@ // try to autologin user from username of current X session autologinUser(); - Configuration config = getConfigurationService().getConfiguration(); - setFaxToMailConfiguration(config); + //Configuration config = getConfigurationService().getConfiguration(); + //setFaxToMailConfiguration(config); //--------------------------------------------------------------------// // init action UI @@ -656,15 +671,18 @@ } public Configuration getFaxToMailConfiguration() { - return faxToMailConfiguration; + // make sure configuration is loaded by current service context + return getConfigurationService().getConfiguration(); } - public void setFaxToMailConfiguration(Configuration faxToMailConfiguration) { - this.faxToMailConfiguration = faxToMailConfiguration; - } - public FaxToMailUser getCurrentUser() { - return currentUser; + FaxToMailUser user = currentUser; + if (user != null) { + // reload with current transaction + //FIXME topiaId + user = getUserService().getUser(currentUser.getTopiaId()); + } + return user; } public void setCurrentUser(FaxToMailUser currentUser) { @@ -672,7 +690,13 @@ } public MailFolder getCurrentMailFolder() { - return currentMailFolder; + MailFolder folder = currentMailFolder; + if (folder != null) { + // reload with current transaction + //FIXME topiaId + folder = getMailFolderService().getMailFolder(folder.getTopiaId()); + } + return folder; } public void setCurrentMailFolder(MailFolder currentMailFolder) { Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveAction.java 2014-07-03 16:17:04 UTC (rev 338) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveAction.java 2014-07-03 16:18:11 UTC (rev 339) @@ -71,12 +71,14 @@ MailFolder folder = model.getMailFolder(); MailFolder archiveChild = null; do { - archiveChild = Iterables.find(folder.getChildren(), new Predicate<MailFolder>() { - @Override - public boolean apply(MailFolder mailFolder) { - return mailFolder.isArchiveFolder(); - } - }); + if (folder.getChildren() != null) { + archiveChild = Iterables.find(folder.getChildren(), new Predicate<MailFolder>() { + @Override + public boolean apply(MailFolder mailFolder) { + return mailFolder.isArchiveFolder(); + } + }); + } folder = folder.getParent(); } while (archiveChild == null && folder != null); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java 2014-07-03 16:17:04 UTC (rev 338) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java 2014-07-03 16:18:11 UTC (rev 339) @@ -98,7 +98,6 @@ * Handler of UI {@link com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIHandler}. * * @author kmorin - morin@codelutin.com - * */ public class DemandeListUIHandler extends AbstractFaxToMailDemandListHandler<DemandeListUIModel, DemandeListUI> implements CloseableUI { @@ -133,6 +132,9 @@ super.beforeInit(ui); + // open new transaction for current folder + getContext().createNewTransaction(); + DemandeListUIModel model = new DemandeListUIModel(); Collection<MailFolder> folders = getContext().getMailFolderService().getRootMailFoldersWithReadingRights(getContext().getCurrentUser()); model.setFolders(new ArrayList<MailFolder>(folders)); @@ -259,6 +261,10 @@ if (folderNode.isCanSelect()) { MailFolder folder = folderNode.getMailFolder(); + // open new transaction for current folder + getContext().createNewTransaction(); + folder = getContext().getMailFolderService().getMailFolder(folder.getTopiaId()); // Fix lazy exception + getModel().setSelectedFolder(folder); getContext().setCurrentMailFolder(folder); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java 2014-07-03 16:17:04 UTC (rev 338) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java 2014-07-03 16:18:11 UTC (rev 339) @@ -180,6 +180,7 @@ } public void searchDemandes() { + getContext().createNewTransaction(); getModel().resetPaginationParameter(); try { SearchAction searchAction = getContext().getActionFactory().createLogicAction(this, SearchAction.class); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailDemandListHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailDemandListHandler.java 2014-07-03 16:17:04 UTC (rev 338) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailDemandListHandler.java 2014-07-03 16:18:11 UTC (rev 339) @@ -303,7 +303,15 @@ } protected void openDemand(DemandeUIModel selectedEmail) { + FaxToMailUIContext context = getContext(); + + // reload transaction + context.createNewTransaction(); + // reload model with current transaction + Email email = context.getEmailService().getEmailById(selectedEmail.getTopiaId()); + selectedEmail.fromEntity(email); + context.setCurrentEmail(selectedEmail); context.getActionEngine().runAction(new ShowDemandeAction(context.getMainUI().getHandler())); }
participants (1)
-
echatellier@users.forge.codelutin.com