We are using CR4E in our application, in which we change the crystal report data source with the application data source. The code works fine for most of the case when we execute single report at a time. We have scenario were n number of crystal reports can be configured and executed. In one such case when we create 100 instances of reportClientDocument and assign it to a thread pool. From that thread pool 5 jobs will be picked and executed simultaneously. While running reports like some of the reports are failed due to the following exception
1. Logon Error: Null user or password not supported in THIN driver
com.crystaldecisions.sdk.occa.report.lib.ReportSDKLogonException: Logon Error: Null user or password not supported in THIN driver---- Error code:-2147217393 Error code name:dbLogonFailed
2. Unexpected database connector error
com.crystaldecisions.sdk.occa.report.lib.ReportSDKException: Unexpected database connector error---- Error code:-2147467259 Error code name:failed
3. Error finding JNDI name (JDBC (JNDI))
com.crystaldecisions.sdk.occa.report.lib.ReportSDKException: Error finding JNDI name (JDBC (JNDI))---- Error code:-2147467259 Error code name:failed
My question is why CR4E throws weird exception when we run more than one report simultaneously with separate instance?
Also could you please provide any solution to resolve this problem?
This is possibly related with the icu4j RuleBasedCollator class used by CRJ. CRJ shares one instance of RuleBasedCollator for all threads. If you look at icu4j source code, class RuleBasedCollator is not thread safe and unless each crystal document creates it own instance of RuleBasedCollator you may encounter sporadic problems when rendering more than 1 report at the same time. This might be the cause of the issue and I have seen a cpl of more people reporting it. I dont know if product will a ccept this for bug fix since CRJ is really meant for small scale deployments and less concurrency, it is not scalable.