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


Reply via email to