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