r328 - in trunk/faxtomail-ui-web/src/main: java/com/franciaflex/faxtomail/web java/com/franciaflex/faxtomail/web/job resources
Author: echatellier Date: 2014-07-02 19:08:07 +0200 (Wed, 02 Jul 2014) New Revision: 328 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/328 Log: Refactoring application context pour que chaque jobs ait sa propre transaction Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailApplicationListener.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/AbstractFaxToMailJob.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/ClientUpdateJob.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/EDIManagementJob.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java trunk/faxtomail-ui-web/src/main/resources/quartz.properties Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailApplicationListener.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailApplicationListener.java 2014-07-02 16:04:19 UTC (rev 327) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailApplicationListener.java 2014-07-02 17:08:07 UTC (rev 328) @@ -73,14 +73,11 @@ FaxToMailApplicationContext.APPLICATION_CONTEXT_PARAMETER, applicationContext); - FaxToMailConfiguration config = applicationContext.getApplicationConfig(); + FaxToMailConfiguration config = FaxToMailApplicationContext.getApplicationConfig(); JobDataMap data = new JobDataMap(); - - FaxToMailTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext(); - FaxToMailServiceContext serviceContext = applicationContext.newServiceContext(persistenceContext); - data.put(MailFilterJob.SERVICE_CONTEXT, serviceContext); + data.put(MailFilterJob.APPLICATION_CONTEXT, applicationContext); JobDetail mailFilteringJob = JobBuilder.newJob(MailFilterJob.class) .usingJobData(data) Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/AbstractFaxToMailJob.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/AbstractFaxToMailJob.java 2014-07-02 16:04:19 UTC (rev 327) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/AbstractFaxToMailJob.java 2014-07-02 17:08:07 UTC (rev 328) @@ -27,14 +27,14 @@ import org.quartz.Job; import org.quartz.JobExecutionContext; -import com.franciaflex.faxtomail.services.FaxToMailServiceContext; +import com.franciaflex.faxtomail.FaxToMailApplicationContext; public abstract class AbstractFaxToMailJob implements Job { - public static final String SERVICE_CONTEXT = "serviceContext"; + public static final String APPLICATION_CONTEXT = "applicationContext"; - protected FaxToMailServiceContext getServiceContext(JobExecutionContext jobExecutionContext) { - FaxToMailServiceContext serviceContext = (FaxToMailServiceContext) jobExecutionContext.getMergedJobDataMap().get(SERVICE_CONTEXT); - return serviceContext; + protected FaxToMailApplicationContext getApplicationContext(JobExecutionContext jobExecutionContext) { + FaxToMailApplicationContext applicationContext = (FaxToMailApplicationContext) jobExecutionContext.getMergedJobDataMap().get(APPLICATION_CONTEXT); + return applicationContext; } } Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/ClientUpdateJob.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/ClientUpdateJob.java 2014-07-02 16:04:19 UTC (rev 327) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/ClientUpdateJob.java 2014-07-02 17:08:07 UTC (rev 328) @@ -24,14 +24,16 @@ * #L% */ -import com.franciaflex.faxtomail.services.FaxToMailServiceContext; -import com.franciaflex.faxtomail.services.service.ClientService; -import com.franciaflex.faxtomail.services.service.EmailService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; +import com.franciaflex.faxtomail.FaxToMailApplicationContext; +import com.franciaflex.faxtomail.persistence.entities.FaxToMailTopiaPersistenceContext; +import com.franciaflex.faxtomail.services.FaxToMailServiceContext; +import com.franciaflex.faxtomail.services.service.ClientService; + /** * @author Kevin Morin (Code Lutin) * @since x.x @@ -40,17 +42,32 @@ private static final Log log = LogFactory.getLog(ClientUpdateJob.class); - protected FaxToMailServiceContext serviceContext; + protected FaxToMailApplicationContext applicationContext; @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - serviceContext = getServiceContext(jobExecutionContext); - if (log.isDebugEnabled()) { - log.debug("Running ClientUpdateJob at " + serviceContext.getNow()); + applicationContext = getApplicationContext(jobExecutionContext); + FaxToMailTopiaPersistenceContext persistenceContext = null; + + try { + persistenceContext = applicationContext.newPersistenceContext(); + FaxToMailServiceContext serviceContext = applicationContext.newServiceContext(persistenceContext); + + if (log.isDebugEnabled()) { + log.debug("Running ClientUpdateJob at " + serviceContext.getNow()); + } + + ClientService clientService = serviceContext.newService(ClientService.class); + clientService.updateNewClients(); + + if (log.isDebugEnabled()) { + log.debug("ClientUpdateJob ended at " + serviceContext.getNow()); + } + } finally { + if (persistenceContext != null) { + persistenceContext.close(); + } } - - ClientService clientService = serviceContext.newService(ClientService.class); - clientService.updateNewClients(); } } Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/EDIManagementJob.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/EDIManagementJob.java 2014-07-02 16:04:19 UTC (rev 327) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/EDIManagementJob.java 2014-07-02 17:08:07 UTC (rev 328) @@ -24,8 +24,11 @@ * #L% */ +import com.franciaflex.faxtomail.FaxToMailApplicationContext; +import com.franciaflex.faxtomail.persistence.entities.FaxToMailTopiaPersistenceContext; import com.franciaflex.faxtomail.services.FaxToMailServiceContext; import com.franciaflex.faxtomail.services.service.EmailService; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.quartz.JobExecutionContext; @@ -39,28 +42,37 @@ private static final Log log = LogFactory.getLog(EDIManagementJob.class); - protected FaxToMailServiceContext serviceContext; + protected FaxToMailApplicationContext applicationContext; @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - serviceContext = getServiceContext(jobExecutionContext); + applicationContext = getApplicationContext(jobExecutionContext); + FaxToMailTopiaPersistenceContext persistenceContext = null; - if (log.isDebugEnabled()) { - log.debug("Running EDIManagementJob at " + serviceContext.getNow()); + try { + persistenceContext = applicationContext.newPersistenceContext(); + FaxToMailServiceContext serviceContext = applicationContext.newServiceContext(persistenceContext); + if (log.isDebugEnabled()) { + log.debug("Running EDIManagementJob at " + serviceContext.getNow()); + } + + EmailService emailService = serviceContext.newService(EmailService.class); + emailService.transmitPendingDemandsToEdi(); + + if (log.isDebugEnabled()) { + log.debug("Transmission over"); + } + + emailService.updateRangeRowsWithEdiReturns(); + + if (log.isDebugEnabled()) { + log.debug("End of EDIManagementJob"); + } + } finally { + if (persistenceContext != null) { + persistenceContext.close(); + } } - - EmailService emailService = serviceContext.newService(EmailService.class); - emailService.transmitPendingDemandsToEdi(); - - if (log.isDebugEnabled()) { - log.debug("Transmission over"); - } - - emailService.updateRangeRowsWithEdiReturns(); - - if (log.isDebugEnabled()) { - log.debug("End of EDIManagementJob"); - } } } Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-07-02 16:04:19 UTC (rev 327) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java 2014-07-02 17:08:07 UTC (rev 328) @@ -71,6 +71,8 @@ import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; +import com.franciaflex.faxtomail.FaxToMailApplicationContext; +import com.franciaflex.faxtomail.FaxToMailConfiguration; import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.persistence.entities.AttachmentFile; import com.franciaflex.faxtomail.persistence.entities.AttachmentFileImpl; @@ -81,6 +83,7 @@ import com.franciaflex.faxtomail.persistence.entities.EmailAccount; import com.franciaflex.faxtomail.persistence.entities.EmailImpl; import com.franciaflex.faxtomail.persistence.entities.ExtensionCommand; +import com.franciaflex.faxtomail.persistence.entities.FaxToMailTopiaPersistenceContext; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; import com.franciaflex.faxtomail.persistence.entities.MailFilter; import com.franciaflex.faxtomail.persistence.entities.MailFolder; @@ -105,22 +108,58 @@ private static final Log log = LogFactory.getLog(MailFilterJob.class); - protected FaxToMailServiceContext serviceContext; + protected FaxToMailApplicationContext applicationContext; + protected FaxToMailConfiguration config; + protected ConfigurationService configurationService; + + protected EmailService emailService; + + protected MailFolderService mailFolderService; + + protected ClientService clientService; + + protected DecoratorService decoratorService; + @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - serviceContext = getServiceContext(jobExecutionContext); + applicationContext = getApplicationContext(jobExecutionContext); + FaxToMailTopiaPersistenceContext persistenceContext = null; - if (log.isDebugEnabled()) { - log.debug("Running MailFilterJob at " + serviceContext.getNow()); - } - configurationService = serviceContext.newService(ConfigurationService.class); - Collection<EmailAccount> emailAccounts = configurationService.getEmailAccounts(); + try { + persistenceContext = applicationContext.newPersistenceContext(); + FaxToMailServiceContext serviceContext = applicationContext.newServiceContext(persistenceContext); + config = serviceContext.getApplicationConfig(); + + if (log.isDebugEnabled()) { + log.debug("Running MailFilterJob at " + serviceContext.getNow()); + } - for (EmailAccount account : emailAccounts) { - checkEmails(account); + emailService = serviceContext.newService(EmailService.class); + mailFolderService = serviceContext.newService(MailFolderService.class); + configurationService = serviceContext.newService(ConfigurationService.class); + clientService = serviceContext.newService(ClientService.class); + decoratorService = serviceContext.newService(DecoratorService.class); + + Collection<EmailAccount> emailAccounts = configurationService.getEmailAccounts(); + + for (EmailAccount account : emailAccounts) { + checkEmails(account); + } + + if (log.isDebugEnabled()) { + log.debug("MailFilterJob ended at " + serviceContext.getNow()); + } + } catch (Exception ex) { + if (log.isErrorEnabled()) { + log.error("Can't run quartz job", ex); + } + } finally { + if (persistenceContext != null) { + persistenceContext.close(); + } } } @@ -182,7 +221,7 @@ protected void close(Folder folder) { if (folder != null && folder.isOpen()) { try { - boolean expunge = serviceContext.getApplicationConfig().isMailExpunge(); + boolean expunge = config.isMailExpunge(); folder.close(expunge); } catch (Exception e) { log.error("Error while closing the folder", e); @@ -205,10 +244,8 @@ log.debug(count + " messages, " + unread + " unread"); } - EmailService emailService = serviceContext.newService(EmailService.class); - MailFolderService mailFolderService = serviceContext.newService(MailFolderService.class); - for (int i = 0 ; i < count ; i++) { + log.debug("### mail " + i); try { Email email = new EmailImpl(); @@ -276,8 +313,7 @@ sender = sender.replaceFirst("^.*<(.*)>$", "$1"); sender = sender.toLowerCase(); - Client client = serviceContext.newService(ClientService.class) - .getClientForEmailAddress(sender, email); + Client client = clientService.getClientForEmailAddress(sender, email); modifiedProperties.add(Email.PROPERTY_SENDER); if (client != null) { @@ -352,7 +388,7 @@ Date now = new Date(); - DecoratorService decoratorService = serviceContext.newService(DecoratorService.class); + Decorator<Date> dateDecorator = decoratorService.getDecoratorByType(Date.class, DecoratorService.DATE); String projectRef = t("faxtomail.email.projectReference.default", dateDecorator.toString(now)); email.setProjectReference(projectRef); @@ -403,7 +439,7 @@ log.debug("Message:" +message.getSubject() + " placé dans le dossier " + email.getMailFolder().getName()); } // suppression des mails sur le serveur distant (automatique par default) - if (serviceContext.getApplicationConfig().isMailDelete()) { + if (config.isMailDelete()) { message.setFlag(Flags.Flag.DELETED, true); } @@ -621,7 +657,6 @@ writer.close(); // convert content to blob - EmailService emailService = serviceContext.newService(EmailService.class); AttachmentFile attachmentFileNew = emailService.getAttachmentFileFromStream(new FileInputStream(target)); attachmentFileNew.setFilename(name + ".pdf"); @@ -679,7 +714,6 @@ imageRenderer.saveImage(target); // convert content to blob - EmailService emailService = serviceContext.newService(EmailService.class); AttachmentFile attachmentFileNew = emailService.getAttachmentFileFromStream(new FileInputStream(target)); attachmentFileNew.setFilename(name + ".png"); Modified: trunk/faxtomail-ui-web/src/main/resources/quartz.properties =================================================================== --- trunk/faxtomail-ui-web/src/main/resources/quartz.properties 2014-07-02 16:04:19 UTC (rev 327) +++ trunk/faxtomail-ui-web/src/main/resources/quartz.properties 2014-07-02 17:08:07 UTC (rev 328) @@ -23,8 +23,6 @@ ### org.quartz.scheduler.instanceName = FaxToMailScheduler -# Set job count to 1 to avoid two job to run at the same time and avoid -# org.hibernate.HibernateException: Found shared references to a collection: com.franciaflex.faxtomail.persistence.entities.MailFolderImpl.replyAddresses -org.quartz.threadPool.threadCount = 1 +org.quartz.threadPool.threadCount = 10 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore \ No newline at end of file
participants (1)
-
echatellier@users.forge.codelutin.com