jasperreports icon indicating copy to clipboard operation
jasperreports copied to clipboard

Avoid log error and throw approach

Open ipotapchuk opened this issue 2 years ago • 0 comments

I have this error logged by jasper when I am canceling the fill and cleaning the swap file virtualizer:

Error virtualizing object 622875385_1438335749_15478_-1362924112 to JRSwapFile \var\swap\swap_1169073004_1689777368024
java.io.IOException: Stream Closed
	at java.base/java.io.RandomAccessFile.seek0(Native Method)
	at java.base/java.io.RandomAccessFile.seek(RandomAccessFile.java:590)
	at net.sf.jasperreports.engine.util.JRSwapFile.write(JRSwapFile.java:168)
	at net.sf.jasperreports.engine.util.JRSwapFile.write(JRSwapFile.java:157)
	at net.sf.jasperreports.engine.util.SwapFileVirtualizerStore.store(SwapFileVirtualizerStore.java:106)
	at net.sf.jasperreports.engine.fill.StoreVirtualizer.pageOut(StoreVirtualizer.java:49)
	at net.sf.jasperreports.engine.fill.JRAbstractLRUVirtualizer.virtualizeData(JRAbstractLRUVirtualizer.java:614)
	at net.sf.jasperreports.engine.fill.JRAbstractLRUVirtualizer.evict(JRAbstractLRUVirtualizer.java:429)
	at net.sf.jasperreports.engine.fill.JRAbstractLRUVirtualizer.registerObject(JRAbstractLRUVirtualizer.java:383)
	at net.sf.jasperreports.engine.base.ElementsBlock.register(ElementsBlock.java:134)
	at net.sf.jasperreports.engine.base.ElementsBlock.preAdd(ElementsBlock.java:185)
	at net.sf.jasperreports.engine.base.ElementsBlock.add(ElementsBlock.java:220)
	at net.sf.jasperreports.engine.base.ElementsBlock.add(ElementsBlock.java:244)
	at net.sf.jasperreports.engine.base.VirtualizableElementList.add(VirtualizableElementList.java:125)
	at net.sf.jasperreports.engine.base.JRVirtualPrintPage.addElement(JRVirtualPrintPage.java:159)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.lambda$fillBand$2(JRBaseFiller.java:1345)
	at java.base/java.util.function.Consumer.lambda$andThen$0(Consumer.java:65)
	at net.sf.jasperreports.engine.fill.OffsetElementsUtil.lambda$transfer$1(OffsetElementsUtil.java:45)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
	at net.sf.jasperreports.engine.fill.OffsetElementsUtil.transfer(OffsetElementsUtil.java:41)
	at net.sf.jasperreports.engine.fill.JRPrintBand.consumeElement(JRPrintBand.java:82)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fillBand(JRBaseFiller.java:1343)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillBandNoOverflow(JRVerticalFiller.java:471)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillPageHeader(JRVerticalFiller.java:421)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillPageBreak(JRVerticalFiller.java:2361)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBreak(JRVerticalFiller.java:2450)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2698)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:837)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:276)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:119)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:631)
	at net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:434)
	at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFill.run(BaseFillHandle.java:131)
	at java.base/java.lang.Thread.run(Thread.java:833)

I guess it happens because the virtualizer is still doing some work while fill was already canceled. In general, it's not a good practice to log and re-throw, so I think this logging should be changed to debug level.

ipotapchuk avatar Jul 19 '23 14:07 ipotapchuk