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

Is JasperCompileManager threadsafe?


kcyuen

Recommended Posts

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;	}
Link to comment
Share on other sites

  • 5 weeks later...
  • Replies 1
  • Created
  • Last Reply

Top Posters In This Topic

Popular Days

Top Posters In This Topic

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...