Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在ItemWriter中识别异常(从ItemReader、readItem方法发生)_Java_Batch Processing_Websphere Liberty_Jsr352 - Fatal编程技术网

Java 如何在ItemWriter中识别异常(从ItemReader、readItem方法发生)

Java 如何在ItemWriter中识别异常(从ItemReader、readItem方法发生),java,batch-processing,websphere-liberty,jsr352,Java,Batch Processing,Websphere Liberty,Jsr352,在JSR352批处理中,我正在运行一个分区步骤来创建多个JSON对象。 每个线程从oracle读取一些数据,并作为JSON对象写入。在某些情况下,resultSet.next()超时并引发异常,然后转到ItemReader和ItemWriter类的close()方法以清理任何资源。这很好。 不过,我对writer的close()方法有一些dao调用。需要在编写器完成时执行。但是当ItemReader上出现异常时,我不确定如何获取close()方法的异常详细信息。如果ItemReader发生异常,

在JSR352批处理中,我正在运行一个分区步骤来创建多个JSON对象。 每个线程从oracle读取一些数据,并作为JSON对象写入。在某些情况下,resultSet.next()超时并引发异常,然后转到ItemReader和ItemWriter类的close()方法以清理任何资源。这很好。 不过,我对writer的close()方法有一些dao调用。需要在编写器完成时执行。但是当ItemReader上出现异常时,我不确定如何获取close()方法的异常详细信息。如果ItemReader发生异常,close()方法不应执行DAO调用。在ItemWriter类中是否仍有标识ItemReader异常的方法

@Override
public Object readItem() throws Exception {
    Map<String, Object> resultMap = new HashMap<>();
    if (firstObject && null != resultSet && resultSet.isBeforeFirst()) {
        firstObject = false;
        return columnMetaDataMap;
    }       
    else if (null != resultSet && resultSet.next()) {
        recordNumber++;
        for (int i = 1; i <= rsMetaData.getColumnCount(); i++) {
            resultMap.put("C" + i, resultSet.getObject(i));
        }
        return resultMap;
    }
    return null;

如果定义了ItemReadListener,它将在onReadError方法中获得控制权,这样您就知道ItemReader中存在异常。然后,您可以在StepContext瞬态用户数据(setTransientUserData())中的对象中放置一些标志。在ItemWriter close方法中,您可以从步骤上下文中获取临时用户数据,并根据其中的内容采取相应的行动。

或者只是从ItemReader中的catch块设置标志,以处理从readItem中抛出的任何内容

如何捕获throwable异常,当区块获得超时时,ChunkStepController在区块处理中捕获throwable。正在尝试关闭所有读卡器和写卡器。如果从块处理中抛出了throwable,则应自动调用ItemReader和ItemWriter close()方法。没有什么特别的事情要做。我对close()方法有dao调用,我确实想防止在发生“throwable”expetion时调用它。还有吗?
 @Override
    public void close() throws Exception {
        gsonWriter.endArray();
        gsonWriter.flush();
        gsonWriter.close();
        subjectAreaCode = categoryCode+"/"+subCategoryCode+"/";
        logger.info("***Exception catch from writer for the file:"+outFile+"\n"+stepcontext.getException());

        if (file.length() == 2) {
            file.delete();
            gahRptExecStatUpdDAO.updateBatchRptStatus(outFile, GAHRptStatusConstants.NO_ROWS_TO_PROC);
        }