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";
}
}