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?
bilobag wrote:
>
> 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#a11696412
Sent from the Jackrabbit - Dev mailing list archive at Nabble.com.