我正在使用引擎盖下的弹簧的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();检查交易不活跃,此番空只
我很困惑,当没有任何类都标记为事务为什么春天尝试在交易
同意春天的事务管理是在gigaspace的核心使用的,但是我很困惑,当没有一个类被标记为事务时,为什么春天试图在事务中调用这个方法? –
尝试在调试模式下放置org.springframework.transaction并查看是否可以获取该信息 – Shailendra