[ https://issues.apache.org/jira/browse/OFBIZ-4107?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13000348#comment-13000348 ]
Jacques Le Roux commented on OFBIZ-4107: ---------------------------------------- Dimitri, Could you explain the changes you did at a functional level? Thanks > 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 > Assignee: Sascha Rodekamp > Fix For: SVN trunk > > 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