Author: sohil.shah(a)jboss.com
Date: 2007-09-06 00:59:08 -0400 (Thu, 06 Sep 2007)
New Revision: 8182
Modified:
trunk/cms/src/main/org/jboss/portal/cms/hibernate/state/HibernatePersistenceManager.java
trunk/cms/src/main/org/jboss/portal/cms/impl/interceptors/ACLInterceptor.java
trunk/cms/src/main/org/jboss/portal/cms/security/AuthorizationProviderImpl.java
Log:
JBPORTAL-1679 - New CMS content is not persisted after server restart when done with a
user other than 'admin'
Modified:
trunk/cms/src/main/org/jboss/portal/cms/hibernate/state/HibernatePersistenceManager.java
===================================================================
---
trunk/cms/src/main/org/jboss/portal/cms/hibernate/state/HibernatePersistenceManager.java 2007-09-06
04:23:08 UTC (rev 8181)
+++
trunk/cms/src/main/org/jboss/portal/cms/hibernate/state/HibernatePersistenceManager.java 2007-09-06
04:59:08 UTC (rev 8182)
@@ -1030,8 +1030,7 @@
Session session = hibernateSessionFactory.getCurrentSession();
try
{
- List rs = session.createQuery(blobSelectData).setCacheable(true)
- .setString(0, blobId).list();
+ List rs = session.createQuery(blobSelectData).setString(0, blobId).list();
Iterator iter = rs.iterator();
java.sql.Blob blob = (java.sql.Blob) iter.next();
InputStream is = blob.getBinaryStream();
@@ -1064,7 +1063,7 @@
try
{
- Query query = session.createQuery(blobSelect).setCacheable(true);
+ Query query = session.createQuery(blobSelect);
if (schemaObjectPrefix
.equalsIgnoreCase(HibernateStoreConstants.versionPrefix))
{
@@ -1145,8 +1144,7 @@
Session session = hibernateSessionFactory.getCurrentSession();
try
{
- Query query = session.createQuery(nodeBinValSelect).setCacheable(
- true).setString(0, blobId);
+ Query query = session.createQuery(nodeBinValSelect).setString(0, blobId);
Object result = query.uniqueResult();
if (result != null)
{
Modified: trunk/cms/src/main/org/jboss/portal/cms/impl/interceptors/ACLInterceptor.java
===================================================================
---
trunk/cms/src/main/org/jboss/portal/cms/impl/interceptors/ACLInterceptor.java 2007-09-06
04:23:08 UTC (rev 8181)
+++
trunk/cms/src/main/org/jboss/portal/cms/impl/interceptors/ACLInterceptor.java 2007-09-06
04:59:08 UTC (rev 8182)
@@ -217,19 +217,7 @@
//perform access check
PortalPermission cmsPermission = new CMSPermission(securityContext);
- Session session = Tools.getOpenSession();
- Transaction tx = session.beginTransaction();
- boolean allowAccess = false;
- try
- {
- allowAccess = this.authorizationManager.checkPermission(cmsPermission);
- }
- finally
- {
- tx.commit();
- Tools.closeSession(session);
- }
-
+ boolean allowAccess = this.authorizationManager.checkPermission(cmsPermission);
if (allowAccess)
{
Object response = invocation.invokeNext();
@@ -270,12 +258,8 @@
*/
private Object applyFilter(Object response, PortalCMSSecurityContext securityContext)
{
- Session session = Tools.getOpenSession();
- Transaction tx = session.beginTransaction();
Object filteredResponse = response;
-
JCRCommand command =
(JCRCommand)securityContext.getAttribute("command");
- boolean success = true;
try
{
if (filteredResponse instanceof Folder)
@@ -335,22 +319,8 @@
}
catch (Exception e)
{
- success = false;
throw new RuntimeException(e);
- }
- finally
- {
- if(success)
- {
- tx.commit();
- }
- else
- {
- tx.rollback();
- }
- Tools.closeSession(session);
- }
-
+ }
return filteredResponse;
}
@@ -525,14 +495,8 @@
}
finally
{
- if (tx != null)
- {
- tx.rollback();
- }
- if (session != null)
- {
- session.close();
- }
+ tx.rollback();
+ session.close();
}
return role;
@@ -561,10 +525,7 @@
}
finally
{
- if (tx != null)
- {
- tx.rollback();
- }
+ tx.rollback();
Tools.closeSession(session);
}
Modified: trunk/cms/src/main/org/jboss/portal/cms/security/AuthorizationProviderImpl.java
===================================================================
---
trunk/cms/src/main/org/jboss/portal/cms/security/AuthorizationProviderImpl.java 2007-09-06
04:23:08 UTC (rev 8181)
+++
trunk/cms/src/main/org/jboss/portal/cms/security/AuthorizationProviderImpl.java 2007-09-06
04:59:08 UTC (rev 8182)
@@ -29,6 +29,7 @@
import org.hibernate.Query;
import org.hibernate.Session;
+import org.hibernate.Transaction;
import org.jboss.portal.cms.hibernate.state.Tools;
import org.jboss.portal.identity.IdentityContext;
import org.jboss.portal.identity.IdentityServiceController;
@@ -47,390 +48,439 @@
/**
* Created on : Jan 23, 2007
+ *
* @author Sohil Shah - sohil.shah(a)jboss.com
- *
+ *
*/
-public class AuthorizationProviderImpl extends AbstractJBossService implements
AuthorizationProvider
+public class AuthorizationProviderImpl extends AbstractJBossService implements
+ AuthorizationProvider
{
- private IdentityServiceController identityServiceController = null;
- private MembershipModule membershipModule = null;
- private UserModule userModule = null;
-
- /**
- *
- */
- public void startService() throws Exception
- {
- super.startService();
- this.membershipModule = (MembershipModule)identityServiceController.
- getIdentityContext().
- getObject(IdentityContext.TYPE_MEMBERSHIP_MODULE);
- this.userModule = (UserModule)identityServiceController.
- getIdentityContext().
- getObject(IdentityContext.TYPE_USER_MODULE);
- }
-
- //------AuthorizationDomain
impl-----------------------------------------------------------------
- /**
- *
- */
- public DomainConfigurator getConfigurator()
- {
- return this;
- }
+ private IdentityServiceController identityServiceController = null;
- /**
- *
- */
- public PermissionFactory getPermissionFactory()
- {
- return null;
- }
+ private MembershipModule membershipModule = null;
- /**
- *
- */
- public PermissionRepository getPermissionRepository()
- {
- return null;
- }
+ private UserModule userModule = null;
- /**
- *
- */
- public String getType()
- {
- return this.getClass().getName();
- }
- //------DomainConfigurator
impl------------------------------------------------------------------
- /**
- *
- */
- public void setSecurityBindings(String uri, Set securityBindings) throws
SecurityConfigurationException
- {
- if(securityBindings != null)
- {
- for(Iterator itr=securityBindings.iterator();itr.hasNext();)
- {
- Permission securityBinding = (Permission)itr.next();
- if(securityBinding.getRoles()!=null || securityBinding.getUsers()!=null)
- {
- this.store(securityBinding,securityBinding.getRoles(),securityBinding.getUsers());
- }
- else
- {
- this.store(securityBinding);
- }
- }
- }
- }
-
- /**
- *
- */
- public void removeSecurityBindings(String uri) throws SecurityConfigurationException
- {
- Set permissions = this.getSecurityBindings(uri);
- this.remove(permissions);
- }
-
- /**
- *
- */
- public Set getSecurityBindings(String uri)
- {
- Set permissions = new HashSet();
-
- if(uri.startsWith("user://"))
- {
- String userId = uri.substring("user://".length());
- Collection cour = this.findPermissionsByUser(userId);
- if(cour != null)
- {
- permissions.addAll(cour);
- }
- }
- else if(uri.startsWith("role://"))
- {
- String roleId = uri.substring("role://".length());
- Collection cour = this.findPermissionsByRole(roleId);
- if(cour != null)
- {
- permissions.addAll(cour);
- }
- }
- else if(uri.startsWith("criteria://"))
- {
- String criteria = uri.substring("criteria://".length());
- int index = criteria.indexOf('/');
- String name = criteria.substring(0,index);
- String value = criteria.substring(index+1);
- Criteria input = new Criteria(name,value);
- Collection cour = this.findPermissionsByCriteria(input);
- if(cour != null)
- {
- permissions.addAll(cour);
- }
- }
-
- return permissions;
- }
- //---------URIFactory
impl-----------------------------------------------------------------------------------------
- /**
- *
- */
- public String getUserURI(String userId)
- {
- return "user://"+userId;
- }
-
- /**
- *
- * @param roleId
- * @return
- */
- public String getRoleURI(String roleId)
- {
- return "role://"+roleId;
- }
-
- /**
- *
- * @param name
- * @param value
- * @return
- */
- public String getCriteriaURI(String name,String value)
- {
- return "criteria://"+name+"/"+value;
- }
-
- /**
- *
- */
- public MembershipModule getMembershipModule()
- {
- return this.membershipModule;
- }
- //--------------------------------------------------------------------------------------------------------------
- /**
- *
- */
- public IdentityServiceController getIdentityServiceController()
- {
- return identityServiceController;
- }
+ /**
+ *
+ */
+ public void startService() throws Exception
+ {
+ super.startService();
+ this.membershipModule = (MembershipModule) identityServiceController
+ .getIdentityContext().getObject(
+ IdentityContext.TYPE_MEMBERSHIP_MODULE);
+ this.userModule = (UserModule) identityServiceController
+ .getIdentityContext().getObject(IdentityContext.TYPE_USER_MODULE);
+ }
- /**
- *
- * @param identityServiceController
- */
- public void setIdentityServiceController(
- IdentityServiceController identityServiceController)
- {
- this.identityServiceController = identityServiceController;
- }
- //--------------------------------------------------------------------------------------------------------------
- /**
- * Stores a permission and its associations into peristent storage
- *
- * @param permission - Permission to be persisted
- * @param roles - Roles associated with this permission
- * @param users - Individual users associated with this permission
- */
- private void store(Permission permission,Collection roles,Collection users)
- {
- //setup the role association
- if(roles != null)
- {
- Set roleAssoc = new HashSet();
- for(Iterator itr=roles.iterator();itr.hasNext();)
+ // ------AuthorizationDomain
+ // impl-----------------------------------------------------------------
+ /**
+ *
+ */
+ public DomainConfigurator getConfigurator()
+ {
+ return this;
+ }
+
+ /**
+ *
+ */
+ public PermissionFactory getPermissionFactory()
+ {
+ return null;
+ }
+
+ /**
+ *
+ */
+ public PermissionRepository getPermissionRepository()
+ {
+ return null;
+ }
+
+ /**
+ *
+ */
+ public String getType()
+ {
+ return this.getClass().getName();
+ }
+
+ // ------DomainConfigurator
+ // impl------------------------------------------------------------------
+ /**
+ *
+ */
+ public void setSecurityBindings(String uri, Set securityBindings)
+ throws SecurityConfigurationException
+ {
+ if (securityBindings != null)
+ {
+ for (Iterator itr = securityBindings.iterator(); itr.hasNext();)
+ {
+ Permission securityBinding = (Permission) itr.next();
+ if (securityBinding.getRoles() != null
+ || securityBinding.getUsers() != null)
{
- Role role = (Role)itr.next();
- PermRoleAssoc cour = new PermRoleAssoc();
- if(!(role instanceof AnonymousRole))
- {
- cour.setRoleId(role.getName());
- }
- else
- {
- cour.setRoleId(AuthorizationManager.Anonymous);
- }
- roleAssoc.add(cour);
+ this.store(securityBinding, securityBinding.getRoles(),
+ securityBinding.getUsers());
}
- permission.setRoleAssoc(roleAssoc);
- }
- else
- {
- permission.setRoleAssoc(null);
- }
-
-
- //setup the user association
- if(users != null)
- {
- Set userAssoc = new HashSet();
- for(Iterator itr=users.iterator();itr.hasNext();)
+ else
{
- User user = (User)itr.next();
- PermUserAssoc cour = new PermUserAssoc();
- cour.setUserId(user.getUserName());
- userAssoc.add(cour);
+ this.store(securityBinding);
}
- permission.setUserAssoc(userAssoc);
- }
- else
- {
- permission.setUserAssoc(null);
- }
-
- //persist this into the database
- this.store(permission);
- }
-
- /**
- * Stores a permission and its associations into peristent storage
- *
- * @param permission - Permission to be persisted
- */
- private void store(Permission permission)
- {
- //persist this into the database
- Session session = Tools.getCurrentSession();
- session.saveOrUpdate(permission);
- }
-
- /**
- * Deletes the specified permissions from the database
- *
- * @param permissions
- */
- private void remove(Collection permissions)
- {
- Session session = Tools.getCurrentSession();
- if(permissions!=null)
- {
- for(Iterator itr=permissions.iterator();itr.hasNext();)
+ }
+ }
+ }
+
+ /**
+ *
+ */
+ public void removeSecurityBindings(String uri)
+ throws SecurityConfigurationException
+ {
+ Set permissions = this.getSecurityBindings(uri);
+ this.remove(permissions);
+ }
+
+ /**
+ *
+ */
+ public Set getSecurityBindings(String uri)
+ {
+ Set permissions = new HashSet();
+
+ if (uri.startsWith("user://"))
+ {
+ String userId = uri.substring("user://".length());
+ Collection cour = this.findPermissionsByUser(userId);
+ if (cour != null)
+ {
+ permissions.addAll(cour);
+ }
+ }
+ else if (uri.startsWith("role://"))
+ {
+ String roleId = uri.substring("role://".length());
+ Collection cour = this.findPermissionsByRole(roleId);
+ if (cour != null)
+ {
+ permissions.addAll(cour);
+ }
+ }
+ else if (uri.startsWith("criteria://"))
+ {
+ String criteria = uri.substring("criteria://".length());
+ int index = criteria.indexOf('/');
+ String name = criteria.substring(0, index);
+ String value = criteria.substring(index + 1);
+ Criteria input = new Criteria(name, value);
+ Collection cour = this.findPermissionsByCriteria(input);
+ if (cour != null)
+ {
+ permissions.addAll(cour);
+ }
+ }
+
+ return permissions;
+ }
+
+ // ---------URIFactory
+ //
impl-----------------------------------------------------------------------------------------
+ /**
+ *
+ */
+ public String getUserURI(String userId)
+ {
+ return "user://" + userId;
+ }
+
+ /**
+ *
+ * @param roleId
+ * @return
+ */
+ public String getRoleURI(String roleId)
+ {
+ return "role://" + roleId;
+ }
+
+ /**
+ *
+ * @param name
+ * @param value
+ * @return
+ */
+ public String getCriteriaURI(String name, String value)
+ {
+ return "criteria://" + name + "/" + value;
+ }
+
+ /**
+ *
+ */
+ public MembershipModule getMembershipModule()
+ {
+ return this.membershipModule;
+ }
+
+ //
--------------------------------------------------------------------------------------------------------------
+ /**
+ *
+ */
+ public IdentityServiceController getIdentityServiceController()
+ {
+ return identityServiceController;
+ }
+
+ /**
+ *
+ * @param identityServiceController
+ */
+ public void setIdentityServiceController(
+ IdentityServiceController identityServiceController)
+ {
+ this.identityServiceController = identityServiceController;
+ }
+
+ //
--------------------------------------------------------------------------------------------------------------
+ /**
+ * Stores a permission and its associations into peristent storage
+ *
+ * @param permission -
+ * Permission to be persisted
+ * @param roles -
+ * Roles associated with this permission
+ * @param users -
+ * Individual users associated with this permission
+ */
+ private void store(Permission permission, Collection roles, Collection users)
+ {
+ // setup the role association
+ if (roles != null)
+ {
+ Set roleAssoc = new HashSet();
+ for (Iterator itr = roles.iterator(); itr.hasNext();)
+ {
+ Role role = (Role) itr.next();
+ PermRoleAssoc cour = new PermRoleAssoc();
+ if (!(role instanceof AnonymousRole))
{
- Permission permission = (Permission)itr.next();
- session.delete(permission);
+ cour.setRoleId(role.getName());
}
- }
- }
-
-
- /**
- * Returns all permissions associated with the specified user
- *
- * @param user
- * @return
- */
- private Collection findPermissionsByUser(String userId)
- {
- try
- {
- Collection permissions = new HashSet();
-
- //this is for db based identity management
- String lookupByUser = "SELECT permission from Permission permission JOIN
permission.userAssoc user WHERE user.userId=?";
-
- Session session = Tools.getCurrentSession();
-
- //perform lookup by explicitly specified users
- Query userQuery = session.createQuery(lookupByUser);
- userQuery.setString(0,userId);
- userQuery.setCacheable(true);
- permissions.addAll(userQuery.list());
-
- if(this.userModule instanceof HibernateUserModuleImpl)
- {
- //in case of a database version, use the cache optmized way to lookup the
permissions
- String lookupByRole = "SELECT p.* from jbp_cms_perm p,jbp_cms_perm_role
r,jbp_role_membership m,jbp_roles roles,jbp_users users WHERE " +
- "p.id=r.cms_perm_id AND " +
- "r.role_id=roles.jbp_name AND " +
- "m.jbp_rid=roles.jbp_rid AND " +
- "m.jbp_uid=users.jbp_uid AND " +
- "users.jbp_uname=?";
-
- //perform lookup based on role membership
- Query roleQuery =
session.createSQLQuery(lookupByRole).addEntity(Permission.class);
- roleQuery.setString(0,userId);
- roleQuery.setCacheable(true);
- permissions.addAll(roleQuery.list());
- }
- else
- {
- //in the case of LDAP use the IdentityModule
- //now find permissions for all the roles that this user belongs to
- Set belongedRoles =
this.membershipModule.getRoles(this.userModule.findUserByUserName(userId));
- if(belongedRoles != null)
- {
- for(Iterator itr=belongedRoles.iterator();itr.hasNext();)
- {
- Role role = (Role)itr.next();
- Collection rolePermissions = this.findPermissionsByRole(role.getName());
- if(rolePermissions != null && !rolePermissions.isEmpty())
- {
- permissions.addAll(rolePermissions);
- }
- }
- }
- }
-
- return permissions;
- }
- catch(Exception e)
- {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * Returns all permissions associated with the specified role
- *
- * @param role
- * @return
- */
- private Collection findPermissionsByRole(String roleId)
- {
- Collection permissions = new HashSet();
-
- String lookupByRole = "SELECT permission from Permission permission JOIN
permission.roleAssoc role WHERE role.roleId=?";
-
- Session session = Tools.getCurrentSession();
-
- //perform lookup by explicitly specified users
- Query roleQuery = session.createQuery(lookupByRole);
- roleQuery.setString(0,roleId);
- roleQuery.setCacheable(true);
- permissions.addAll(roleQuery.list());
-
-
- return permissions;
- }
-
- /**
- * Return all permissions that match the specified criteria
- *
- * @param criteria
- * @return
- */
- private Collection findPermissionsByCriteria(Criteria criteria)
- {
- Collection permissions = new HashSet();
-
- String lookupByCriteria = "SELECT permission from Permission permission JOIN
permission.criteria criteria WHERE criteria.name=? AND criteria.value=?";
-
- Session session = Tools.getCurrentSession();
-
- //perform lookup by explicitly specified users
- Query criteriaQuery = session.createQuery(lookupByCriteria);
- criteriaQuery.setString(0,criteria.getName());
- criteriaQuery.setString(1,criteria.getValue());
- criteriaQuery.setCacheable(true);
- permissions.addAll(criteriaQuery.list());
-
-
- return permissions;
- }
+ else
+ {
+ cour.setRoleId(AuthorizationManager.Anonymous);
+ }
+ roleAssoc.add(cour);
+ }
+ permission.setRoleAssoc(roleAssoc);
+ }
+ else
+ {
+ permission.setRoleAssoc(null);
+ }
+
+ // setup the user association
+ if (users != null)
+ {
+ Set userAssoc = new HashSet();
+ for (Iterator itr = users.iterator(); itr.hasNext();)
+ {
+ User user = (User) itr.next();
+ PermUserAssoc cour = new PermUserAssoc();
+ cour.setUserId(user.getUserName());
+ userAssoc.add(cour);
+ }
+ permission.setUserAssoc(userAssoc);
+ }
+ else
+ {
+ permission.setUserAssoc(null);
+ }
+
+ // persist this into the database
+ this.store(permission);
+ }
+
+ /**
+ * Stores a permission and its associations into peristent storage
+ *
+ * @param permission -
+ * Permission to be persisted
+ */
+ private void store(Permission permission)
+ {
+ // persist this into the database
+ Session session = Tools.getCurrentSession();
+ session.saveOrUpdate(permission);
+ }
+
+ /**
+ * Deletes the specified permissions from the database
+ *
+ * @param permissions
+ */
+ private void remove(Collection permissions)
+ {
+ Session session = Tools.getCurrentSession();
+ if (permissions != null)
+ {
+ for (Iterator itr = permissions.iterator(); itr.hasNext();)
+ {
+ Permission permission = (Permission) itr.next();
+ session.delete(permission);
+ }
+ }
+ }
+
+ /**
+ * Returns all permissions associated with the specified user
+ *
+ * @param user
+ * @return
+ */
+ private Collection findPermissionsByUser(String userId)
+ {
+ Session session = Tools.getOpenSession();
+ Transaction tx = session.beginTransaction();
+ try
+ {
+ Collection permissions = new HashSet();
+
+ // this is for db based identity management
+ String lookupByUser = "SELECT permission from Permission permission JOIN
permission.userAssoc user WHERE user.userId=?";
+
+ // perform lookup by explicitly specified users
+ Query userQuery = session.createQuery(lookupByUser);
+ userQuery.setString(0, userId);
+ userQuery.setCacheable(true);
+ permissions.addAll(userQuery.list());
+
+ if (this.userModule instanceof HibernateUserModuleImpl)
+ {
+ // in case of a database version, use the cache optmized way to
+ // lookup the permissions
+ String lookupByRole = "SELECT p.* from jbp_cms_perm p,jbp_cms_perm_role
r,jbp_role_membership m,jbp_roles roles,jbp_users users WHERE "
+ + "p.id=r.cms_perm_id AND "
+ + "r.role_id=roles.jbp_name AND "
+ + "m.jbp_rid=roles.jbp_rid AND "
+ + "m.jbp_uid=users.jbp_uid AND " +
"users.jbp_uname=?";
+
+ // perform lookup based on role membership
+ Query roleQuery = session.createSQLQuery(lookupByRole).addEntity(
+ Permission.class);
+ roleQuery.setString(0, userId);
+ roleQuery.setCacheable(true);
+ permissions.addAll(roleQuery.list());
+ }
+ else
+ {
+ // in the case of LDAP use the IdentityModule
+ // now find permissions for all the roles that this user belongs to
+ Set belongedRoles = this.membershipModule.getRoles(this.userModule
+ .findUserByUserName(userId));
+ if (belongedRoles != null)
+ {
+ for (Iterator itr = belongedRoles.iterator(); itr.hasNext();)
+ {
+ Role role = (Role) itr.next();
+ Collection rolePermissions = this.findPermissionsByRole(role
+ .getName());
+ if (rolePermissions != null && !rolePermissions.isEmpty())
+ {
+ permissions.addAll(rolePermissions);
+ }
+ }
+ }
+ }
+
+ return permissions;
+ }
+ catch (Exception e)
+ {
+ tx.rollback();
+ throw new RuntimeException(e);
+ }
+ finally
+ {
+ tx.commit();
+ Tools.closeSession(session);
+ }
+ }
+
+ /**
+ * Returns all permissions associated with the specified role
+ *
+ * @param role
+ * @return
+ */
+ private Collection findPermissionsByRole(String roleId)
+ {
+ Collection permissions = new HashSet();
+
+ String lookupByRole = "SELECT permission from Permission permission JOIN
permission.roleAssoc role WHERE role.roleId=?";
+
+ Session session = Tools.getOpenSession();
+ Transaction tx = session.beginTransaction();
+ try
+ {
+ // perform lookup by explicitly specified users
+ Query roleQuery = session.createQuery(lookupByRole);
+ roleQuery.setString(0, roleId);
+ roleQuery.setCacheable(true);
+ permissions.addAll(roleQuery.list());
+ }
+ catch(Exception e)
+ {
+ tx.rollback();
+ throw new RuntimeException(e);
+ }
+ finally
+ {
+ tx.commit();
+ Tools.closeSession(session);
+ }
+
+ return permissions;
+ }
+
+ /**
+ * Return all permissions that match the specified criteria
+ *
+ * @param criteria
+ * @return
+ */
+ private Collection findPermissionsByCriteria(Criteria criteria)
+ {
+ Collection permissions = new HashSet();
+
+ String lookupByCriteria = "SELECT permission from Permission permission JOIN
permission.criteria criteria WHERE criteria.name=? AND criteria.value=?";
+
+ Session session = Tools.getOpenSession();
+ Transaction tx = session.beginTransaction();
+ try
+ {
+ // perform lookup by explicitly specified users
+ Query criteriaQuery = session.createQuery(lookupByCriteria);
+ criteriaQuery.setString(0, criteria.getName());
+ criteriaQuery.setString(1, criteria.getValue());
+ criteriaQuery.setCacheable(true);
+ permissions.addAll(criteriaQuery.list());
+ }
+ catch(Exception e)
+ {
+ tx.rollback();
+ throw new RuntimeException(e);
+ }
+ finally
+ {
+ tx.commit();
+ Tools.closeSession(session);
+ }
+
+ return permissions;
+ }
}