Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-1503

Invocation batching with transaction mode NON_TRANSACTIONAL should not be allowed.

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Critical
    • 5.1.0.CR2
    • 5.1.0.BETA3
    • Transactions
    • None
    • Hide

      Create a cache with a nontransactional transaction mode and start up. I am using Spring 3.1.RC1 but that shouldn't have an affect on this, I would think.

      Show
      Create a cache with a nontransactional transaction mode and start up. I am using Spring 3.1.RC1 but that shouldn't have an affect on this, I would think.
    • Workaround Exists
    • Hide

      When using batching, your cache needs to be TRANSACTIONAL.

      Show
      When using batching, your cache needs to be TRANSACTIONAL.
    • Low

    Description

      When setting a cache to non-transactional with the following configuration statement:

      <transaction transactionMode="NON_TRANSACTIONAL" />
      

      I'm getting a NullPointerException in org.infinispan.interceptors.BatchingInterceptor.handleDefault(InvocationContext, VisitableCommand) because there is no transaction manager defined. This is occurring in the fifth line below:

         protected Object handleDefault(InvocationContext ctx, VisitableCommand command) throws Throwable {
            Transaction tx;
            if (!ctx.isOriginLocal()) return invokeNextInterceptor(ctx, command);
            // if in a batch, attach tx
            if (transactionManager.getTransaction() == null && (tx = batchContainer.getBatchTransaction()) != null) {
               try {
                  transactionManager.resume(tx);
                  //If there's no ongoing tx then BatchingInterceptor creates one and then invokes next interceptor,
                  // so that all interceptors in the stack will be executed in a transactional context.
                  // This is where a new context (TxInvocationContext) is created, as the existing context is not transactional: NonTxInvocationContext.
                  InvocationContext txContext = icc.createInvocationContext(true);
                  txContext.setFlags(ctx.getFlags());
                  return invokeNextInterceptor(txContext, command);
               } finally {
                  if (transactionManager.getTransaction() != null && batchContainer.isSuspendTxAfterInvocation())
                     transactionManager.suspend();
               }
            } else {
               return invokeNextInterceptor(ctx, command);
            }
         }
      

      And the stacktrace:

      Caused by: java.lang.NullPointerException
      	at org.infinispan.interceptors.BatchingInterceptor.handleDefault(BatchingInterceptor.java:63) [infinispan-core-5.1.0.BETA3.jar:]
      	at org.infinispan.commands.AbstractVisitor.visitGetKeyValueCommand(AbstractVisitor.java:95) [infinispan-core-5.1.0.BETA3.jar:]
      	at org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:61) [infinispan-core-5.1.0.BETA3.jar:]
      	at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:318) [infinispan-core-5.1.0.BETA3.jar:]
      	at org.infinispan.CacheImpl.get(CacheImpl.java:262) [infinispan-core-5.1.0.BETA3.jar:]
      	at org.infinispan.DecoratedCache.get(DecoratedCache.java:292) [infinispan-core-5.1.0.BETA3.jar:]
      	at org.infinispan.lucene.FileListOperations.getFileList(FileListOperations.java:55) [infinispan-lucene-directory-5.1.0.BETA3.jar:]
      	at org.infinispan.lucene.InfinispanDirectory.list(InfinispanDirectory.java:183) [infinispan-lucene-directory-5.1.0.BETA3.jar:]
      	at org.infinispan.lucene.InfinispanDirectory.listAll(InfinispanDirectory.java:338) [infinispan-lucene-directory-5.1.0.BETA3.jar:]
      	at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:623) [lucene-core-3.1.0.jar:]
      	at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:575) [lucene-core-3.1.0.jar:]
      	at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:346) [lucene-core-3.1.0.jar:]
      	at org.apache.lucene.index.IndexReader.indexExists(IndexReader.java:808) [lucene-core-3.1.0.jar:]
      	at org.hibernate.search.store.DirectoryProviderHelper.initializeIndexIfNeeded(DirectoryProviderHelper.java:157) [hibernate-search-3.4.1.Final.jar:]
      	at org.hibernate.search.infinispan.InfinispanDirectoryProvider.start(InfinispanDirectoryProvider.java:88) [hibernate-search-infinispan-3.4.1.Final.jar:]
      	at org.hibernate.search.store.DirectoryProviderFactory.startDirectoryProviders(DirectoryProviderFactory.java:144) [hibernate-search-3.4.1.Final.jar:]
      	at org.hibernate.search.spi.SearchFactoryBuilder.initDocumentBuilders(SearchFactoryBuilder.java:403) [hibernate-search-3.4.1.Final.jar:]
      	at org.hibernate.search.spi.SearchFactoryBuilder.buildNewSearchFactory(SearchFactoryBuilder.java:262) [hibernate-search-3.4.1.Final.jar:]
      	at org.hibernate.search.spi.SearchFactoryBuilder.buildSearchFactory(SearchFactoryBuilder.java:144) [hibernate-search-3.4.1.Final.jar:]
      	at org.hibernate.search.event.FullTextIndexEventListener.initialize(FullTextIndexEventListener.java:151) [hibernate-search-3.4.1.Final.jar:]
      	at org.hibernate.event.EventListeners$1.processListener(EventListeners.java:198) [hibernate-core-3.6.6.Final.jar:]
      	at org.hibernate.event.EventListeners.processListeners(EventListeners.java:181) [hibernate-core-3.6.6.Final.jar:]
      	at org.hibernate.event.EventListeners.initializeListeners(EventListeners.java:194) [hibernate-core-3.6.6.Final.jar:]
      	... 40 more
      

      Attachments

        Activity

          People

            pmuiratbleepbleep Pete Muir (Inactive)
            astralbodies_jira Aaron Douglas (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: