kcyuen Posted November 2, 2009 Share Posted November 2, 2009 JasperCompileManager seems to hang from time to time when multiple threads are executing net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:203).Is this a bug or JasperCompileManager is just not supposed to be threadsafe? Please confirm. Here is the thread dump. Multiple threads can access and write to the same instance of non-threadsafe HashMap at the same time, this will cause concurrent issue.Full thread dump Java HotSpot Client VM (14.2-b01 mixed mode, sharing):"Thread-34" daemon prio=6 tid=0x0320d400 nid=0x1944 runnable [0x046bf000] java.lang.Thread.State: RUNNABLE at java.util.HashMap.getForNullKey(Unknown Source) at java.util.HashMap.get(Unknown Source) at net.sf.jasperreports.engine.xml.JRAbstractStyleFactory.createObject(JRAbstractStyleFactory.java:267) at org.apache.commons.digester.FactoryCreateRule.begin(FactoryCreateRule.java:389) at org.apache.commons.digester.Digester.startElement(Digester.java:1361) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.emptyElement(Unknown Source) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.emptyElement(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at org.apache.commons.digester.Digester.parse(Digester.java:1647) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:239) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:226) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:214) at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:203) Code:Multiple threads can write and read the rotationMap in JRXmlConstants.java.......public static Map getRotationMap() { if (rotationMap == null) { rotationMap = new HashMap(6); rotationMap.put(ROTATION_NONE, new Byte(JRTextElement.ROTATION_NONE)); rotationMap.put(ROTATION_LEFT, new Byte(JRTextElement.ROTATION_LEFT)); rotationMap.put(ROTATION_RIGHT, new Byte(JRTextElement.ROTATION_RIGHT)); rotationMap.put(ROTATION_UPSIDE_DOWN, new Byte(JRTextElement.ROTATION_UPSIDE_DOWN)); rotationMap.put(new Byte(JRTextElement.ROTATION_NONE), ROTATION_NONE); rotationMap.put(new Byte(JRTextElement.ROTATION_LEFT), ROTATION_LEFT); rotationMap.put(new Byte(JRTextElement.ROTATION_RIGHT), ROTATION_RIGHT); rotationMap.put(new Byte(JRTextElement.ROTATION_UPSIDE_DOWN), ROTATION_UPSIDE_DOWN); } return rotationMap; } Link to comment Share on other sites More sharing options...
lucianc Posted December 2, 2009 Share Posted December 2, 2009 This has been fixed in JR 3.5.3.Regards,Lucian Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now