2016-09-01 64 views
0

我正在使用引擎蓋下的彈簧的gigaspace xap應用程序上工作。由gigaspaces提供的jini事務管理器不支持可序列化。當沒有使用事務註釋的類或方法時,將調用Spring事務攔截器

我有一個使用spring-batch處理文件的類。下面是它是如何調用工作

public class FileProcessor implements BasicFileProcessor { 
    @Value("${feeddownload.basedir}") 
    private String baseDir; 
    @Autowired 
    private JobLauncher jobLauncher; 
    @Autowired 
    private Job cmJob; 
    @Autowired 
    private MapJobRepositoryFactoryBean repositoryFactoryBean; 

    @Override 
    public void process(RiskRunCompletion riskRunCompletion, VersionedSliceName versionedSliceName, GigaSpace gigaSpace) { 
     Transaction tx = gigaSpace.getCurrentTransaction(); 

     try { 
      //Adding current time to the parameter, to enable multiple times calling job with same parameters 
      long currentTimeInMillis = System.currentTimeMillis(); 
      JobParameter currentTimeInMillinsParam = new JobParameter(currentTimeInMillis); 

      Map parameterMap = new LinkedHashMap(); 
      addDirectoryParams(valuationSliceRun, parameterMap); 

      parameterMap.put(CURRENT_TIME, currentTimeInMillinsParam); 

      JobParameters paramMap = new JobParameters(parameterMap); 
      JobExecution cmExecution = launchJobWithParameters(paramMap); 
      for (Throwable t : cmExecution.getAllFailureExceptions()) { 
       throw new RuntimeException(t); 
      } 
     } catch (Exception e) { 
      throw new RuntimeException("Exception during batch job", e); 
     } finally { 
      repositoryFactoryBean.clear(); 
     } 

    } 

    private JobExecution launchJobWithParameters(JobParameters paramMap) throws Exception { 
     return jobLauncher.run(cmJob, paramMap); 
    } 
} 

的處理的方法從不同的類調用如下

public class FileBasedProcessingEventListener implements ApplicationContextAware { 
    @Value("${feeddownload.basedir}") 
    private String baseDir; 

    @Autowired 
    private BasicFileProcessor cmProcessor; 

    @Autowired 
    private FileBasedProcessingExceptionHandler fileBasedProcessingExceptionHandler; 


    public void handle(FileBasedProcessingEvent fileBasedProcessingEvent, GigaSpace gigaSpace) throws IOException { 
     LOGGER.info("Processing file based processing event : " + fileBasedProcessingEvent); 
     createLockFiles(fileBasedProcessingEvent); 
     handleEvent(fileBasedProcessingEvent, gigaSpace); 
    } 

    private void handleEvent(FileBasedProcessingEvent fileBasedProcessingEvent, GigaSpace gigaSpace) { 
     Transaction tx = gigaSpace.getCurrentTransaction(); 

     cmProcessor.process(fileBasedProcessingEvent.getRiskRunCompletion(), versionedSliceName, gigaSpace); 


    } 

} 

手柄方法是從框架調用。現在,我不知道爲什麼我收到異常如下

Caused by: org.springframework.transaction.InvalidIsolationLevelException: Jini Transaction Manager does not support serializable isolation level 
    at org.openspaces.core.transaction.manager.AbstractJiniTransactionManager.applyIsolationLevel(AbstractJiniTransactionManager.java:271) 
    at org.openspaces.core.transaction.manager.AbstractJiniTransactionManager.doJiniBegin(AbstractJiniTransactionManager.java:251) 
    at org.openspaces.core.transaction.manager.AbstractJiniTransactionManager.doBegin(AbstractJiniTransactionManager.java:207) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:372) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:417) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:255) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 

無類的被標記爲事務性的,我不知道爲什麼,當我還沒有打上任何類或交易的任何方法被調用TransactionInterceptor它不應該有任何顧慮。我也使用Transaction tx = gigaSpace.getCurrentTransaction();檢查交易不活躍,此番空只

我很困惑,當沒有任何類都標記爲事務爲什麼春天嘗試在交易

回答

0

看起來像GigaSpaces的事務管理器是基於調用該方法春季交易管理基礎設施可以從文檔here中推斷 - 所以如果您使用的是Gigaspaces交易API,那麼您正在使用Spring交易管理。另外值得一看的是XML配置文件中的任何事務管理器配置,它將指向確切的事務管理器類。

+0

同意春天的事務管理是在gigaspace的核心使用的,但是我很困惑,當沒有一個類被標記爲事務時,爲什麼春天試圖在事務中調用這個方法? –

+0

嘗試在調試模式下放置org.springframework.transaction並查看是否可以獲取該信息 – Shailendra

0

確實似乎事務正在使用中,請檢查您是否在您的pu.xml中定義了事務管理器,特別是檢查jobLauncher初始化。

相關問題