Add transaction annotation and dependencies
This commit is contained in:
parent
c4fc7ffc73
commit
6f7fa90562
10
pom.xml
10
pom.xml
|
@ -533,6 +533,16 @@
|
|||
<artifactId>spring-test</artifactId>
|
||||
<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>
|
||||
|
|
|
@ -81,14 +81,6 @@
|
|||
<groupId>org.apache.archiva.redback</groupId>
|
||||
<artifactId>redback-users-ldap</artifactId>
|
||||
</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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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>
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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>
|
Loading…
Reference in New Issue