Yes, here is the source for my test class and the applicationContext.xml. 
Please let me know what you think.  I would expect the jcrTemplate to open a
repository session like it does when I run the web app, but it seems like
its not.  Please let me know if there is something extra that I need to do
to get my test case to work with a Jackrabbit repository.  Thanks.


source:



public class NodeServiceTests extends
AbstractDependencyInjectionSpringContextTests {
        protected static final Log log = 
LogFactory.getLog(NodeServiceTests.class);

        private NodeService nodeService;
        
        public void setNodeService(NodeService nodeService) {
                this.nodeService = nodeService;
        }
        
        private NodeService getNodeService() {
                return this.nodeService;
        }

        public NodeServiceTests() {
                super();
                setAutowireMode(AUTOWIRE_BY_NAME);
        }
        
        protected String[] getConfigLocations() {
                return new String[] { 
"classpath:WEB-INF/applicationContext.xml"};
        }

        public void testGetAllFiles() throws IllegalAccessException,
RepositoryException, InvocationTargetException {
                log.debug("****in testGetAllFiles()***");
                NodeDto fileNode = getNodeService().getNodeByPath("/app
root/workspace3/folder0");
        
                Collection allFiles = 
getNodeService().getAllFiles(fileNode.getUuid());
                Iterator fileIter = allFiles.iterator();
                int x=0;
                while(fileIter.hasNext()) {
                        log.debug("****fileNodeType" + x++ + " = " + 
fileIter.next());
                }
                log.debug("****end testGetAllFiles()" );
                assertNotNull(allFiles);
                
        }
}


applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
        xmlns:aop="http://www.springframework.org/schema/aop";
        xmlns:tx="http://www.springframework.org/schema/tx";
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                        
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
            http://www.springframework.org/schema/aop
                        
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
            http://www.springframework.org/schema/tx
                        
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd";>


        <bean id="repository"
                class="org.springmodules.jcr.jackrabbit.RepositoryFactoryBean">
                <!-- normal factory beans params -->
                <property name="configuration"
                        value="/WEB-INF/app-repository.xml" />
        </bean>

        <!-- JNDI configuration  -->
        <!-- bean id="repository"
class="org.springframework.jndi.JndiObjectFactoryBean">
                <property name="jndiName" 
value="java:comp/env/jcr/myRepository"/>
                </bean -->

        <!-- SessionFactory -->
        <bean id="jcrSessionFactory"
                class="org.app.webapp.util.AppJackrabbitSessionFactory">
                <property name="repository" ref="repository" />
                <property name="credentials">
                        <bean class="javax.jcr.SimpleCredentials">
                                <constructor-arg index="0" value="bogus" />
                                <!-- create the credentials using a bean 
factory -->
                                <constructor-arg index="1">
                                        <bean factory-bean="password"
                                                factory-method="toCharArray" />
                                </constructor-arg>
                        </bean>
                </property>
                <!-- 
                        <property name="forceNamespacesRegistration" 
value="true"/>
                        <property name="keepNewNamespaces" value="false"/>
                -->
                <property name="skipExistingNamespaces" value="true" />
                <property name="contentType" value="text/x-jcr-cnd" />
                <property name="nodeDefinitions">

                        <list>
                                <value>/WEB-INF/appNodeTypes.cnd</value>
                        </list>
                </property>
        </bean>

        <!-- create the password to return it as a char[] -->
        <bean id="password" class="java.lang.String">
                <constructor-arg index="0" value="" />
        </bean>

        <bean id="jcrTemplate" class="org.springmodules.jcr.JcrTemplate">
                <property name="sessionFactory" ref="jcrSessionFactory" />
                <property name="allowCreate" value="true" />
        </bean>

        <bean id="jcrTransactionManager"
                
class="org.springmodules.jcr.jackrabbit.LocalTransactionManager">
                <property name="sessionFactory" ref="jcrSessionFactory" />
        </bean>


        <bean id="txProxyTemplate" abstract="true"
        
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
                <property name="proxyTargetClass">
                        <value>true</value>
                </property>
                <property name="transactionManager" ref="jcrTransactionManager" 
/>
                <property name="transactionAttributes">
                        <props>
                                <prop key="save*">PROPAGATION_REQUIRED</prop>
                                <prop key="*">PROPAGATION_REQUIRED, 
readOnly</prop>
                        </props>
                </property>
        </bean>

        <!--    
                <bean id="jcrService" parent="txProxyTemplate">
                <property name="target">
                <bean class="org.springmodules.examples.jcr.JcrService">
                <property name="template" ref="jcrTemplate"/>
                </bean>
                </property>
                </bean>
        -->
        <bean id="transactionRepository"
                class="org.springmodules.jcr.TransactionAwareRepository">
                <property name="allowNonTxRepository" value="true" />
                <property name="targetFactory" ref="jcrSessionFactory" />
        </bean>


        <!-- **************************************************
                ***************** Hibernate Config ***************
                ************************************************** -->

        <bean id="sessionFactory"
                
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                <property name="dataSource" ref="dataSource" />
                <!-- 
                        <property name="mappingDirectoryLocations">
                        
                        
                        
                        </property>
                -->

                <property name="hibernateProperties">
                        <props>
                                <prop key="hibernate.dialect">
                                        org.hibernate.dialect.Oracle9Dialect
                                </prop>
                                <prop key="hibernate.show_sql">false</prop>
                                <prop 
key="hibernate.jdbc.use_get_generated_keys">
                                        true
                                </prop>
                                <prop key="hibernate.max_fetch_depth">3</prop>
                                <prop key="hibernate.jdbc.fetch_size">5</prop>
                                <prop key="hibernate.jdbc.batch_size">20</prop>
                                <prop key="hibernate.use_outer_join">true</prop>
                                <prop key="cache.provider_class">
                                        org.hibernate.cache.NoCacheProvider
                                </prop>
                                <prop key="cache.use_query_cache">false</prop>
                                <prop key="cache.use_minimal_puts">false</prop>
                        </props>
                </property>
        </bean>

        <!-- Transaction manager for a single Hibernate SessionFactory 
(alternative
to JTA) -->
        <bean id="transactionManager"
                
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                <property name="sessionFactory" ref="sessionFactory" />
        </bean>

        <tx:annotation-driven transaction-manager="transactionManager" />

        <!--***********************************************
                ******* Helper class that simplifies Hibernate 
                data access code, and converts checked HibernateExceptions 
                into unchecked DataAccessExceptions,  ************
                ***********************************************-->
        <bean id="hibernateTemplate"
                class="org.springframework.orm.hibernate3.HibernateTemplate">
                <property name="sessionFactory">
                        <ref bean="sessionFactory" />
                </property>
        </bean>

        <!-- This bean defines the database information -->
        <bean class="com.mchange.v2.c3p0.ComboPooledDataSource"
                id="dataSource" destroy-method="close">
                <property name="driverClass">
                        <value>@driverClassName@</value>
                </property>
                <property name="jdbcUrl">
                        <value>@driverUrl@</value>
                </property>
                <property name="properties">
                        <props>
                                <prop key="c3p0.acquire_increment">5</prop>
                                <prop key="c3p0.idle_test_period">100</prop>
                                <prop key="c3p0.max_statements">0</prop>
                                <prop key="c3p0.min_size">3</prop>
                                <prop key="maxPoolSize">5</prop>
                                <prop key="user">@username@</prop>
                                <prop key="password">@password@</prop>
                        </props>
                </property>
        </bean>


        <!--***********************************************
                ***************   Services  *******************
                ***********************************************-->

        <bean id="nodeService"
                class="org.app.service.impl.NodeServiceImpl">
                <property name="jcrDAO" ref="jcrDao" />
        </bean>
        
        <bean id="fileNodeService"
                class="org.app.service.impl.FileNodeServiceImpl">
                <property name="jcrDAO" ref="jcrDao" />
        </bean>
        


        <!-- **************************************************
                *****************   DAO's  ***********************
                ************************************************** -->

        <bean
                
class="org.springframework.orm.hibernate3.support.HibernateDaoSupport"
                id="hibernateSupport" abstract="true">
                <property name="sessionFactory">
                        <ref bean="sessionFactory" />
                </property>
        </bean>

        <bean id="userDao" class="org.app.dao.impl.UserDaoImpl"
                parent="hibernateSupport" />

        <bean id="jcrDao" class="org.app.dao.impl.JcrBaseDAO">
                <property name="template" ref="jcrTemplate" />
        </bean>

</beans>




Christoph Kiehl-3 wrote:
> 
> bilobag wrote:
> 
>> javax.jcr.RepositoryException: this session has been closed
> 
> Could you please provide the source code of a very simple TestCase that
> fails 
> for you? It seems like the session is closed to early (well obviously ;)
> but 
> without the source it's very difficult to tell what's going wrong.
> 
> Cheers,
> Christoph
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Junit-testing-with-Jackrabbit-using-AbstractDependencyInjectionSpringContextTests-tf4111862.html#a11694987
Sent from the Jackrabbit - Dev mailing list archive at Nabble.com.

Reply via email to