[ 
https://issues.apache.org/jira/browse/OFBIZ-4107?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dimitri Unruh updated OFBIZ-4107:
---------------------------------

    Attachment: OFBIZ-4107.patch

Hi Martin,

I like the plan to make minilang and screens more thread-safe.

I did some modifications with your patch. What do you think?

Dimitri

> if-regexp conditions in Minilang and Screens not thread safe
> ------------------------------------------------------------
>
>                 Key: OFBIZ-4107
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-4107
>             Project: OFBiz
>          Issue Type: Bug
>          Components: framework
>    Affects Versions: SVN trunk
>            Reporter: Martin Kreidenweis
>         Attachments: OFBIZ-4107-partial-fix.patch, OFBIZ-4107-test.patch, 
> OFBIZ-4107.patch
>
>
> The Perl5Matcher Perl5Compiler are not thread safe, as mentioned in their 
> documentation: 
> http://jakarta.apache.org/oro/api/org/apache/oro/text/regex/Perl5Compiler.html
> A separate instance should be used per thread. 
> The concrete issue occurred in our system in the 
> createCommContentDataResource service. The service tries to save emails to 
> the database after they have been sent. It failed because of the described 
> issue. This caused the whole email service (sendMailFromScreen) to be 
> rescheduled. So customers got emails twice. 
> The Perl5Matcher and Perl5Compiler instances are assigned to static fields in 
> the org.ofbiz.minilang.method.ifops.IfRegexp class. So every thread will use 
> the same instance. No synchronization is done currently. Changing the fields 
> to be non-static will not work either, as SimpleMethods are cached. So all 
> calls to the same simple method use the same IfRegexp instance. 
> We fixed the problem by moving the instantiation of the Perl5Matcher and 
> Perl5Compiler to the exec() method in IfRegexp. 
> Other classes are most likely affected, too: 
> org.ofbiz.entity.condition.EntityComparisonOperator, 
> org.ofbiz.minilang.method.conditional.RegexpCondition, 
> org.ofbiz.minilang.operation.Regexp, 
> org.ofbiz.widget.menu.ModelMenuCondition$IfRegexp, 
> org.ofbiz.widget.screen.ModelScreenCondition$IfRegexp, 
> org.ofbiz.widget.tree.ModelTreeCondition$IfRegexp

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to