Add transaction annotation and dependencies

This commit is contained in:
Martin Stockhammer 2016-10-21 20:11:47 +02:00
parent c4fc7ffc73
commit 6f7fa90562
15 changed files with 207 additions and 97 deletions

10
pom.xml
View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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"

View File

@ -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",

View File

@ -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(

View File

@ -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);

View File

@ -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>

View File

@ -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)

View File

@ -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>

View File

@ -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 {

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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>