diff --git a/pom.xml b/pom.xml
index 975be68e..cdb4c899 100644
--- a/pom.xml
+++ b/pom.xml
@@ -533,6 +533,16 @@
spring-test
${springVersion}
+
+ org.springframework
+ spring-tx
+ ${springVersion}
+
+
+ org.springframework
+ spring-orm
+ ${springVersion}
+
javax.annotation
jsr250-api
diff --git a/redback-integrations/redback-common-integrations/pom.xml b/redback-integrations/redback-common-integrations/pom.xml
index 656dcf2a..34921ce0 100644
--- a/redback-integrations/redback-common-integrations/pom.xml
+++ b/redback-integrations/redback-common-integrations/pom.xml
@@ -81,14 +81,6 @@
org.apache.archiva.redback
redback-users-ldap
-
- org.apache.archiva.redback
- redback-users-jpa
-
-
- org.apache.archiva.redback
- redback-rbac-jpa
-
org.apache.archiva.redback
redback-users-configurable
diff --git a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/pom.xml b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/pom.xml
index ba1c0bd9..665af806 100644
--- a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/pom.xml
+++ b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/pom.xml
@@ -53,7 +53,14 @@
org.apache.archiva.redback
redback-common-jpa
-
+
+ org.springframework
+ spring-tx
+
+
+ org.springframework
+ spring-orm
+
org.apache.openjpa
openjpa
diff --git a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/JpaRbacManager.java b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/JpaRbacManager.java
index 184df40e..86895661 100644
--- a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/JpaRbacManager.java
+++ b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/JpaRbacManager.java
@@ -23,6 +23,7 @@
import org.apache.archiva.redback.rbac.jpa.model.*;
import org.apache.openjpa.persistence.Type;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
@@ -59,21 +60,26 @@ public Role createRole(String name) {
return role;
}
+ @Transactional
@Override
public Role saveRole(Role role) throws RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid( role );
final EntityManager em = getEm();
- em.getTransaction().begin();
- em.persist(role);
-
- em.getTransaction().commit();
- fireRbacRoleSaved(role);
- for (Permission perm : role.getPermissions()) {
+ Role mergedRole = em.merge(role);
+ fireRbacRoleSaved(mergedRole);
+ for (Permission perm : mergedRole.getPermissions()) {
fireRbacPermissionSaved(perm);
}
- return role;
+ return mergedRole;
}
+ @Transactional
+ @Override
+ public void addChildRole(Role role, Role childRole) throws RbacObjectInvalidException, RbacManagerException {
+ super.addChildRole(role, childRole);
+ }
+
+ @Transactional
@Override
public void saveRoles(Collection roles) throws RbacObjectInvalidException, RbacManagerException {
if ( roles == null )
@@ -83,17 +89,17 @@ public void saveRoles(Collection roles) throws RbacObjectInvalidException,
}
final EntityManager em = getEm();
- em.getTransaction().begin();
+ List merged = new ArrayList();
for (Role role : roles ) {
RBACObjectAssertions.assertValid(role);
- em.persist(role);
+ merged.add(em.merge(role));
}
- em.getTransaction().commit();
- for (Role role : roles) {
+ for (Role role : merged) {
fireRbacRoleSaved(role);
}
}
+
@Override
public Role getRole(String roleName) throws RbacObjectNotFoundException, RbacManagerException {
final EntityManager em = getEm();
@@ -109,6 +115,7 @@ public List getAllRoles() throws RbacManagerException {
return q.getResultList();
}
+ @Transactional
@Override
public void removeRole(Role role) throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(role);
@@ -120,14 +127,12 @@ public void removeRole(Role role) throws RbacObjectNotFoundException, RbacObject
throw new RbacPermanentException( "Unable to delete permanent role [" + role.getName() + "]" );
}
final EntityManager em = getEm();
- em.getTransaction().begin();
JpaRole myRole = em.find(JpaRole.class, role.getName());
if (myRole == null) {
throw new RbacObjectNotFoundException("Role not found "+role.getName());
}
myRole.setPermissions(new ArrayList());
em.remove(myRole);
- em.getTransaction().commit();
fireRbacRoleRemoved(myRole);
}
@@ -159,6 +164,7 @@ public Permission createPermission(String name, String operationName, String res
return permission;
}
+ @Transactional
@Override
public Permission savePermission(Permission permission) throws RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(permission);
@@ -166,11 +172,9 @@ public Permission savePermission(Permission permission) throws RbacObjectInvalid
throw new RbacObjectInvalidException("The permission object ist not instance of JpaPermission");
}
final EntityManager em = getEm();
- em.getTransaction().begin();
- em.persist(permission);
- em.getTransaction().commit();
- fireRbacPermissionSaved(permission);
- return permission;
+ Permission savedPermission = em.merge(permission);
+ fireRbacPermissionSaved(savedPermission);
+ return savedPermission;
}
@Override
@@ -192,6 +196,7 @@ public List getAllPermissions() throws RbacManagerException {
return (List)(List>)q.getResultList();
}
+ @Transactional
@Override
public void removePermission(Permission permission) throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(permission);
@@ -203,13 +208,11 @@ public void removePermission(Permission permission) throws RbacObjectNotFoundExc
throw new RbacPermanentException( "Unable to delete permanent permission [" + permission.getName() + "]" );
}
final EntityManager em = getEm();
- em.getTransaction().begin();
- Permission p = em.find(JpaPermission.class, permission.getName());
+ JpaPermission p = em.find(JpaPermission.class, permission.getName());
if (p == null) {
throw new RbacObjectNotFoundException("Permission " + permission.getName() + " not found");
}
em.remove(p);
- em.getTransaction().commit();
fireRbacPermissionRemoved(p);
}
@@ -220,6 +223,7 @@ public Operation createOperation(String name) throws RbacManagerException {
return op;
}
+ @Transactional
@Override
public Operation saveOperation(Operation operation) throws RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(operation);
@@ -227,10 +231,8 @@ public Operation saveOperation(Operation operation) throws RbacObjectInvalidExce
throw new RbacObjectInvalidException("Operation is not JpaOperation object");
}
final EntityManager em = getEm();
- em.getTransaction().begin();
- em.persist(operation);
- em.getTransaction().commit();
- return operation;
+ Operation savedOperation = em.merge(operation);
+ return savedOperation;
}
@Override
@@ -250,6 +252,7 @@ public List getAllOperations() throws RbacManagerException {
return q.getResultList();
}
+ @Transactional
@Override
public void removeOperation(Operation operation) throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(operation);
@@ -261,14 +264,11 @@ public void removeOperation(Operation operation) throws RbacObjectNotFoundExcept
throw new RbacPermanentException( "Unable to delete permanent operation [" + operation.getName() + "]" );
}
final EntityManager em = getEm();
- em.getTransaction().begin();
- Operation op = em.find(JpaOperation.class, operation.getName());
+ JpaOperation op = em.find(JpaOperation.class, operation.getName());
if (op==null) {
throw new RbacObjectNotFoundException("Operation not found "+operation.getName());
}
em.remove(op);
- em.getTransaction().commit();
-
}
@Override
@@ -278,6 +278,7 @@ public Resource createResource(String identifier) throws RbacManagerException {
return resource;
}
+ @Transactional
@Override
public Resource saveResource(Resource resource) throws RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(resource);
@@ -285,10 +286,17 @@ public Resource saveResource(Resource resource) throws RbacObjectInvalidExceptio
throw new RbacObjectInvalidException("Resource is not JpaResource");
}
final EntityManager em = getEm();
- em.getTransaction().begin();
- em.persist(resource);
- em.getTransaction().commit();
- return resource;
+ Resource savedResource = em.merge(resource);
+ return savedResource;
+ }
+
+ // Overriding to add the transactional attribute here
+ @Transactional
+ @Override
+ public Resource getGlobalResource()
+ throws RbacManagerException
+ {
+ return super.getGlobalResource();
}
@Override
@@ -308,6 +316,7 @@ public List getAllResources() throws RbacManagerException {
return (List)(List>)q.getResultList();
}
+ @Transactional
@Override
public void removeResource(Resource resource) throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(resource);
@@ -318,13 +327,11 @@ public void removeResource(Resource resource) throws RbacObjectNotFoundException
throw new RbacObjectInvalidException("Unable to delete permanent resource ["+resource.getIdentifier()+ "]");
}
final EntityManager em = getEm();
- em.getTransaction().begin();
- Resource res = em.find(JpaResource.class, resource.getIdentifier());
+ JpaResource res = em.find(JpaResource.class, resource.getIdentifier());
if (res==null) {
throw new RbacObjectNotFoundException("Resource "+resource.getIdentifier()+" not found");
}
em.remove(res);
- em.getTransaction().commit();
}
@Override
@@ -334,6 +341,7 @@ public UserAssignment createUserAssignment(String principal) throws RbacManagerE
return ua;
}
+ @Transactional
@Override
public UserAssignment saveUserAssignment(UserAssignment userAssignment) throws RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(userAssignment);
@@ -341,11 +349,9 @@ public UserAssignment saveUserAssignment(UserAssignment userAssignment) throws R
throw new RbacObjectInvalidException("Cannto save object that is not JpaUserAssignment");
}
final EntityManager em = getEm();
- em.getTransaction().begin();
- em.persist(userAssignment);
- em.getTransaction().commit();
- fireRbacUserAssignmentSaved(userAssignment);
- return userAssignment;
+ UserAssignment savedAssignment = em.merge(userAssignment);
+ fireRbacUserAssignmentSaved(savedAssignment);
+ return savedAssignment;
}
@Override
@@ -373,6 +379,7 @@ public List getUserAssignmentsForRoles(Collection roleNa
return q.getResultList();
}
+ @Transactional
@Override
public void removeUserAssignment(UserAssignment userAssignment) throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(userAssignment);
@@ -380,22 +387,20 @@ public void removeUserAssignment(UserAssignment userAssignment) throws RbacObjec
throw new RbacObjectInvalidException("Cannot remove permanent object "+userAssignment.getPrincipal());
}
final EntityManager em = getEm();
- em.getTransaction().begin();
- UserAssignment ua = em.find(UserAssignment.class, userAssignment.getPrincipal());
+ JpaUserAssignment ua = em.find(JpaUserAssignment.class, userAssignment.getPrincipal());
if (ua==null) {
throw new RbacObjectNotFoundException("User assignment not found "+userAssignment.getPrincipal());
}
em.remove(ua);
- em.getTransaction().commit();
fireRbacUserAssignmentRemoved(userAssignment);
}
+ @Transactional
@Override
public void eraseDatabase() {
final EntityManager em = getEm();
// Deletion is a bit tricky, because the JPA bulk delete queries do not cascade
// or keep foreign keys into account.
- em.getTransaction().begin();
TypedQuery tqp = em.createQuery("SELECT r FROM JpaPermission r",JpaPermission.class);
for(JpaPermission p : tqp.getResultList()) {
p.setOperation(null);
@@ -424,10 +429,9 @@ public void eraseDatabase() {
for(JpaUserAssignment ua : tqu.getResultList()) {
em.remove(ua);
}
- em.getTransaction().commit();
+ em.flush();
em.clear();
-
}
@Override
diff --git a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaPermission.java b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaPermission.java
index 4ac69896..1e83d2b9 100644
--- a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaPermission.java
+++ b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaPermission.java
@@ -41,13 +41,13 @@ public class JpaPermission implements Permission,Serializable {
private String description;
@Column(name="PERMANENT")
private boolean permanent;
- @ManyToOne(cascade = CascadeType.PERSIST)
+ @ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(
name="OPERATION_NAME_OID",
referencedColumnName = "NAME"
)
private JpaOperation operation;
- @ManyToOne(cascade = CascadeType.PERSIST)
+ @ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(
name="RESOURCE_IDENTIFIER_OID",
referencedColumnName = "IDENTIFIER"
diff --git a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaRole.java b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaRole.java
index 98c4bf2d..5a7cdc7e 100644
--- a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaRole.java
+++ b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaRole.java
@@ -46,7 +46,7 @@ public class JpaRole extends AbstractRole implements Serializable {
private boolean assignable;
@Column(name="PERMANENT")
private boolean permanent;
- @ManyToMany(cascade = CascadeType.PERSIST)
+ @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@OrderColumn(name="INTEGER_IDX")
@JoinTable(
name="SECURITY_ROLE_PERMISSION_MAP",
@@ -57,7 +57,7 @@ public class JpaRole extends AbstractRole implements Serializable {
)
List permissions = new ArrayList();
- @ElementCollection
+ @ElementCollection(fetch = FetchType.EAGER)
@OrderColumn(name="INTEGER_IDX")
@CollectionTable(
name="SECURITY_ROLE_CHILDROLE_MAP",
diff --git a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaUserAssignment.java b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaUserAssignment.java
index 65ed8af0..f0b3d542 100644
--- a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaUserAssignment.java
+++ b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaUserAssignment.java
@@ -25,6 +25,7 @@
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
+import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OrderColumn;
@@ -44,7 +45,7 @@ public class JpaUserAssignment extends AbstractUserAssignment implements Seriali
@Id
@Column(name="PRINCIPAL")
private String principal;
- @ElementCollection
+ @ElementCollection(fetch = FetchType.EAGER)
@Column(name="STRING_ELE")
@OrderColumn(name="INTEGER_IDX")
@CollectionTable(
diff --git a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/java/org/apache/archiva/redback/rbac/jpa/JpaRbacManagerTest.java b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/java/org/apache/archiva/redback/rbac/jpa/JpaRbacManagerTest.java
index 3c5bc9fa..cfc34f46 100644
--- a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/java/org/apache/archiva/redback/rbac/jpa/JpaRbacManagerTest.java
+++ b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/java/org/apache/archiva/redback/rbac/jpa/JpaRbacManagerTest.java
@@ -20,10 +20,12 @@
*/
import org.apache.archiva.redback.common.jdo.test.StoreManagerDebug;
+import org.apache.archiva.redback.rbac.RBACManager;
import org.apache.archiva.redback.rbac.RbacManagerException;
import org.apache.archiva.redback.tests.AbstractRbacManagerTestCase;
import org.junit.Before;
import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.transaction.annotation.Transactional;
import javax.inject.Inject;
import javax.inject.Named;
@@ -39,13 +41,15 @@
* @author Joakim Erdfelt
*/
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
+@Transactional
public class JpaRbacManagerTest
extends AbstractRbacManagerTestCase
{
@Inject
@Named(value = "rbacManager#jpa")
- JpaRbacManager rbacManager;
+ RBACManager rbacManager;
+
public static int EVENTCOUNT = 2;
@@ -64,15 +68,15 @@ public void setUp()
{
super.setUp();
- Properties props = new Properties();
- InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("test.properties");
- assert is!=null;
- props.load(is);
- is.close();
- EntityManagerFactory emf = Persistence.createEntityManagerFactory("redback-jpa",props);
-
+// Properties props = new Properties();
+// InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("test.properties");
+// assert is!=null;
+// props.load(is);
+// is.close();
+// EntityManagerFactory emf = Persistence.createEntityManagerFactory("redback-jpa",props);
+//
log.info("test setup");
- rbacManager.setEntityManager(emf.createEntityManager());
+ // rbacManager.setEntityManager(emf.createEntityManager());
super.setRbacManager(rbacManager);
assertNotNull(rbacManager);
log.info("injected rbac manager "+rbacManager);
diff --git a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/resources/spring-context.xml b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/resources/spring-context.xml
index abee0b5a..0f09c8a9 100644
--- a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/resources/spring-context.xml
+++ b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/resources/spring-context.xml
@@ -20,11 +20,11 @@
-->
+ http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
@@ -37,4 +37,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/resources/test.properties b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/resources/test.properties
index df848c45..24569233 100644
--- a/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/resources/test.properties
+++ b/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/resources/test.properties
@@ -14,9 +14,4 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-openjpa.ConnectionURL=jdbc:hsqldb:mem:reback-jpa
-openjpa.ConnectionDriverName=org.hsqldb.jdbcDriver
-openjpa.ConnectionUserName=sa
-openjpa.ConnectionPassword=
-openjp.Log=DefaultLevel=WARN,Tool=INFO
-openjpa.jdbc.SynchronizeMappings=buildSchema(ForeignKeys=true)
\ No newline at end of file
+
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 29c24f45..a73e9f25 100644
--- a/redback-users/redback-users-providers/redback-users-jpa/pom.xml
+++ b/redback-users/redback-users-providers/redback-users-jpa/pom.xml
@@ -58,6 +58,11 @@
spring-tx
${springVersion}
+
+ org.springframework
+ spring-orm
+ ${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 4429ed88..f60088b9 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,6 +23,7 @@
import org.apache.archiva.redback.users.*;
import org.apache.archiva.redback.users.jpa.model.JpaUser;
import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
@@ -37,7 +38,7 @@
/**
* Created by martin on 20.09.16.
*/
-@org.springframework.stereotype.Service("userManager#jpa")
+@Service("userManager#jpa")
public class JpaUserManager extends AbstractUserManager {
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 9b00c8e3..f1c79e20 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
@@ -23,6 +23,7 @@
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
+import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OrderColumn;
@@ -49,7 +50,7 @@ public class JpaUser implements org.apache.archiva.redback.users.User {
private String encodedPassword;
@Column(name="LAST_PASSWORD_CHANGE")
private Date lastPasswordChange;
- @ElementCollection
+ @ElementCollection(fetch = FetchType.EAGER)
@OrderColumn(name="INTEGER_IDX")
@Column(name="STRING_ELE")
@CollectionTable(name="JDOUSER_PREVIOUSENCODEDPASSWORDS",
@@ -136,18 +137,28 @@ public void setLastPasswordChange(Date passwordChangeDate) {
@Override
public List getPreviousEncodedPasswords() {
+ if (previousEncodedPasswords==null) {
+ setPreviousEncodedPasswords(new ArrayList());
+ }
+ assert previousEncodedPasswords != null;
return previousEncodedPasswords;
}
@Override
public void setPreviousEncodedPasswords(List encodedPasswordList) {
- this.previousEncodedPasswords.clear();
- this.previousEncodedPasswords.addAll(encodedPasswordList);
+ if (previousEncodedPasswords==null) {
+ previousEncodedPasswords = new ArrayList();
+ }
+ previousEncodedPasswords.clear();
+ previousEncodedPasswords.addAll(encodedPasswordList);
}
@Override
public void addPreviousEncodedPassword(String encodedPassword) {
- this.previousEncodedPasswords.add(encodedPassword);
+ if (previousEncodedPasswords==null) {
+ previousEncodedPasswords = new ArrayList();
+ }
+ previousEncodedPasswords.add(encodedPassword);
}
@Override
@@ -224,4 +235,21 @@ public void setLastLoginDate(Date date) {
public String getUserManagerId() {
return "jpa";
}
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ JpaUser jpaUser = (JpaUser) o;
+
+ return username.equals(jpaUser.username);
+
+ }
+
+ @Override
+ public int hashCode() {
+ return username.hashCode();
+ }
}
diff --git a/redback-users/redback-users-providers/redback-users-jpa/src/test/java/org/apache/archiva/redback/users/jpa/JpaUserManagerTest.java b/redback-users/redback-users-providers/redback-users-jpa/src/test/java/org/apache/archiva/redback/users/jpa/JpaUserManagerTest.java
index 75cda6da..97726979 100644
--- a/redback-users/redback-users-providers/redback-users-jpa/src/test/java/org/apache/archiva/redback/users/jpa/JpaUserManagerTest.java
+++ b/redback-users/redback-users-providers/redback-users-jpa/src/test/java/org/apache/archiva/redback/users/jpa/JpaUserManagerTest.java
@@ -22,11 +22,22 @@
import org.apache.archiva.redback.policy.UserSecurityPolicy;
import org.apache.archiva.redback.users.User;
import org.apache.archiva.redback.users.UserManager;
+import org.apache.archiva.redback.users.UserManagerException;
+import org.apache.archiva.redback.users.UserNotFoundException;
+import org.apache.archiva.redback.users.jpa.model.JpaUser;
import org.apache.archiva.redback.users.provider.test.AbstractUserManagerTestCase;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Before;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.transaction.TransactionConfiguration;
+import org.springframework.transaction.annotation.Transactional;
import javax.inject.Inject;
import javax.inject.Named;
@@ -40,14 +51,17 @@
/**
* Created by martin on 21.09.16.
*/
-
+@Transactional
public class JpaUserManagerTest extends AbstractUserManagerTestCase {
Log log = LogFactory.getLog(JpaUserManagerTest.class);
@Inject
@Named("userManager#jpa")
- JpaUserManager jpaUserManager;
+ UserManager jpaUserManager;
+
+ @Inject
+ EntityManagerFactory entityManagerFactory;
@Inject
@@ -58,28 +72,20 @@ public class JpaUserManagerTest extends AbstractUserManagerTestCase {
public void setUp() throws Exception {
super.setUp();
- Properties props = new Properties();
- InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("test.properties");
- assert is!=null;
- props.load(is);
- is.close();
- EntityManagerFactory emf = Persistence.createEntityManagerFactory("redback-jpa",props);
-
- jpaUserManager.setEntityManager(emf.createEntityManager());
- super.setUserManager(jpaUserManager);
assertNotNull(jpaUserManager);
+ super.setUserManager(jpaUserManager);
log.info("injected usermanager "+jpaUserManager);
- // create the factory defined by the "openjpa" entity-manager entry
-
}
@Test
public void testInit() {
+ assertNotNull(jpaUserManager);
jpaUserManager.initialize();
}
+
}
diff --git a/redback-users/redback-users-providers/redback-users-jpa/src/test/resources/spring-context.xml b/redback-users/redback-users-providers/redback-users-jpa/src/test/resources/spring-context.xml
index 4d7802ed..b67e1e98 100644
--- a/redback-users/redback-users-providers/redback-users-jpa/src/test/resources/spring-context.xml
+++ b/redback-users/redback-users-providers/redback-users-jpa/src/test/resources/spring-context.xml
@@ -21,10 +21,11 @@
+ http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
@@ -47,4 +48,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file