diff --git a/account/src/main/java/de/muehlencord/shared/account/business/mail/boundary/MailTemplateService.java b/account/src/main/java/de/muehlencord/shared/account/business/mail/boundary/MailTemplateService.java index 0624588..8210000 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/mail/boundary/MailTemplateService.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/mail/boundary/MailTemplateService.java @@ -1,98 +1,106 @@ -/* - * Copyright 2018 joern.muehlencord. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package de.muehlencord.shared.account.business.mail.boundary; - -import de.muehlencord.shared.account.business.mail.entity.MailDatamodel; -import de.muehlencord.shared.account.business.mail.entity.MailTemplateEntity; -import de.muehlencord.shared.account.business.mail.entity.MailTemplateException; -import de.muehlencord.shared.account.util.AccountPU; -import freemarker.cache.StringTemplateLoader; -import freemarker.template.Configuration; -import freemarker.template.Template; -import freemarker.template.TemplateException; -import freemarker.template.TemplateExceptionHandler; -import java.io.IOException; -import java.io.Serializable; -import java.io.StringWriter; -import java.io.Writer; -import javax.ejb.Stateless; -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.persistence.Query; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author jomu - */ -@Stateless -public class MailTemplateService implements Serializable { - - private static final long serialVersionUID = -136113381443058697L; - - private static final Logger LOGGER = LoggerFactory.getLogger(MailTemplateService.class.getName()); - - @Inject - @AccountPU - EntityManager em; - - public String getStringFromTemplate(String templateName, MailDatamodel dataModel) throws MailTemplateException { - try { - Query query = em.createNamedQuery("MailTemplateEntity.findByTemplateName"); - query.setParameter("templateName", templateName); - MailTemplateEntity templateEntity = (MailTemplateEntity) query.getSingleResult(); - if (templateEntity == null) { - LOGGER.error("Tempate with name " + templateName + " not found"); - return null; - } - return fillTemplate(templateName, templateEntity.getTemplateValue(), dataModel); - } catch (MailTemplateException ex) { - String hint = "Error while processing template with name " + templateName + "."; - LOGGER.error(hint + " " + ex.toString()); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug(hint, ex); - } - throw new MailTemplateException(hint, ex); - - } - } - - public String fillTemplate(String templateName, String templateString, MailDatamodel dataModel) throws MailTemplateException { - try { - Configuration configuration = new Configuration(Configuration.VERSION_2_3_23); - configuration.setDefaultEncoding("UTF-8"); // FIXME - make encoding configurable - configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); - - StringTemplateLoader stringLoader = new StringTemplateLoader(); - stringLoader.putTemplate(templateName, templateString); - configuration.setTemplateLoader(stringLoader); - Template template = configuration.getTemplate(templateName); - - Writer out = new StringWriter(); - template.process(dataModel, out); - String resultString = out.toString(); - return resultString; - } catch (TemplateException | IOException ex) { - String hint = "Error while processing template with name " + templateName + "."; - LOGGER.error(hint + " " + ex.toString()); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug(hint, ex); - } - throw new MailTemplateException(hint, ex); - } - } -} +/* + * Copyright 2018 joern.muehlencord. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.muehlencord.shared.account.business.mail.boundary; + +import de.muehlencord.shared.account.business.mail.entity.MailDatamodel; +import de.muehlencord.shared.account.business.mail.entity.MailTemplateEntity; +import de.muehlencord.shared.account.business.mail.entity.MailTemplateException; +import de.muehlencord.shared.account.util.AccountPU; +import freemarker.cache.StringTemplateLoader; +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; +import freemarker.template.TemplateExceptionHandler; +import java.io.IOException; +import java.io.Serializable; +import java.io.StringWriter; +import java.io.Writer; +import javax.ejb.Lock; +import javax.ejb.LockType; +import javax.ejb.Stateless; +import javax.ejb.TransactionAttribute; +import javax.ejb.TransactionAttributeType; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.Query; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author jomu + */ +@Stateless +public class MailTemplateService implements Serializable { + + private static final long serialVersionUID = -136113381443058697L; + + private static final Logger LOGGER = LoggerFactory.getLogger(MailTemplateService.class.getName()); + + @Inject + @AccountPU + EntityManager em; + + @Lock(LockType.READ) + @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) + public String getStringFromTemplate(String templateName, MailDatamodel dataModel) throws MailTemplateException { + try { + Query query = em.createNamedQuery("MailTemplateEntity.findByTemplateName"); + query.setParameter("templateName", templateName); + MailTemplateEntity templateEntity = (MailTemplateEntity) query.getSingleResult(); + if (templateEntity == null) { + LOGGER.error("Tempate with name " + templateName + " not found"); + return null; + } + return fillTemplate(templateName, templateEntity.getTemplateValue(), dataModel); + } catch (MailTemplateException ex) { + String hint = "Error while processing template with name " + templateName + "."; + LOGGER.error(hint + " " + ex.toString()); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug(hint, ex); + } + throw new MailTemplateException(hint, ex); + + } + } + + @Lock(LockType.READ) + @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) + public String fillTemplate(String templateName, String templateString, MailDatamodel dataModel) throws MailTemplateException { + try { + Configuration configuration = new Configuration(Configuration.VERSION_2_3_23); + configuration.setDefaultEncoding("UTF-8"); // FIXME - make encoding configurable + configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); + + StringTemplateLoader stringLoader = new StringTemplateLoader(); + stringLoader.putTemplate(templateName, templateString); + configuration.setTemplateLoader(stringLoader); + Template template = configuration.getTemplate(templateName); + + Writer out = new StringWriter(); + template.process(dataModel, out); + String resultString = out.toString(); + return resultString; + } catch (TemplateException | IOException ex) { + String hint = "Error while processing template with name " + templateName + "."; + LOGGER.error(hint + " " + ex.toString()); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug(hint, ex); + } + throw new MailTemplateException(hint, ex); + } + } +}