bilobag wrote:
Ok, i think my issue is that I have the
org.springmodules.jcr.support.OpenSessionInViewFilter configured in my
web.xml which is supposed to keep my repository session open. My dao mainly
just uses the jcrTemplate methods to access the repository. I believe the
template opens and closes the session. Does anyone know of a way to keep it
open during my entire test case?
I just copied some code from OpenSessionInViewFilter to put together a quick and
dirty solution. I'm using transactions and therefore have a threadbound session
available anyway. There might be a cleaner solution but this one should work for
now.
Cheers,
Christoph
ps: Just post such questions to the user list next time. Most developers read
both lists anyway.
=======
package com.subshell.sophora.server.persistence.jcr;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.jackrabbit.JcrConstants;
import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
import
org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springmodules.jcr.JcrTemplate;
import org.springmodules.jcr.SessionFactory;
import org.springmodules.jcr.SessionFactoryUtils;
public class NodeServiceTests extends
AbstractDependencyInjectionSpringContextTests {
protected static final Log log =
LogFactory.getLog(NodeServiceTests.class);
protected JcrTemplate jcrTemplate;
private SessionFactory sf;
private Session session;
public JcrTemplate getJcrTemplate() {
return jcrTemplate;
}
public void setJcrTemplate(JcrTemplate jcrTemplate) {
this.jcrTemplate = jcrTemplate;
}
public NodeServiceTests() {
super();
setAutowireMode(AUTOWIRE_BY_NAME);
}
@Override
protected String[] getConfigLocations() {
return new String[] {
"classpath:WEB-INF/applicationContext.xml" };
}
@Override
protected void onSetUp() throws Exception {
super.onSetUp();
sf = jcrTemplate.getSessionFactory();
session = SessionFactoryUtils.getSession(sf, true);
TransactionSynchronizationManager.bindResource(sf,
sf.getSessionHolder(session));
}
@Override
protected void onTearDown() throws Exception {
TransactionSynchronizationManager.unbindResource(sf);
SessionFactoryUtils.releaseSession(session, sf);
super.onTearDown();
}
public void testGetAllFiles() throws RepositoryException {
Node addNode = jcrTemplate.getRootNode().addNode("test");
addNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
String uuid = addNode.getUUID();
Node nodeByUUID = jcrTemplate.getNodeByUUID(uuid);
assertEquals(JcrConstants.MIX_REFERENCEABLE,
nodeByUUID.getMixinNodeTypes()[0].getName());
}
}