Hi Xavier,
Do you have the stack trace ?
Christophe
On Wed, Feb 20, 2008 at 7:06 PM, Xavier <[EMAIL PROTECTED]> wrote:
>
> Hello,
>
> I'm starting with Jackrabbit 1.4 w/ OCM + Spring 2.5 + SpringModules
> When I want to update an existing node that contains binary data (byte[]),
> I
> get the following error message in my test case :
>
> org.springframework.transaction.TransactionSystemException: Could not
> commit
> JCR transaction; nested exception is javax.transaction.RollbackException:
> javax.transaction.xa.XAException
>
>
>
> JUnit Test case :
> This test insert a new node then updates the node and checks the retrieved
> content is correct
> @Test
> public void testSaveAndRetrieve2ContentWithData() {
> // store content
> Content originalVersion = new Content(
> "/testSaveAndRetrieveStringContent", "a new
> content", data1,
> mimeType1);
> imageService.store(originalVersion);
> Content anotherVersion = new Content(
> "/testSaveAndRetrieveStringContent", "an
> even newer content",
> data2, mimeType2);
> imageService.store(anotherVersion);
> Content retrievedVersion = imageService
>
> .findByPath("/testSaveAndRetrieveStringContent");
> Assert.assertEquals("Contents should be equal",
> anotherVersion
> .getTitle(), retrievedVersion.getTitle());
> }
>
> Domain Model:
>
> @Node(jcrType="nt:unstructured",
> jcrMixinTypes =
> "mix:versionable,mix:referenceable,mix:lockable")
> public class Content {
>
> /** Node path in the CR */
> @Field(path=true)
> private String path;
>
> @Field(uuid=true)
> private String uuid;
>
> @Field(jcrName = "test:lastModified")
> private Calendar lastModified;
>
> /** content title */
> @Field(jcrName = "test:title")
> private String title = null;
>
> @Field(jcrName = "test:mimeType")
> private String mimeType;
>
> @Field(jcrName = "test:data")
> private byte[] data;
>
>
> ServiceImpl:
>
> public void store(Content content) {
> // check no node with the same path already exists,
> // otherwise, create a new version of the same node
> content.setLastModified(new GregorianCalendar());
> if(findByPath(content.getPath()) == null) {
> LOG.warn("Inserting the new content with path " +
> content.getPath());
> jcrMappingTemplate.insert(content);
> jcrMappingTemplate.save();
> } else {
> LOG.warn("Updating the content with path " +
> content.getPath());
> // find previous version in repository
> Content original =
> (Content)jcrMappingTemplate.getObject(content.getPath());
> // copy all properties
> original.setData(content.getData());
> original.setLastModified(content.getLastModified
> ());
> original.setMimeType(content.getMimeType());
> original.setTitle(content.getTitle());
> // perform update
> jcrMappingTemplate.checkout(original.getPath());
> jcrMappingTemplate.update(original);
> jcrMappingTemplate.save();
> jcrMappingTemplate.checkin(original.getPath());
> }
> }
>
> Spring Config:
> <!-- annotation-config activation is triggered by component-scan -->
> <context:component-scan base-package="sample" />
>
> <context:property-placeholder location="classpath:repository.properties"
> />
>
> <!-- enable the configuration of transactional behavior based on
> annotations -->
> <tx:annotation-driven transaction-manager="jcrTransactionManager" />
>
> <bean id="jcrTransactionManager"
> class="org.springmodules.jcr.jackrabbit.LocalTransactionManager">
> <property name="sessionFactory" ref="jcrSessionFactory" />
> </bean>
>
> <bean id="jcrRepository"
> class="org.springmodules.jcr.jackrabbit.RepositoryFactoryBean">
> <!-- normal factory beans params -->
> <property name="configuration" value="classpath:jackrabbit-repo.xml" />
> <property name="homeDir" value="file:D:/tmp/repository" />
> </bean>
>
> <bean id="jcrSessionFactory"
> class="org.springmodules.jcr.jackrabbit.ocm.JackrabbitSessionFactory">
> <property name="repository" ref="jcrRepository" />
> <property name="credentials" ref="jcrCredentials" />
> <property name="nodeTypes2Import"
> value="classpath:nodetypes/custom_nodetypes.xml" />
> <property name="namespaces">
> <util:properties>
> <prop key="ocm">http://jackrabbit.apache.org/ocm</prop>
> <prop key="test">http://test</prop>
> </util:properties>
> </property>
> <property name="sessionHolderProviderManager"
> ref="sessionHolderProviderManager" />
> </bean>
>
> <bean name="sessionHolderProviderManager"
> class="org.springmodules.jcr.support.ListSessionHolderProviderManager">
> <property name="providers">
> <list>
> <bean
> class="
> org.springmodules.jcr.jackrabbit.support.JackRabbitSessionHolderProvider"
> />
> </list>
> </property>
> </bean>
>
> <!-- JCR Credentials -->
> <bean id="jcrCredentials" class="javax.jcr.SimpleCredentials">
> <constructor-arg index="0" value="${jcr.connection.username}" />
> <constructor-arg index="1">
> <bean factory-bean="jcrCredentialsPassword"
> factory-method="toCharArray" />
> </constructor-arg>
> </bean>
> <bean id="jcrCredentialsPassword" class="java.lang.String">
> <constructor-arg index="0" value="${jcr.connection.password}" />
> </bean>
>
> <bean id="mapper"
> class="org.springmodules.jcr.jackrabbit.ocm.JcrMapperFactoryBean">
> <property name="classes">
> <list>
> <value>sample.domain.Content</value>
> </list>
> </property>
> </bean>
>
> <bean id="jcrMappingTemplate"
> class="org.springmodules.jcr.jackrabbit.ocm.JcrMappingTemplate">
> <property name="sessionFactory" ref="jcrSessionFactory" />
> <property name="mapper" ref="mapper" />
> <property name="allowCreate" value="true" />
> </bean>
>
>
>
> Can you tell what's wrong with this ?
> Thank you in advance
> Xavier
>
> --
> View this message in context:
> http://www.nabble.com/-OCM--XAException-when-updating-binary-content-tp15595036p15595036.html
> Sent from the Jackrabbit - Users mailing list archive at Nabble.com.
>
>