Author: echatellier Date: 2012-05-09 15:03:32 +0200 (Wed, 09 May 2012) New Revision: 3406 Url: http://chorem.org/repositories/revision/lima/3406 Log: Remove topia context in service, juste expose contextable DAOHelper Modified: trunk/lima-business/src/main/java/org/chorem/lima/business/LimaDaoHelper.java trunk/lima-business/src/main/java/org/chorem/lima/business/LimaInterceptor.java trunk/lima-business/src/main/java/org/chorem/lima/business/accountingrules/DefaultAccountingRules.java trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/AbstractLimaService.java trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/AccountServiceImpl.java trunk/lima-business/src/test/java/org/chorem/lima/business/ejb/ClearServiceImpl.java Modified: trunk/lima-business/src/main/java/org/chorem/lima/business/LimaDaoHelper.java =================================================================== --- trunk/lima-business/src/main/java/org/chorem/lima/business/LimaDaoHelper.java 2012-05-04 14:51:40 UTC (rev 3405) +++ trunk/lima-business/src/main/java/org/chorem/lima/business/LimaDaoHelper.java 2012-05-09 13:03:32 UTC (rev 3406) @@ -42,21 +42,30 @@ */ public class LimaDaoHelper { - protected static TopiaContext getContextTransaction() { - TopiaContext result = (TopiaContext)LimaInterceptor.TOPIA_CONTEXT.get(); + protected TopiaContext context; + + public LimaDaoHelper(TopiaContext context) { + this.context = context; + } - if (result == null) { - throw new IllegalStateException("No opened transaction found. Put @TransactionAttribute on method or class"); - } + /** + * Get internal topia context. + * + * Only use full for test. + * + * @return topia context + */ + public TopiaContext getTopiaContext() { + return context; + } - return result; + public AccountDAO getAccountDAO() throws TopiaException { + return LimaCallaoDAOHelper.getAccountDAO(context); } - public static AccountDAO getAccountDAO() throws TopiaException { - return LimaCallaoDAOHelper.getAccountDAO(getContextTransaction()); + public EntryDAO getEntryDAO() throws TopiaException { + return LimaCallaoDAOHelper.getEntryDAO(context); } - public static EntryDAO getEntryDAO() throws TopiaException { - return LimaCallaoDAOHelper.getEntryDAO(getContextTransaction()); - } + } Modified: trunk/lima-business/src/main/java/org/chorem/lima/business/LimaInterceptor.java =================================================================== --- trunk/lima-business/src/main/java/org/chorem/lima/business/LimaInterceptor.java 2012-05-04 14:51:40 UTC (rev 3405) +++ trunk/lima-business/src/main/java/org/chorem/lima/business/LimaInterceptor.java 2012-05-09 13:03:32 UTC (rev 3406) @@ -38,7 +38,6 @@ import org.chorem.lima.LimaXAResource; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaContextFactory; -import org.nuiton.topia.TopiaNotFoundException; /** * Interceptor for topia context transaction. @@ -56,7 +55,7 @@ private static final Log log = LogFactory.getLog(LimaInterceptor.class); - public static final ThreadLocal<TopiaContext> TOPIA_CONTEXT = new ThreadLocal<TopiaContext>(); + public static final ThreadLocal<LimaDaoHelper> DAO_HELPER = new ThreadLocal<LimaDaoHelper>(); @Resource private TransactionManager transactionManager; @@ -70,7 +69,7 @@ // enter in service layer // interceptor will be called before each internal // ejb call, but opening a new transaction in not required - if (TOPIA_CONTEXT.get() == null) { + if (DAO_HELPER.get() == null) { // maybe take care of TransactionAttributeTypes ? if (context.getTarget().getClass().getAnnotation(TransactionAttribute.class) != null || @@ -84,7 +83,8 @@ TopiaContext rootContext = TopiaContextFactory.getContext(config.getFlatOptions()); TopiaContext tx = rootContext.beginTransaction(); - TOPIA_CONTEXT.set(tx); + LimaDaoHelper helper = new LimaDaoHelper(tx); + DAO_HELPER.set(helper); Transaction tr = transactionManager.getTransaction(); @@ -95,7 +95,7 @@ try { result = context.proceed(); } finally { - TOPIA_CONTEXT.remove(); + DAO_HELPER.remove(); } } else { result = context.proceed(); Modified: trunk/lima-business/src/main/java/org/chorem/lima/business/accountingrules/DefaultAccountingRules.java =================================================================== --- trunk/lima-business/src/main/java/org/chorem/lima/business/accountingrules/DefaultAccountingRules.java 2012-05-04 14:51:40 UTC (rev 3405) +++ trunk/lima-business/src/main/java/org/chorem/lima/business/accountingrules/DefaultAccountingRules.java 2012-05-09 13:03:32 UTC (rev 3406) @@ -38,6 +38,7 @@ import org.chorem.lima.business.LimaBusinessException; import org.chorem.lima.business.LimaDaoHelper; import org.chorem.lima.business.LimaException; +import org.chorem.lima.business.LimaInterceptor; import org.chorem.lima.entity.Account; import org.chorem.lima.entity.ClosedPeriodicEntryBook; import org.chorem.lima.entity.ClosedPeriodicEntryBookDAO; @@ -68,6 +69,16 @@ LogFactory.getLog(DefaultAccountingRules.class); /** + * Return Dao helper to use in current thread. + * Defined by {@link LimaInterceptor}. + * + * @return dao helper + */ + protected LimaDaoHelper getDaoHelper() { + return LimaInterceptor.DAO_HELPER.get(); + } + + /** * Rules to check before create accounts. */ @Override @@ -113,7 +124,7 @@ @Override public void removeAccountRules(Account account) throws LimaException { try { - EntryDAO entryDAO = LimaDaoHelper.getEntryDAO(); + EntryDAO entryDAO = getDaoHelper().getEntryDAO(); // Check if account have entries int nbentries = entryDAO.findAllByAccount(account).size(); if (nbentries != 0) { Modified: trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/AbstractLimaService.java =================================================================== --- trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/AbstractLimaService.java 2012-05-04 14:51:40 UTC (rev 3405) +++ trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/AbstractLimaService.java 2012-05-09 13:03:32 UTC (rev 3406) @@ -25,20 +25,22 @@ package org.chorem.lima.business.ejb; +import static org.nuiton.i18n.I18n._; + +import java.util.Properties; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.lima.business.LimaConfig; +import org.chorem.lima.business.LimaDaoHelper; import org.chorem.lima.business.LimaException; +import org.chorem.lima.business.LimaInterceptor; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaContextFactory; import org.nuiton.topia.TopiaException; import org.nuiton.topia.TopiaNotFoundException; import org.nuiton.topia.TopiaRuntimeException; -import java.util.Properties; - -import static org.nuiton.i18n.I18n._; - /** * Abstract code for all ejb services (get context, catch, finally...). * @@ -50,6 +52,16 @@ /** Logger. */ protected static final Log log = LogFactory.getLog(AbstractLimaService.class); + /** + * Return Dao helper to use in current thread. + * Defined by {@link LimaInterceptor}. + * + * @return dao helper + */ + protected LimaDaoHelper getDaoHelper() { + return LimaInterceptor.DAO_HELPER.get(); + } + protected static TopiaContext acquireRootContext() { try { LimaConfig config = LimaConfig.getInstance(); Modified: trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/AccountServiceImpl.java =================================================================== --- trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/AccountServiceImpl.java 2012-05-04 14:51:40 UTC (rev 3405) +++ trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/AccountServiceImpl.java 2012-05-09 13:03:32 UTC (rev 3406) @@ -37,8 +37,8 @@ import org.chorem.lima.business.AccountingRules; import org.chorem.lima.business.LimaBusinessException; import org.chorem.lima.business.LimaConfig; -import org.chorem.lima.business.LimaDaoHelper; import org.chorem.lima.business.LimaException; +import org.chorem.lima.business.LimaInterceptor; import org.chorem.lima.business.api.AccountService; import org.chorem.lima.business.utils.AccountComparator; import org.chorem.lima.entity.Account; @@ -63,7 +63,7 @@ long result = 0; try { - AccountDAO accountDAO = LimaDaoHelper.getAccountDAO(); + AccountDAO accountDAO = getDaoHelper().getAccountDAO(); result = accountDAO.count(); } catch (TopiaException ex) { throw new LimaException("Can't count", ex); @@ -91,7 +91,7 @@ account.setAccountNumber(account.getAccountNumber().toUpperCase()); // check if account number already exist - AccountDAO accountDAO = LimaDaoHelper.getAccountDAO(); + AccountDAO accountDAO = getDaoHelper().getAccountDAO(); Account existAccount = accountDAO.findByAccountNumber(account.getAccountNumber()); @@ -115,7 +115,7 @@ Account account = null; try { - AccountDAO accountDAO = LimaDaoHelper.getAccountDAO(); + AccountDAO accountDAO = getDaoHelper().getAccountDAO(); while (account == null && accountNumber.length() > 1) { @@ -135,7 +135,7 @@ Account account = null; try { - AccountDAO accountDAO = LimaDaoHelper.getAccountDAO(); + AccountDAO accountDAO = getDaoHelper().getAccountDAO(); account = accountDAO.findByAccountNumber(number); } catch (Exception ex) { throw new LimaException("Can't get master account", ex); @@ -152,7 +152,7 @@ List<Account> accountsList; try { - AccountDAO accountDAO = LimaDaoHelper.getAccountDAO(); + AccountDAO accountDAO = getDaoHelper().getAccountDAO(); accountsList = accountDAO.findAll(); Collections.sort(accountsList, new AccountComparator()); @@ -171,7 +171,7 @@ List<Account> accountsList = null; try { - AccountDAO accountDAO = LimaDaoHelper.getAccountDAO(); + AccountDAO accountDAO = getDaoHelper().getAccountDAO(); accountsList = accountDAO.findAllLeafAccounts(); } catch (Exception ex) { throw new LimaException("Can't get all leaf accounts", ex); @@ -189,7 +189,7 @@ List<Account> accountsList = null; try { - AccountDAO accountDAO = LimaDaoHelper.getAccountDAO(); + AccountDAO accountDAO = getDaoHelper().getAccountDAO(); accountsList = accountDAO.findAllSubAccounts(account); } catch (Exception ex) { throw new LimaException("Can't get all sub accounts", ex); @@ -218,7 +218,7 @@ accountingRules.removeAccountRules(account); // remove account - AccountDAO accountDAO = LimaDaoHelper.getAccountDAO(); + AccountDAO accountDAO = getDaoHelper().getAccountDAO(); Account accountToDelete = accountDAO.findByTopiaId(account.getTopiaId()); accountDAO.delete(accountToDelete); @@ -244,7 +244,7 @@ Account result = null; try { // DAO - AccountDAO accountDAO = LimaDaoHelper.getAccountDAO(); + AccountDAO accountDAO = getDaoHelper().getAccountDAO(); accountingRules.updateAccountRules(account); result = accountDAO.update(account); Modified: trunk/lima-business/src/test/java/org/chorem/lima/business/ejb/ClearServiceImpl.java =================================================================== --- trunk/lima-business/src/test/java/org/chorem/lima/business/ejb/ClearServiceImpl.java 2012-05-04 14:51:40 UTC (rev 3405) +++ trunk/lima-business/src/test/java/org/chorem/lima/business/ejb/ClearServiceImpl.java 2012-05-09 13:03:32 UTC (rev 3406) @@ -24,7 +24,6 @@ package org.chorem.lima.business.ejb; import org.chorem.lima.business.LimaException; -import org.chorem.lima.business.LimaInterceptor; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; @@ -51,7 +50,7 @@ public void clearDatabase() throws LimaException { try { - TopiaContext transaction = LimaInterceptor.TOPIA_CONTEXT.get(); + TopiaContext transaction = getDaoHelper().getTopiaContext(); transaction.createSchema(); } catch (TopiaException ex) { throw new LimaException("Can't clear database", ex);