diff --git a/redback-common/redback-common-jpa/src/main/resources/META-INF/persistence.xml b/redback-common/redback-common-jpa/src/main/resources/META-INF/persistence.xml index 817eb201..5c1fa801 100644 --- a/redback-common/redback-common-jpa/src/main/resources/META-INF/persistence.xml +++ b/redback-common/redback-common-jpa/src/main/resources/META-INF/persistence.xml @@ -32,7 +32,7 @@ - + diff --git a/redback-users/redback-users-providers/redback-users-jpa/pom.xml b/redback-users/redback-users-providers/redback-users-jpa/pom.xml index 4d237187..29c24f45 100644 --- a/redback-users/redback-users-providers/redback-users-jpa/pom.xml +++ b/redback-users/redback-users-providers/redback-users-jpa/pom.xml @@ -53,6 +53,11 @@ openjpa ${openjpa.version} + + org.springframework + spring-tx + ${springVersion} + org.hsqldb diff --git a/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/JpaUserManager.java b/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/JpaUserManager.java index 33fa7b6d..4429ed88 100644 --- a/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/JpaUserManager.java +++ b/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/JpaUserManager.java @@ -23,12 +23,14 @@ import org.apache.archiva.redback.users.*; import org.apache.archiva.redback.users.jpa.model.JpaUser; import org.apache.commons.lang.StringUtils; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.persistence.*; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; +import java.util.Date; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -102,6 +104,7 @@ public List getUsers(boolean orderAscending) throws UserManagerException { return q.getResultList(); } + @Transactional @Override public User addUser(User user) throws UserManagerException { EntityManager em = getEm(); @@ -133,12 +136,14 @@ public User addUser(User user) throws UserManagerException { { user.setPasswordChangeRequired( true ); } - em.getTransaction().begin(); + if (user.getLastPasswordChange()==null) { + user.setLastPasswordChange(new Date()); + } em.persist((JpaUser)user); - em.getTransaction().commit(); return user; } + @Transactional @Override public User updateUser(User user) throws UserNotFoundException, UserManagerException { return updateUser(user, false); @@ -254,6 +259,7 @@ public boolean userExists(String principal) throws UserManagerException { + @Transactional @Override public void deleteUser(String username) throws UserNotFoundException, UserManagerException { final EntityManager em = getEm(); @@ -261,12 +267,11 @@ public void deleteUser(String username) throws UserNotFoundException, UserManage if (u.isPermanent()) { throw new PermanentUserException("User "+username+" cannot be deleted"); } - em.getTransaction().begin(); em.remove(u); - em.getTransaction().commit(); fireUserManagerUserRemoved(u); } + @Transactional @Override public void addUserUnchecked(User user) throws UserManagerException { log.info("addUserUnchecked "+user.getUsername()); @@ -282,21 +287,19 @@ public void addUserUnchecked(User user) throws UserManagerException { Messages.getString( "user.manager.cannot.add.user.without.username" ) ); //$NON-NLS-1$ } - em.getTransaction().begin(); TypedQuery q = em.createQuery("SELECT u FROM JpaUser u", JpaUser.class); for (JpaUser u : q.getResultList()) { log.info("USER FOUND: "+u.getUsername()); } log.info("NEW USER "+user.getUsername()); em.persist((JpaUser)user); - em.getTransaction().commit(); } + @Transactional @Override public void eraseDatabase() { EntityManager em = getEm(); - em.getTransaction().begin(); TypedQuery q = em.createQuery("SELECT u FROM JpaUser u", JpaUser.class); for (JpaUser u : q.getResultList()) { u.getPreviousEncodedPasswords().clear(); @@ -304,23 +307,27 @@ public void eraseDatabase() { em.flush(); Query qd = em.createQuery("DELETE FROM JpaUser u"); qd.executeUpdate(); - em.getTransaction().commit(); em.clear(); } + @Transactional @Override public User updateUser(User user, boolean passwordChangeRequired) throws UserNotFoundException, UserManagerException { + if ( !( user instanceof JpaUser ) ) + { + throw new UserManagerException( "Unable to update user. User object " + user.getClass().getName() + + " is not an instance of " + JpaUser.class.getName() ); + } if ( StringUtils.isNotEmpty( user.getPassword() ) ) { userSecurityPolicy.extensionChangePassword( user, passwordChangeRequired ); } + JpaUser jpaUser = (JpaUser) user; final EntityManager em = getEm(); - em.getTransaction().begin(); - em.persist((JpaUser)user); - em.getTransaction().commit(); - fireUserManagerUserUpdated(user); - return user; + jpaUser = em.merge(jpaUser); + fireUserManagerUserUpdated(jpaUser); + return jpaUser; } @Override diff --git a/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/model/JpaUser.java b/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/model/JpaUser.java index cfdaa4e4..9b00c8e3 100644 --- a/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/model/JpaUser.java +++ b/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/model/JpaUser.java @@ -131,7 +131,7 @@ public Date getLastPasswordChange() { @Override public void setLastPasswordChange(Date passwordChangeDate) { - this.lastPasswordChange = lastPasswordChange; + this.lastPasswordChange = passwordChangeDate; } @Override @@ -222,6 +222,6 @@ public void setLastLoginDate(Date date) { @Override public String getUserManagerId() { - return null; + return "jpa"; } }