Jump to content
We've recently updated our Privacy Statement, available here ×

kcyuen

Members
  • Posts

    1
  • Joined

  • Last visited

kcyuen's Achievements

Newbie

Newbie (1/14)

  • Week One Done
  • One Month Later
  • One Year In
  • First Post Rare
  • Conversation Starter Rare

Recent Badges

0

Reputation

  1. 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 Cl ient 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; }
×
×
  • Create New...