2012-01-06 1 views
1

Je souhaite exécuter des transactions sur ma webapp Spring qui utilise le référentiel Apache Jackrabbit. JackRabbit utilise ensuite la base de données relationnelle (MySQL/PgSQL) pour les données textuelles. Les données binaires sont stockées dans FileSystem.Transactions dans Apache Jackrabbit et Spring

Jusqu'à présent, j'ont cette configuration fonctionnelle des haricots Jackrabbit:

<bean id="sessionFactory" class="com.example.MyJcrSessionFactory"> 
    <constructor-arg index="0" ref="repository"/> 
    <constructor-arg index="1" ref="jcrCredentials"/> 
</bean> 

<bean id="repository" class="org.apache.jackrabbit.core.RepositoryImpl"> 
    <constructor-arg index="0" ref="config" /> 
</bean> 

<bean id="config" class="org.apache.jackrabbit.core.config.RepositoryConfig" factory-method="create"> 
    <constructor-arg index="0" type="java.io.InputStream" value="classpath:jackrabbit/repository.xml"/> 
    <constructor-arg index="1" type="java.lang.String" value="/tmp/repository" /> 
</bean> 

<bean id="jcrCredentials" class="javax.jcr.SimpleCredentials"> 
    <constructor-arg index="0" type="java.lang.String" value="..." /> 
    <constructor-arg index="1" type="char[]" value="..." /> 
</bean> 

Et reste de la configuration Jackrabbit dans le fichier repository.xml.

Que dois-je faire pour exécuter avec succès des transactions sur le référentiel JackRabbit? Quelle technologie suis-je censé utiliser?

Je cours Spring 3.1, Jackrabbit 2.3.3 sur Tomcat/Glassfish. Et je ne veux pas utiliser de modules de ressorts obsolètes.

Répondre

3

Nous utilisons une configuration similaire (Jackrabbit, Spring, Tomcat) avec Jencks en tant que fournisseur JCA.

Voici une config exemple:

<bean id="txManagerJencks" class="org.jencks.factory.TransactionManagerFactoryBean" /> 

<bean id="pooledConnectionManagerJcr" class="org.jencks.factory.ConnectionManagerFactoryBean"> 
    <property name="transactionManager"> 
     <ref local="txManagerJencks" /> 
    </property> 
    <property name="transaction" value="xa" /> 
    <property name="poolMinSize" value="1"/> 
    <property name="poolMaxSize" value="5"/> 
    <property name="connectionMaxIdleMinutes" value="5" />  
</bean> 

<bean id="repositoryManagedConnectionFactory" class="org.apache.jackrabbit.jca.JCAManagedConnectionFactory" destroy-method="finalize"> 
    <property name="homeDir" value="${jackrabbit.homeDir}/jackrabbit" /> 
    <property name="configFile" value="classpath:repository.xml" /> 
</bean> 

<bean id="repository" 
    class="org.springframework.jca.support.LocalConnectionFactoryBean" > 
    <property name="managedConnectionFactory"> 
     <ref local="repositoryManagedConnectionFactory" /> 
    </property> 
    <property name="connectionManager"> 
     <ref local="pooledConnectionManagerJcr" /> 
    </property> 
</bean> 
+1

Toute idée sur la façon dont cela fonctionne lorsque vous avez une prise en pension de Jackrabbit à distance? – rwijngaa

Questions connexes