r277 - in trunk: . nuiton-security nuiton-security/src/main/java/org/nuiton/web/security nuiton-security/src/main/java/org/nuiton/web/security/actions nuiton-struts2/src/main/java/org/nuiton/web/struts2/filter nuiton-struts2/src/main/java/org/nuiton/web/struts2/interceptor nuiton-web/src/main/java/org/nuiton/web/filter
Author: athimel Date: 2013-11-27 17:20:15 +0100 (Wed, 27 Nov 2013) New Revision: 277 Url: http://nuiton.org/projects/nuiton-web/repository/revisions/277 Log: fixes #2936 nuiton-web is now ToPIA 3.0 compliant Modified: trunk/nuiton-security/pom.xml trunk/nuiton-security/src/main/java/org/nuiton/web/security/SecurityShiroFilter.java trunk/nuiton-security/src/main/java/org/nuiton/web/security/TopiaSecurityRealm.java trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/AbstractAction.java trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/LogoutAction.java trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/RoleAction.java trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/RolePermissionsAction.java trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/UserAction.java trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/UserRolesAction.java trunk/nuiton-struts2/src/main/java/org/nuiton/web/struts2/filter/CloseTopiaTransactionFilter.java trunk/nuiton-struts2/src/main/java/org/nuiton/web/struts2/interceptor/OpenTopiaTransactionInterceptor.java trunk/nuiton-web/src/main/java/org/nuiton/web/filter/TopiaTransactionFilter.java trunk/pom.xml Modified: trunk/nuiton-security/pom.xml =================================================================== (Binary files differ) Modified: trunk/nuiton-security/src/main/java/org/nuiton/web/security/SecurityShiroFilter.java =================================================================== --- trunk/nuiton-security/src/main/java/org/nuiton/web/security/SecurityShiroFilter.java 2013-10-14 08:51:31 UTC (rev 276) +++ trunk/nuiton-security/src/main/java/org/nuiton/web/security/SecurityShiroFilter.java 2013-11-27 16:20:15 UTC (rev 277) @@ -45,13 +45,16 @@ import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.apache.shiro.web.servlet.AbstractShiroFilter; import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; -import org.nuiton.topia.TopiaContext; +import org.nuiton.config.ApplicationConfig; import org.nuiton.topia.TopiaContextFactory; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaUtil; -import org.nuiton.util.config.ApplicationConfig; -import org.nuiton.web.SecurityDAOHelper; +import org.nuiton.web.SecurityEntityEnum; +import org.nuiton.web.SecurityTopiaApplicationContext; +import org.nuiton.web.SecurityTopiaPersistenceContext; +import com.google.common.base.Function; + /** * Servlet filter used to filter requested url. * @@ -63,15 +66,21 @@ public static final String APP_CONFIG_CONTEXT = SecurityShiroFilter.class.getName() + "#" + ApplicationConfig.class.getName(); - public static final String ROOT_CONTEXT_CONTEXT = SecurityShiroFilter.class.getName() + "#" + TopiaContext.class.getName(); + public static final String ROOT_CONTEXT_CONTEXT = SecurityShiroFilter.class.getName() + "#" + SecurityTopiaApplicationContext.class.getName(); public static final String ANON_LOGIN = "anonymous"; public static final String SESSION_REQUESTED_URL = "securityRequestedUrl"; + protected static final Function<Properties,SecurityTopiaApplicationContext> CREATE_SECURITY_APPLICATION_CONTEXT = new Function<Properties, SecurityTopiaApplicationContext>() { + @Override + public SecurityTopiaApplicationContext apply(Properties input) { + return new SecurityTopiaApplicationContext(input); + } + }; protected ApplicationConfig config; - protected TopiaContext rootContext; + protected SecurityTopiaApplicationContext rootContext; @Override public void init() throws Exception { @@ -83,9 +92,9 @@ } // get topia root context - config.setOption(TopiaContextFactory.CONFIG_PERSISTENCE_CLASSES, SecurityDAOHelper.getImplementationClassesAsString()); + config.setOption(TopiaContextFactory.CONFIG_PERSISTENCE_CLASSES, SecurityEntityEnum.getImplementationClassesAsString()); Properties props = config.getFlatOptions(); - rootContext = TopiaContextFactory.getContext(props); + rootContext = TopiaContextFactory.getContext(props, CREATE_SECURITY_APPLICATION_CONTEXT); initSchema(rootContext); getServletContext().setAttribute(ROOT_CONTEXT_CONTEXT, rootContext); @@ -102,9 +111,9 @@ SecurityUtils.setSecurityManager(securityManager); } - protected static void initSchema(TopiaContext rootContext) throws TopiaException { - TopiaContext transaction = rootContext.beginTransaction(); - boolean testTable = TopiaUtil.isSchemaExist(transaction, SecurityUserImpl.class.getName()); + protected static void initSchema(SecurityTopiaApplicationContext rootContext) throws TopiaException { + SecurityTopiaPersistenceContext transaction = rootContext.newPersistenceContext(); + boolean testTable = TopiaUtil.isSchemaExist(transaction.getHibernateSupport(), SecurityUserImpl.class.getName()); transaction.closeContext(); if (!testTable) { if (log.isInfoEnabled()) { @@ -113,11 +122,11 @@ rootContext.createSchema(); // create anon user - TopiaContext transaction2 = rootContext.beginTransaction(); - SecurityUserDAO securityUserDAO = SecurityDAOHelper.getSecurityUserDAO(transaction2); + SecurityTopiaPersistenceContext transaction2 = rootContext.newPersistenceContext(); + SecurityUserTopiaDao securityUserDAO = transaction2.getSecurityUserDao(); SecurityUser anonUser = securityUserDAO.create(); anonUser.setLogin(ANON_LOGIN); - transaction2.commitTransaction(); + transaction2.commit(); transaction2.closeContext(); } else { if (log.isDebugEnabled()) { Modified: trunk/nuiton-security/src/main/java/org/nuiton/web/security/TopiaSecurityRealm.java =================================================================== --- trunk/nuiton-security/src/main/java/org/nuiton/web/security/TopiaSecurityRealm.java 2013-10-14 08:51:31 UTC (rev 276) +++ trunk/nuiton-security/src/main/java/org/nuiton/web/security/TopiaSecurityRealm.java 2013-11-27 16:20:15 UTC (rev 277) @@ -41,12 +41,10 @@ import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.TopiaRuntimeException; +import org.nuiton.config.ApplicationConfig; import org.nuiton.util.StringUtil; -import org.nuiton.util.config.ApplicationConfig; -import org.nuiton.web.SecurityDAOHelper; +import org.nuiton.web.SecurityTopiaApplicationContext; +import org.nuiton.web.SecurityTopiaPersistenceContext; /** * Topia shiro realm finding user in database. @@ -57,14 +55,14 @@ private static final Log log = LogFactory.getLog(TopiaSecurityRealm.class); - protected TopiaContext rootContext; + protected SecurityTopiaApplicationContext rootContext; protected ApplicationConfig config; /** Authorization cache (invalidated at login). */ protected transient Map<String, SimpleAuthorizationInfo> authorizationCache; - public TopiaSecurityRealm(TopiaContext rootContext, ApplicationConfig config) { + public TopiaSecurityRealm(SecurityTopiaApplicationContext rootContext, ApplicationConfig config) { this.rootContext = rootContext; this.config = config; authorizationCache = new HashMap<String, SimpleAuthorizationInfo>(); @@ -88,10 +86,10 @@ SimpleAuthorizationInfo result = authorizationCache.get(login); if (result == null) { Properties props = config.getFlatOptions(); - TopiaContext transaction = null; + SecurityTopiaPersistenceContext transaction = null; try { - transaction = rootContext.beginTransaction(); - SecurityUserDAO securityUserDAO = SecurityDAOHelper.getSecurityUserDAO(transaction); + transaction = rootContext.newPersistenceContext(); + SecurityUserTopiaDao securityUserDAO = transaction.getSecurityUserDao(); if (log.isDebugEnabled()) { log.debug("Build autorisation list for user : " + login); @@ -158,11 +156,7 @@ } } finally { if (transaction != null) { - try { - transaction.closeContext(); - } catch (TopiaException ex) { - throw new TopiaRuntimeException(ex); - } + transaction.closeContext(); } } } else { @@ -185,12 +179,12 @@ } AuthenticationInfo result = null; - TopiaContext transaction = null; + SecurityTopiaPersistenceContext transaction = null; try { - transaction = rootContext.beginTransaction(); - SecurityUserDAO securityUserDAO = SecurityDAOHelper.getSecurityUserDAO(transaction); + transaction = rootContext.newPersistenceContext(); + SecurityUserTopiaDao securityUserDAO = transaction.getSecurityUserDao(); - SecurityUser securityUser = securityUserDAO.findByLogin(login); + SecurityUser securityUser = securityUserDAO.forLoginEquals(login).findUnique(); if (securityUser != null) { if (login.equals(SecurityShiroFilter.ANON_LOGIN)) { result = new SimpleAuthenticationInfo(securityUser.getLogin(), @@ -204,15 +198,9 @@ authorizationCache.remove(login); } - } catch (TopiaException ex) { - throw new TopiaRuntimeException(ex); } finally { if (transaction != null) { - try { - transaction.closeContext(); - } catch (TopiaException ex) { - throw new TopiaRuntimeException(ex); - } + transaction.closeContext(); } } Modified: trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/AbstractAction.java =================================================================== --- trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/AbstractAction.java 2013-10-14 08:51:31 UTC (rev 276) +++ trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/AbstractAction.java 2013-11-27 16:20:15 UTC (rev 277) @@ -30,8 +30,8 @@ import org.apache.struts2.interceptor.ParameterAware; import org.apache.struts2.util.ServletContextAware; -import org.nuiton.topia.TopiaContext; -import org.nuiton.util.config.ApplicationConfig; +import org.nuiton.config.ApplicationConfig; +import org.nuiton.web.SecurityTopiaApplicationContext; import org.nuiton.web.security.SecurityShiroFilter; import com.opensymphony.xwork2.ActionSupport; @@ -41,7 +41,7 @@ /** serialVersionUID. */ private static final long serialVersionUID = -1097798007319592593L; - protected TopiaContext rootContext; + protected SecurityTopiaApplicationContext rootContext; protected ApplicationConfig config; protected Map<String, String[]> actionParameters; @@ -53,7 +53,7 @@ @Override public void setServletContext(ServletContext context) { config = (ApplicationConfig)context.getAttribute(SecurityShiroFilter.APP_CONFIG_CONTEXT); - rootContext = (TopiaContext)context.getAttribute(SecurityShiroFilter.ROOT_CONTEXT_CONTEXT); + rootContext = (SecurityTopiaApplicationContext)context.getAttribute(SecurityShiroFilter.ROOT_CONTEXT_CONTEXT); } /** Modified: trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/LogoutAction.java =================================================================== --- trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/LogoutAction.java 2013-10-14 08:51:31 UTC (rev 276) +++ trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/LogoutAction.java 2013-11-27 16:20:15 UTC (rev 277) @@ -26,14 +26,14 @@ import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; -import org.nuiton.web.security.SecurityUserDAO; +import org.nuiton.web.security.SecurityUserTopiaDao; public class LogoutAction extends AbstractAction { /** serialVersionUID. */ private static final long serialVersionUID = 1L; - protected SecurityUserDAO securityUserDAO; + protected SecurityUserTopiaDao securityUserDAO; @Override public String execute() throws Exception { Modified: trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/RoleAction.java =================================================================== --- trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/RoleAction.java 2013-10-14 08:51:31 UTC (rev 276) +++ trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/RoleAction.java 2013-11-27 16:20:15 UTC (rev 277) @@ -27,13 +27,10 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.TopiaRuntimeException; -import org.nuiton.web.SecurityDAOHelper; +import org.nuiton.web.SecurityTopiaPersistenceContext; import org.nuiton.web.security.SecurityRole; -import org.nuiton.web.security.SecurityRoleDAO; import org.nuiton.web.security.SecurityRoleImpl; +import org.nuiton.web.security.SecurityRoleTopiaDao; public class RoleAction extends AbstractAction { @@ -42,7 +39,7 @@ private static final Log log = LogFactory.getLog(RoleAction.class); - protected SecurityRoleDAO securityRoleDAO; + protected SecurityRoleTopiaDao securityRoleDAO; protected SecurityRole role; @@ -50,14 +47,10 @@ if (role == null) { String roleId = getParameter("roleId"); if (StringUtils.isNotBlank(roleId)) { - try { - TopiaContext transaction = rootContext.beginTransaction(); - securityRoleDAO = SecurityDAOHelper.getSecurityRoleDAO(transaction); - role = securityRoleDAO.findByTopiaId(roleId); - transaction.closeContext(); - } catch (TopiaException ex) { - throw new TopiaRuntimeException(ex); - } + SecurityTopiaPersistenceContext transaction = rootContext.newPersistenceContext(); + securityRoleDAO = transaction.getSecurityRoleDao(); + role = securityRoleDAO.findByTopiaId(roleId); + transaction.closeContext(); } else { role = new SecurityRoleImpl(); } @@ -69,11 +62,11 @@ try { String roleId = getParameter("roleId"); if (StringUtils.isNotBlank(roleId)) { - TopiaContext transaction = rootContext.beginTransaction(); - securityRoleDAO = SecurityDAOHelper.getSecurityRoleDAO(transaction); + SecurityTopiaPersistenceContext transaction = rootContext.newPersistenceContext(); + securityRoleDAO = transaction.getSecurityRoleDao(); SecurityRole role = securityRoleDAO.findByTopiaId(roleId); securityRoleDAO.delete(role); - transaction.commitTransaction(); + transaction.commit(); transaction.closeContext(); } @@ -91,14 +84,14 @@ String result = super.execute(); try { - TopiaContext transaction = rootContext.beginTransaction(); - securityRoleDAO = SecurityDAOHelper.getSecurityRoleDAO(transaction); + SecurityTopiaPersistenceContext transaction = rootContext.newPersistenceContext(); + securityRoleDAO = transaction.getSecurityRoleDao(); if (getRole().getTopiaId() == null) { securityRoleDAO.create(getRole()); } else { securityRoleDAO.update(getRole()); } - transaction.commitTransaction(); + transaction.commit(); transaction.closeContext(); } catch (Exception ex) { addActionError(ex.getMessage()); Modified: trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/RolePermissionsAction.java =================================================================== --- trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/RolePermissionsAction.java 2013-10-14 08:51:31 UTC (rev 276) +++ trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/RolePermissionsAction.java 2013-11-27 16:20:15 UTC (rev 277) @@ -32,20 +32,19 @@ import java.util.Properties; import org.apache.commons.lang3.StringUtils; -import org.nuiton.topia.TopiaContext; -import org.nuiton.web.SecurityDAOHelper; +import org.nuiton.web.SecurityTopiaPersistenceContext; import org.nuiton.web.security.SecurityRole; -import org.nuiton.web.security.SecurityRoleDAO; -import org.nuiton.web.security.SecurityUserDAO; +import org.nuiton.web.security.SecurityRoleTopiaDao; +import org.nuiton.web.security.SecurityUserTopiaDao; public class RolePermissionsAction extends AbstractAction { /** serialVersionUID. */ private static final long serialVersionUID = 1L; - protected SecurityUserDAO securityUserDAO; + protected SecurityUserTopiaDao securityUserDAO; - protected SecurityRoleDAO securityRoleDAO; + protected SecurityRoleTopiaDao securityRoleDAO; /** Id categories with name. */ protected Map<String, String> categories; @@ -60,9 +59,9 @@ @Override public String input() throws Exception { - TopiaContext transaction = rootContext.beginTransaction(); - securityRoleDAO = SecurityDAOHelper.getSecurityRoleDAO(transaction); - roles = securityRoleDAO.findAllWithOrder(SecurityRole.NAME); + SecurityTopiaPersistenceContext transaction = rootContext.newPersistenceContext(); + securityRoleDAO = transaction.getSecurityRoleDao(); + roles = securityRoleDAO.newQueryBuilder().setOrderByArguments(SecurityRole.NAME).findAll(); transaction.closeContext(); categories = new HashMap<String, String>(); @@ -123,8 +122,8 @@ result = input(); } else { try { - TopiaContext transaction = rootContext.beginTransaction(); - securityRoleDAO = SecurityDAOHelper.getSecurityRoleDAO(transaction); + SecurityTopiaPersistenceContext transaction = rootContext.newPersistenceContext(); + securityRoleDAO = transaction.getSecurityRoleDao(); for (String roleId : roleIds) { SecurityRole securityRole = securityRoleDAO.findByTopiaId(roleId); securityRole.clearPermissions(); @@ -136,7 +135,7 @@ } } } - transaction.commitTransaction(); + transaction.commit(); } catch (Exception ex) { addActionError(ex.getMessage()); result = input(); Modified: trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/UserAction.java =================================================================== --- trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/UserAction.java 2013-10-14 08:51:31 UTC (rev 276) +++ trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/UserAction.java 2013-11-27 16:20:15 UTC (rev 277) @@ -24,19 +24,17 @@ package org.nuiton.web.security.actions; -import static org.nuiton.i18n.I18n._; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.TopiaRuntimeException; import org.nuiton.util.StringUtil; -import org.nuiton.web.SecurityDAOHelper; +import org.nuiton.web.SecurityTopiaPersistenceContext; import org.nuiton.web.security.SecurityUser; -import org.nuiton.web.security.SecurityUserDAO; import org.nuiton.web.security.SecurityUserImpl; +import org.nuiton.web.security.SecurityUserTopiaDao; +import static org.nuiton.i18n.I18n._; + public class UserAction extends AbstractAction { /** serialVersionUID. */ @@ -44,7 +42,7 @@ private static final Log log = LogFactory.getLog(UserAction.class); - protected SecurityUserDAO securityUserDAO; + protected SecurityUserTopiaDao securityUserDAO; protected SecurityUser user; @@ -56,14 +54,10 @@ if (user == null) { String roleId = getParameter("userId"); if (StringUtils.isNotBlank(roleId)) { - try { - TopiaContext transaction = rootContext.beginTransaction(); - securityUserDAO = SecurityDAOHelper.getSecurityUserDAO(transaction); - user = securityUserDAO.findByTopiaId(roleId); - transaction.closeContext(); - } catch (TopiaException ex) { - throw new TopiaRuntimeException(ex); - } + SecurityTopiaPersistenceContext transaction = rootContext.newPersistenceContext(); + securityUserDAO = transaction.getSecurityUserDao(); + user = securityUserDAO.findByTopiaId(roleId); + transaction.closeContext(); } else { user = new SecurityUserImpl(); } @@ -83,11 +77,11 @@ try { String roleId = getParameter("userId"); if (StringUtils.isNotBlank(roleId)) { - TopiaContext transaction = rootContext.beginTransaction(); - securityUserDAO = SecurityDAOHelper.getSecurityUserDAO(transaction); + SecurityTopiaPersistenceContext transaction = rootContext.newPersistenceContext(); + securityUserDAO = transaction.getSecurityUserDao(); SecurityUser user = securityUserDAO.findByTopiaId(roleId); securityUserDAO.delete(user); - transaction.commitTransaction(); + transaction.commit(); transaction.closeContext(); } } catch (Exception ex) { @@ -113,8 +107,8 @@ String result = super.execute(); try { - TopiaContext transaction = rootContext.beginTransaction(); - securityUserDAO = SecurityDAOHelper.getSecurityUserDAO(transaction); + SecurityTopiaPersistenceContext transaction = rootContext.newPersistenceContext(); + securityUserDAO = transaction.getSecurityUserDao(); SecurityUser user = getUser(); if (StringUtils.isNotBlank(password)) { @@ -126,7 +120,7 @@ } else { securityUserDAO.update(user); } - transaction.commitTransaction(); + transaction.commit(); transaction.closeContext(); } catch (Exception ex) { addActionError(ex.getMessage()); Modified: trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/UserRolesAction.java =================================================================== --- trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/UserRolesAction.java 2013-10-14 08:51:31 UTC (rev 276) +++ trunk/nuiton-security/src/main/java/org/nuiton/web/security/actions/UserRolesAction.java 2013-11-27 16:20:15 UTC (rev 277) @@ -26,21 +26,20 @@ import java.util.List; -import org.nuiton.topia.TopiaContext; -import org.nuiton.web.SecurityDAOHelper; +import org.nuiton.web.SecurityTopiaPersistenceContext; import org.nuiton.web.security.SecurityRole; -import org.nuiton.web.security.SecurityRoleDAO; +import org.nuiton.web.security.SecurityRoleTopiaDao; import org.nuiton.web.security.SecurityUser; -import org.nuiton.web.security.SecurityUserDAO; +import org.nuiton.web.security.SecurityUserTopiaDao; public class UserRolesAction extends AbstractAction { /** serialVersionUID. */ private static final long serialVersionUID = 1L; - protected SecurityUserDAO securityUserDAO; + protected SecurityUserTopiaDao securityUserDAO; - protected SecurityRoleDAO securityRoleDAO; + protected SecurityRoleTopiaDao securityRoleDAO; protected List<SecurityUser> users; @@ -50,11 +49,11 @@ @Override public String input() throws Exception { - TopiaContext transaction = rootContext.beginTransaction(); - securityUserDAO = SecurityDAOHelper.getSecurityUserDAO(transaction); - securityRoleDAO = SecurityDAOHelper.getSecurityRoleDAO(transaction); - users = securityUserDAO.findAllWithOrder(SecurityUser.LOGIN); - roles = securityRoleDAO.findAllWithOrder(SecurityRole.NAME); + SecurityTopiaPersistenceContext transaction = rootContext.newPersistenceContext(); + securityUserDAO = transaction.getSecurityUserDao(); + securityRoleDAO = transaction.getSecurityRoleDao(); + users = securityUserDAO.newQueryBuilder().setOrderByArguments(SecurityUser.LOGIN).findAll(); + roles = securityRoleDAO.newQueryBuilder().setOrderByArguments(SecurityRole.NAME).findAll(); transaction.closeContext(); return super.input(); } @@ -79,9 +78,9 @@ result = input(); } else { try { - TopiaContext transaction = rootContext.beginTransaction(); - securityUserDAO = SecurityDAOHelper.getSecurityUserDAO(transaction); - securityRoleDAO = SecurityDAOHelper.getSecurityRoleDAO(transaction); + SecurityTopiaPersistenceContext transaction = rootContext.newPersistenceContext(); + securityUserDAO = transaction.getSecurityUserDao(); + securityRoleDAO = transaction.getSecurityRoleDao(); for (String userId : userIds) { SecurityUser securityUser = securityUserDAO.findByTopiaId(userId); securityUser.clearSecurityRole(); @@ -94,7 +93,7 @@ } } } - transaction.commitTransaction(); + transaction.commit(); transaction.closeContext(); } catch (Exception ex) { addActionError(ex.getMessage()); Modified: trunk/nuiton-struts2/src/main/java/org/nuiton/web/struts2/filter/CloseTopiaTransactionFilter.java =================================================================== --- trunk/nuiton-struts2/src/main/java/org/nuiton/web/struts2/filter/CloseTopiaTransactionFilter.java 2013-10-14 08:51:31 UTC (rev 276) +++ trunk/nuiton-struts2/src/main/java/org/nuiton/web/struts2/filter/CloseTopiaTransactionFilter.java 2013-11-27 16:20:15 UTC (rev 277) @@ -25,12 +25,7 @@ package org.nuiton.web.struts2.filter; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.TopiaRuntimeException; -import org.nuiton.web.struts2.interceptor.OpenTopiaTransactionInterceptor; +import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; @@ -38,8 +33,12 @@ import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaPersistenceContext; +import org.nuiton.web.struts2.interceptor.OpenTopiaTransactionInterceptor; + /** Close a TopiaTransaction instance stored in the servlet context. * * The main usage is to close a transaction opened by the @@ -62,7 +61,7 @@ try { filterChain.doFilter(servletRequest, servletResponse); } finally { - TopiaContext transaction = (TopiaContext) + TopiaPersistenceContext transaction = (TopiaPersistenceContext) servletRequest.getAttribute( OpenTopiaTransactionInterceptor.TOPIA_TRANSACTION_REQUEST_ATTRIBUTE); @@ -78,11 +77,7 @@ if (log.isDebugEnabled()) { log.debug("close transaction " + transaction); } - try { - transaction.closeContext(); - } catch (TopiaException e) { - throw new TopiaRuntimeException(e); - } + transaction.closeContext(); } } } Modified: trunk/nuiton-struts2/src/main/java/org/nuiton/web/struts2/interceptor/OpenTopiaTransactionInterceptor.java =================================================================== --- trunk/nuiton-struts2/src/main/java/org/nuiton/web/struts2/interceptor/OpenTopiaTransactionInterceptor.java 2013-10-14 08:51:31 UTC (rev 276) +++ trunk/nuiton-struts2/src/main/java/org/nuiton/web/struts2/interceptor/OpenTopiaTransactionInterceptor.java 2013-11-27 16:20:15 UTC (rev 277) @@ -24,24 +24,25 @@ */ package org.nuiton.web.struts2.interceptor; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.interceptor.AbstractInterceptor; -import com.opensymphony.xwork2.util.TextParseUtil; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.ServletActionContext; -import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; -import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.topia.TopiaPersistenceContext; +import org.nuiton.topia.TopiaTransaction; import org.nuiton.topia.framework.TopiaTransactionAware; import org.nuiton.web.struts2.filter.CloseTopiaTransactionFilter; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; +import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.interceptor.AbstractInterceptor; +import com.opensymphony.xwork2.util.TextParseUtil; /** * <!-- START SNIPPET: description --> @@ -123,7 +124,7 @@ * @return the new freshly opened transaction * @throws TopiaException if any problem while opening a new transaction */ - protected abstract TopiaContext beginTransaction() throws TopiaException; + protected abstract TopiaPersistenceContext beginTransaction() throws TopiaException; @Override public void init() { @@ -160,10 +161,10 @@ TopiaTransactionProxyInvocationHandler proxyInvocationHandler = new TopiaTransactionProxyInvocationHandler(); - TopiaContext proxy = (TopiaContext) Proxy.newProxyInstance( + TopiaPersistenceContext proxy = (TopiaPersistenceContext) Proxy.newProxyInstance( getClass().getClassLoader(), - new Class<?>[]{TopiaContext.class, - TopiaContextImplementor.class}, + new Class<?>[]{TopiaPersistenceContext.class, + TopiaTransaction.class}, proxyInvocationHandler ); @@ -174,16 +175,16 @@ } /** - * Handler of a proxy on a {@link TopiaContext}. + * Handler of a proxy on a {@link TopiaPersistenceContext}. * * @see #excludeMethods */ public class TopiaTransactionProxyInvocationHandler implements InvocationHandler { /** Target to use for the proxy. */ - protected TopiaContext transaction; + protected TopiaPersistenceContext transaction; - public TopiaContext getTransaction() { + public TopiaPersistenceContext getTransaction() { return transaction; } Modified: trunk/nuiton-web/src/main/java/org/nuiton/web/filter/TopiaTransactionFilter.java =================================================================== --- trunk/nuiton-web/src/main/java/org/nuiton/web/filter/TopiaTransactionFilter.java 2013-10-14 08:51:31 UTC (rev 276) +++ trunk/nuiton-web/src/main/java/org/nuiton/web/filter/TopiaTransactionFilter.java 2013-11-27 16:20:15 UTC (rev 277) @@ -28,10 +28,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Transaction; -import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.AbstractTopiaPersistenceContext; import org.nuiton.topia.TopiaException; -import org.nuiton.topia.TopiaRuntimeException; -import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.topia.TopiaPersistenceContext; +import org.nuiton.topia.TopiaTransaction; import javax.servlet.Filter; import javax.servlet.FilterChain; @@ -50,7 +50,7 @@ /** * <h2>Purpose of this filter</h2> * This filter purpose is to inject in the request a transaction from - * {@link TopiaContext} and deal with the complete lifecycle of a topia + * {@link org.nuiton.topia.TopiaPersistenceContext} and deal with the complete lifecycle of a topia * transaction while a request. * <p/> * The injected transaction will be closed (if was really opened) at the end of @@ -66,7 +66,8 @@ * Default implementation of this hook is to throw an exception. * </li> * <li>{@code unusedMethods}: This parameters configure a set of method names - * which should be by-pass when the proxied transaction was not still open (via a {@link TopiaContext#beginTransaction()}. + * which should be by-pass when the proxied transaction was not still open (via a + * {@link org.nuiton.topia.AbstractTopiaApplicationContext#newPersistenceContext()} ()}. * When a such method is called on the transaction then the filter will pass in * the hook {@link #onUnusedMethod(Object, Method, Object[])}. * <p/> @@ -159,8 +160,8 @@ this.requestAttributeName = requestAttributeName; } - public static TopiaContext getTransaction(ServletRequest request) { - TopiaContext topiaContext = (TopiaContext) + public static TopiaPersistenceContext getTransaction(ServletRequest request) { + TopiaPersistenceContext topiaContext = (TopiaPersistenceContext) request.getAttribute(TOPIA_TRANSACTION_REQUEST_ATTRIBUTE); return topiaContext; } @@ -170,9 +171,9 @@ * * @param request incoming request * @return the new freshly opened transaction - * @throws TopiaRuntimeException if any problem while opening a new transaction + * @throws TopiaException if any problem while opening a new transaction */ - protected abstract TopiaContext beginTransaction(ServletRequest request) throws TopiaRuntimeException; + protected abstract TopiaPersistenceContext beginTransaction(ServletRequest request) throws TopiaException; @Override public void destroy() { @@ -210,10 +211,10 @@ TopiaTransactionProxyInvocationHandler proxyInvocationHandler = new TopiaTransactionProxyInvocationHandler(request); - TopiaContext proxy = (TopiaContext) Proxy.newProxyInstance( + TopiaPersistenceContext proxy = (TopiaPersistenceContext) Proxy.newProxyInstance( getClass().getClassLoader(), - new Class<?>[]{TopiaContext.class, - TopiaContextImplementor.class}, + new Class<?>[]{TopiaPersistenceContext.class, + TopiaTransaction.class}, proxyInvocationHandler ); @@ -258,7 +259,7 @@ * was not required while the current request) * @since 1.9.1 */ - protected void onCloseTransaction(TopiaContext transaction) { + protected void onCloseTransaction(TopiaPersistenceContext transaction) { if (transaction == null) { if (log.isTraceEnabled()) { log.trace("no transaction to close"); @@ -271,21 +272,17 @@ if (log.isDebugEnabled()) { log.debug("closing transaction " + transaction); } - try { - // let's rollback transaction if the transaction was not rollbacked nor committed - // as the topia context close context does not affect hibernate transaction - // so if something bad happen then we will always have a - Transaction tx = ((TopiaContextImplementor) transaction).getHibernate().getTransaction(); - if (!tx.wasCommitted() && !tx.wasRolledBack()) { - if (log.isDebugEnabled()) { - log.debug("rollback transaction!"); - } - tx.rollback(); + // let's rollback transaction if the transaction was not rollbacked nor committed + // as the topia context close context does not affect hibernate transaction + // so if something bad happen then we will always have a + Transaction tx = ((AbstractTopiaPersistenceContext) transaction).getHibernateSupport().getHibernateSession().getTransaction(); + if (!tx.wasCommitted() && !tx.wasRolledBack()) { + if (log.isDebugEnabled()) { + log.debug("rollback transaction!"); } - transaction.closeContext(); - } catch (TopiaException e) { - throw new TopiaRuntimeException(e); + tx.rollback(); } + transaction.closeContext(); } } @@ -335,14 +332,14 @@ if (methods.contains("getClass")) { - return TopiaContext.class; + return TopiaPersistenceContext.class; } return null; } /** - * Handler of a proxy on a {@link TopiaContext}. + * Handler of a proxy on a {@link TopiaPersistenceContext}. * * @see #excludeMethods */ @@ -352,7 +349,7 @@ protected final ServletRequest request; /** Target to use for the proxy. */ - protected TopiaContext transaction; + protected TopiaPersistenceContext transaction; protected TopiaTransactionProxyInvocationHandler(ServletRequest request) { this.request = request; Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-10-14 08:51:31 UTC (rev 276) +++ trunk/pom.xml 2013-11-27 16:20:15 UTC (rev 277) @@ -10,7 +10,7 @@ <parent> <groupId>org.nuiton</groupId> <artifactId>mavenpom4redmineAndCentral</artifactId> - <version>4.0</version> + <version>4.3</version> </parent> <groupId>org.nuiton.web</groupId> @@ -92,7 +92,7 @@ <dependency> <groupId>rome</groupId> <artifactId>rome</artifactId> - <version>0.9</version> + <version>1.0</version> <exclusions> <exclusion> <groupId>jdom</groupId> @@ -133,7 +133,7 @@ <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-config</artifactId> - <version>${nuitonUtilsVersion}</version> + <version>${nuitonConfigVersion}</version> </dependency> <!-- librairie topia --> @@ -265,14 +265,17 @@ <!-- redmine configuration --> <projectId>nuiton-web</projectId> - <nuitonI18nVersion>2.5</nuitonI18nVersion> - <nuitonUtilsVersion>2.6.12</nuitonUtilsVersion> + <eugeneVersion>2.7.3</eugeneVersion> + <nuitonI18nVersion>2.5.2</nuitonI18nVersion> + <nuitonUtilsVersion>2.7.1</nuitonUtilsVersion> + <nuitonConfigVersion>3.0-alpha-1</nuitonConfigVersion> + <nuitonI18nPluginVersion>${nuitonI18nVersion}</nuitonI18nPluginVersion> - <topiaVersion>2.8-rc-1</topiaVersion> + <topiaVersion>3.0-SNAPSHOT</topiaVersion> <!-- Tapestry --> - <tapestryVersion>5.2.4</tapestryVersion> + <tapestryVersion>5.2.4</tapestryVersion> <!-- Do not upgrade to 5.3.x because on some incompatibilities --> <slf4jVersion>1.7.5</slf4jVersion> <!-- GWT --> @@ -280,9 +283,9 @@ <gwtPluginVersion>2.2.0</gwtPluginVersion> <!-- Strust 2 --> - <struts2Version>2.3.14</struts2Version> + <struts2Version>2.3.15.3</struts2Version> - <shiroVersion>1.2.1</shiroVersion> + <shiroVersion>1.2.2</shiroVersion> <servletApiVersion>2.5</servletApiVersion> <jettyVersion>${jettyPluginVersion}</jettyVersion> <windstoneVersion>0.9.10-hudson-24</windstoneVersion> @@ -326,7 +329,7 @@ <plugin> <groupId>org.nuiton.eugene</groupId> <artifactId>eugene-maven-plugin</artifactId> - <version>2.6.1</version> + <version>${eugeneVersion}</version> </plugin> </plugins> </pluginManagement>
participants (1)
-
athimelï¼ users.nuiton.org