3 Replies Latest reply on Oct 29, 2012 8:07 AM by Randall Hauch

    Non-transactional configuration

    Brian Wallis Master

      Should I be able to run a simple modeshape configuration with a cache but without any transactions configured?

       

      I have a very simple configuration like so:

       

      {code}

      {

          "name" : "DataRepository",

             

          "storage" : {

              "cacheName" : "DataRepository",

              "cacheConfiguration" : "simple_storage_cache_configuration.xml",

          },

      }

      {code}

       

      and

       

      {code}

      <infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xsi:schemaLocation="urn:infinispan:config:5.1 http://www.infinispan.org/schemas/infinispan-config-5.1.xsd"

          xmlns="urn:infinispan:config:5.1">

       

          <namedCache name="DataRepository">

              <eviction strategy="LIRS" maxEntries="1000" />

              <loaders passivation="false" shared="false" preload="true">

                  <loader class="org.infinispan.loaders.file.FileCacheStore"

                      fetchPersistentState="true"  purgerThreads="3"

                      purgeSynchronously="true"  ignoreModifications="false"

                      purgeOnStartup="false">

                      <properties>

                          <property name="location" value="DataRepository/storage" />

                      </properties>

                  </loader>

              </loaders>

          </namedCache>

      </infinispan>

      {code}

      But when I use this configuration like so

       

      {code}

          public void simpleAccess() throws Exception

          {

              Session session = null;

       

              try

              {

                  session = repository.login();

       

                  log.info("Add testRoot node");

       

                  Node testRoot = session.getRootNode().addNode("testRoot", "nt:folder");

                 

                  log.info("Save Session");

                  session.save();

                  log.info("Saved Session");

              }

              finally

              {

                  if(session != null)

                  {

                      session.logout();

                  }

              }

       

          }

      {code}

       

      then I get a null pointer exception

       

      {code}

      javax.jcr.RepositoryException: Error while starting 'DataRepository' repository: null

                at org.modeshape.jcr.JcrRepository.login(JcrRepository.java:611)

                at org.modeshape.jcr.JcrRepository.login(JcrRepository.java:568)

                at org.modeshape.jcr.JcrRepository.login(JcrRepository.java:147)

                at au.com.infomedix.notransaction.TransactionTest.simpleAccess(TransactionTest.java:76)

                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

                at java.lang.reflect.Method.invoke(Method.java:597)

                at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)

                at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)

                at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)

                at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)

                at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)

                at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)

                at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)

                at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)

                at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)

                at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)

                at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)

                at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)

                at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)

                at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)

                at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)

                at org.junit.runners.ParentRunner.run(ParentRunner.java:236)

                at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)

                at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

                at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)

                at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)

                at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)

                at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

      Caused by: java.lang.NullPointerException

                at org.modeshape.jcr.txn.SynchronizedTransactions.begin(SynchronizedTransactions.java:60)

                at org.modeshape.jcr.cache.document.WritableSessionCache.save(WritableSessionCache.java:362)

                at org.modeshape.jcr.cache.document.WritableSessionCache.save(WritableSessionCache.java:337)

                at org.modeshape.jcr.cache.RepositoryCache.<init>(RepositoryCache.java:174)

                at org.modeshape.jcr.JcrRepository$RunningState.<init>(JcrRepository.java:1069)

                at org.modeshape.jcr.JcrRepository$RunningState.<init>(JcrRepository.java:960)

                at org.modeshape.jcr.JcrRepository.doStart(JcrRepository.java:352)

                at org.modeshape.jcr.JcrRepository.login(JcrRepository.java:609)

                ... 29 more

      {code}

       

      If I add the following to the infinispan cache configuration after the loaders

       

      {code}

              <transaction

                  transactionManagerLookupClass="org.infinispan.transaction.lookup.GenericTransactionManagerLookup"

                  transactionMode="TRANSACTIONAL" lockingMode="OPTIMISTIC" />

      {code}

       

      Then the test works as expected.

       

      I've attached the testcase.