Hello I’m using Jackrabbit handling transactions through JCA.
I’m not clear on how I should use the Jackrabbit API that it works correctly with the rest of my framework, without any leaks and unnecessary work. This is my spring application context where I declare the Jackrabbit beans, plus “com.softmodeler.repository.service.impl.RepositoryService” which is my own service. <?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:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="properties"> <props> <prop key="jcr.homeDir" /> <prop key="jcr.rmiPort" /> <prop key="jcr.type" /> </props> </property> <property name="systemPropertiesModeName"> <value>SYSTEM_PROPERTIES_MODE_OVERRIDE</value> </property> </bean> <bean id="jcrConnectionManager" class="org.jencks.factory.ConnectionManagerFactoryBean"> <property name="transactionManager" ref="transactionManager"/> <property name="transaction" value="xa"/> </bean> <bean id="repositoryFactory" class="org.apache.jackrabbit.core.RepositoryFactoryImpl"/> <bean id="repositoryManagedConnectionFactory" class="org.apache.jackrabbit.jca.JCAManagedConnectionFactory" destroy-method="finalize"> <property name="configFile" value="classpath:${jcr.type}_repository.xml"/> <property name="homeDir" value="${jcr.homeDir}"/> </bean> <bean id="repository" class="org.jencks.factory.ConnectionFactoryFactoryBean"> <property name="managedConnectionFactory" ref="repositoryManagedConnectionFactory"/> <property name="connectionManager" ref="jcrConnectionManager"/> </bean> <bean id="repositoryService" class="com.softmodeler.repository.service.impl.RepositoryService"> <property name="repository" ref="repository"/> </bean> <bean id="rmiRegistry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean"> <property name="port" value="${jcr.rmiPort}"/> </bean> <bean id="rmiServer" class="org.springframework.extensions.jcr.jackrabbit.RmiServerRepositoryFactoryBean"> <property name="repository" ref="repository"/> <property name="remoteAdapterFactory"> <bean class="org.apache.jackrabbit.rmi.server.ServerAdapterFactory"/> </property> <property name="registry" ref="rmiRegistry"/> <property name="rmiName" value="jackrabbit"/> </bean> </beans> In the RepositoryService I then do the following: /** * returns the session handle * * @return */ protected Session getSession() { try { // login if session handle has not been created Session session = repository.login(CREDENTIALS, WORKSPACE); return session; } catch (Exception e) { logger.error("error receiving jcr session", e); //$NON-NLS-1$ throw new IllegalStateException(e); } } @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public void storeStream(String path, InputStream stream, STORE_TYPE type) throws ServerException { Assert.isNotNull(path); Assert.isNotNull(stream); Assert.isNotNull(type); Session session = getSession(); try { logger.debug("storing stream into {}", path); //$NON-NLS-1$ Node root = session.getRootNode(); Node typeNode = getOrCreateDirectoryNode(root, type.toString()); Node containerNode = createStructure(typeNode, path, true); String name = path.substring(path.lastIndexOf(SEP) + 1, path.length()); createOrUpdateFileNode(containerNode, stream, name); session.save(); } catch (Exception e) { ServerUtil.throwServerException(e); } finally { session.logout(); } } Is this the right way to get a session? Is the session.logout() correct, is it required or will it be done by the transaction handling. Is there some documentation about this? Greets Flavio -- View this message in context: http://jackrabbit.510166.n4.nabble.com/Jackrabbit-JCA-transaction-handling-tp4220958p4220958.html Sent from the Jackrabbit - Dev mailing list archive at Nabble.com.
