You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ma...@apache.org on 2016/10/21 18:12:42 UTC
archiva-redback-core git commit: Add transaction annotation and
dependencies
Repository: archiva-redback-core
Updated Branches:
refs/heads/jpa c4fc7ffc7 -> 6f7fa9056
Add transaction annotation and dependencies
Project: http://git-wip-us.apache.org/repos/asf/archiva-redback-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva-redback-core/commit/6f7fa905
Tree: http://git-wip-us.apache.org/repos/asf/archiva-redback-core/tree/6f7fa905
Diff: http://git-wip-us.apache.org/repos/asf/archiva-redback-core/diff/6f7fa905
Branch: refs/heads/jpa
Commit: 6f7fa9056264ae7ce98192cdb0946dce97ab65a2
Parents: c4fc7ff
Author: Martin Stockhammer <ma...@apache.org>
Authored: Fri Oct 21 20:11:47 2016 +0200
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Fri Oct 21 20:11:47 2016 +0200
----------------------------------------------------------------------
pom.xml | 10 ++
.../redback-common-integrations/pom.xml | 8 --
.../redback-rbac-jpa/pom.xml | 9 +-
.../redback/rbac/jpa/JpaRbacManager.java | 98 ++++++++++----------
.../redback/rbac/jpa/model/JpaPermission.java | 4 +-
.../archiva/redback/rbac/jpa/model/JpaRole.java | 4 +-
.../rbac/jpa/model/JpaUserAssignment.java | 3 +-
.../redback/rbac/jpa/JpaRbacManagerTest.java | 22 +++--
.../src/test/resources/spring-context.xml | 31 ++++++-
.../src/test/resources/test.properties | 7 +-
.../redback-users-jpa/pom.xml | 5 +
.../redback/users/jpa/JpaUserManager.java | 3 +-
.../redback/users/jpa/model/JpaUser.java | 36 ++++++-
.../redback/users/jpa/JpaUserManagerTest.java | 32 ++++---
.../src/test/resources/spring-context.xml | 32 ++++++-
15 files changed, 207 insertions(+), 97 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 975be68..cdb4c89 100644
--- a/pom.xml
+++ b/pom.xml
@@ -534,6 +534,16 @@
<version>${springVersion}</version>
</dependency>
<dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-tx</artifactId>
+ <version>${springVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-orm</artifactId>
+ <version>${springVersion}</version>
+ </dependency>
+ <dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-integrations/redback-common-integrations/pom.xml
----------------------------------------------------------------------
diff --git a/redback-integrations/redback-common-integrations/pom.xml b/redback-integrations/redback-common-integrations/pom.xml
index 656dcf2..34921ce 100644
--- a/redback-integrations/redback-common-integrations/pom.xml
+++ b/redback-integrations/redback-common-integrations/pom.xml
@@ -83,14 +83,6 @@
</dependency>
<dependency>
<groupId>org.apache.archiva.redback</groupId>
- <artifactId>redback-users-jpa</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva.redback</groupId>
- <artifactId>redback-rbac-jpa</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva.redback</groupId>
<artifactId>redback-users-configurable</artifactId>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-rbac/redback-rbac-providers/redback-rbac-jpa/pom.xml
----------------------------------------------------------------------
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 ba1c0bd..665af80 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 @@
<groupId>org.apache.archiva.redback</groupId>
<artifactId>redback-common-jpa</artifactId>
</dependency>
-
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-tx</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-orm</artifactId>
+ </dependency>
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa</artifactId>
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/JpaRbacManager.java
----------------------------------------------------------------------
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 184df40..8689566 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.*;
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 class JpaRbacManager extends AbstractRBACManager {
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<Role> roles) throws RbacObjectInvalidException, RbacManagerException {
if ( roles == null )
@@ -83,17 +89,17 @@ public class JpaRbacManager extends AbstractRBACManager {
}
final EntityManager em = getEm();
- em.getTransaction().begin();
+ List<Role> merged = new ArrayList<Role>();
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 class JpaRbacManager extends AbstractRBACManager {
return q.getResultList();
}
+ @Transactional
@Override
public void removeRole(Role role) throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(role);
@@ -120,14 +127,12 @@ public class JpaRbacManager extends AbstractRBACManager {
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<Permission>());
em.remove(myRole);
- em.getTransaction().commit();
fireRbacRoleRemoved(myRole);
}
@@ -159,6 +164,7 @@ public class JpaRbacManager extends AbstractRBACManager {
return permission;
}
+ @Transactional
@Override
public Permission savePermission(Permission permission) throws RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(permission);
@@ -166,11 +172,9 @@ public class JpaRbacManager extends AbstractRBACManager {
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 class JpaRbacManager extends AbstractRBACManager {
return (List<Permission>)(List<?>)q.getResultList();
}
+ @Transactional
@Override
public void removePermission(Permission permission) throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(permission);
@@ -203,13 +208,11 @@ public class JpaRbacManager extends AbstractRBACManager {
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 class JpaRbacManager extends AbstractRBACManager {
return op;
}
+ @Transactional
@Override
public Operation saveOperation(Operation operation) throws RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(operation);
@@ -227,10 +231,8 @@ public class JpaRbacManager extends AbstractRBACManager {
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 class JpaRbacManager extends AbstractRBACManager {
return q.getResultList();
}
+ @Transactional
@Override
public void removeOperation(Operation operation) throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(operation);
@@ -261,14 +264,11 @@ public class JpaRbacManager extends AbstractRBACManager {
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 class JpaRbacManager extends AbstractRBACManager {
return resource;
}
+ @Transactional
@Override
public Resource saveResource(Resource resource) throws RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(resource);
@@ -285,10 +286,17 @@ public class JpaRbacManager extends AbstractRBACManager {
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 class JpaRbacManager extends AbstractRBACManager {
return (List<Resource>)(List<?>)q.getResultList();
}
+ @Transactional
@Override
public void removeResource(Resource resource) throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(resource);
@@ -318,13 +327,11 @@ public class JpaRbacManager extends AbstractRBACManager {
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 class JpaRbacManager extends AbstractRBACManager {
return ua;
}
+ @Transactional
@Override
public UserAssignment saveUserAssignment(UserAssignment userAssignment) throws RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(userAssignment);
@@ -341,11 +349,9 @@ public class JpaRbacManager extends AbstractRBACManager {
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 class JpaRbacManager extends AbstractRBACManager {
return q.getResultList();
}
+ @Transactional
@Override
public void removeUserAssignment(UserAssignment userAssignment) throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException {
RBACObjectAssertions.assertValid(userAssignment);
@@ -380,22 +387,20 @@ public class JpaRbacManager extends AbstractRBACManager {
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<JpaPermission> tqp = em.createQuery("SELECT r FROM JpaPermission r",JpaPermission.class);
for(JpaPermission p : tqp.getResultList()) {
p.setOperation(null);
@@ -424,10 +429,9 @@ public class JpaRbacManager extends AbstractRBACManager {
for(JpaUserAssignment ua : tqu.getResultList()) {
em.remove(ua);
}
- em.getTransaction().commit();
+ em.flush();
em.clear();
-
}
@Override
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaPermission.java
----------------------------------------------------------------------
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 4ac6989..1e83d2b 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"
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaRole.java
----------------------------------------------------------------------
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 98c4bf2..5a7cdc7 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<JpaPermission> permissions = new ArrayList<JpaPermission>();
- @ElementCollection
+ @ElementCollection(fetch = FetchType.EAGER)
@OrderColumn(name="INTEGER_IDX")
@CollectionTable(
name="SECURITY_ROLE_CHILDROLE_MAP",
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/main/java/org/apache/archiva/redback/rbac/jpa/model/JpaUserAssignment.java
----------------------------------------------------------------------
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 65ed8af..f0b3d54 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.CollectionTable;
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(
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/java/org/apache/archiva/redback/rbac/jpa/JpaRbacManagerTest.java
----------------------------------------------------------------------
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 3c5bc9f..cfc34f4 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 @@ package org.apache.archiva.redback.rbac.jpa;
*/
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 @@ import java.util.Properties;
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
*/
@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 class JpaRbacManagerTest
{
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);
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/resources/spring-context.xml
----------------------------------------------------------------------
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 abee0b5..0f09c8a 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 @@
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+ 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">
<context:component-scan base-package="org.apache.archiva.redback.rbac.jpa" />
@@ -37,4 +37,31 @@
<alias name="commons-configuration" alias="test-conf"/>
+
+ <bean name="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+ <property name="jpaVendorAdapter" >
+ <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter" />
+ </property>
+ <property name="persistenceXmlLocation" value="classpath:META-INF/persistence-hsqldb.xml" />
+ <property name="jpaPropertyMap">
+ <map>
+ <entry key="openjpa.ConnectionURL" value="jdbc:hsqldb:mem:redback_database" />
+ <entry key="openjpa.ConnectionDriverName" value="org.hsqldb.jdbcDriver" />
+ <entry key="openjpa.ConnectionUserName" value="sa" />
+ <entry key="openjpa.ConnectionPassword" value="" />
+ <entry key="openjpa.Log" value="DefaultLevel=TRACE, Runtime=TRACE, Tool=INFO, SQL=TRACE" />
+ <entry key="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)" />
+ <entry key="openjpa.jdbc.MappingDefaults"
+ value="ForeignKeyDeleteAction=restrict,JoinForeignKeyDeleteAction=restrict"/>
+ </map>
+ </property>
+
+ </bean>
+
+ <bean name="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
+ <property name="entityManagerFactory" ref="entityManagerFactory" />
+ </bean>
+
+ <tx:annotation-driven />
+
</beans>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-rbac/redback-rbac-providers/redback-rbac-jpa/src/test/resources/test.properties
----------------------------------------------------------------------
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 df848c4..2456923 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
+
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-users/redback-users-providers/redback-users-jpa/pom.xml
----------------------------------------------------------------------
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 29c24f4..a73e9f2 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 @@
<artifactId>spring-tx</artifactId>
<version>${springVersion}</version>
</dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-orm</artifactId>
+ <version>${springVersion}</version>
+ </dependency>
<dependency>
<groupId>org.hsqldb</groupId>
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/JpaUserManager.java
----------------------------------------------------------------------
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 4429ed8..f60088b 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.policy.UserSecurityPolicy;
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 @@ import java.util.concurrent.atomic.AtomicBoolean;
/**
* Created by martin on 20.09.16.
*/
-@org.springframework.stereotype.Service("userManager#jpa")
+@Service("userManager#jpa")
public class JpaUserManager extends AbstractUserManager {
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/model/JpaUser.java
----------------------------------------------------------------------
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 9b00c8e..f1c79e2 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.CollectionTable;
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 class JpaUser implements org.apache.archiva.redback.users.User {
@Override
public List<String> getPreviousEncodedPasswords() {
+ if (previousEncodedPasswords==null) {
+ setPreviousEncodedPasswords(new ArrayList<String>());
+ }
+ assert previousEncodedPasswords != null;
return previousEncodedPasswords;
}
@Override
public void setPreviousEncodedPasswords(List<String> encodedPasswordList) {
- this.previousEncodedPasswords.clear();
- this.previousEncodedPasswords.addAll(encodedPasswordList);
+ if (previousEncodedPasswords==null) {
+ previousEncodedPasswords = new ArrayList<String>();
+ }
+ previousEncodedPasswords.clear();
+ previousEncodedPasswords.addAll(encodedPasswordList);
}
@Override
public void addPreviousEncodedPassword(String encodedPassword) {
- this.previousEncodedPasswords.add(encodedPassword);
+ if (previousEncodedPasswords==null) {
+ previousEncodedPasswords = new ArrayList<String>();
+ }
+ previousEncodedPasswords.add(encodedPassword);
}
@Override
@@ -224,4 +235,21 @@ public class JpaUser implements org.apache.archiva.redback.users.User {
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();
+ }
}
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-users/redback-users-providers/redback-users-jpa/src/test/java/org/apache/archiva/redback/users/jpa/JpaUserManagerTest.java
----------------------------------------------------------------------
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 75cda6d..9772697 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 @@ package org.apache.archiva.redback.users.jpa;
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 @@ import java.util.Properties;
/**
* 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();
}
+
}
http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/6f7fa905/redback-users/redback-users-providers/redback-users-jpa/src/test/resources/spring-context.xml
----------------------------------------------------------------------
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 4d7802e..b67e1e9 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 @@
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+ 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">
<context:component-scan base-package="org.apache.archiva.redback.users.jpa" />
@@ -47,4 +48,33 @@
<alias name="commons-configuration" alias="test-conf"/>
+
+
+ <bean name="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+ <property name="jpaVendorAdapter" >
+ <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter" />
+ </property>
+ <property name="persistenceXmlLocation" value="classpath:META-INF/persistence-hsqldb.xml" />
+ <property name="jpaPropertyMap">
+ <map>
+ <entry key="openjpa.ConnectionURL" value="jdbc:hsqldb:mem:redback_database" />
+ <entry key="openjpa.ConnectionDriverName" value="org.hsqldb.jdbcDriver" />
+ <entry key="openjpa.ConnectionUserName" value="sa" />
+ <entry key="openjpa.ConnectionPassword" value="" />
+ <entry key="openjpa.Log" value="DefaultLevel=TRACE, Runtime=TRACE, Tool=INFO, SQL=TRACE" />
+ <entry key="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)" />
+ <entry key="openjpa.jdbc.MappingDefaults"
+ value="ForeignKeyDeleteAction=restrict,JoinForeignKeyDeleteAction=restrict"/>
+ </map>
+ </property>
+
+ </bean>
+
+ <bean name="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
+ <property name="entityManagerFactory" ref="entityManagerFactory" />
+ </bean>
+
+ <tx:annotation-driven />
+
+
</beans>
\ No newline at end of file