[ https://issues.apache.org/jira/browse/OFBIZ-4107?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Martin Kreidenweis updated OFBIZ-4107: -------------------------------------- Attachment: OFBIZ-4107-partial-fix.patch OFBIZ-4107-test.patch Test to reproduce the issue and our fix for org.ofbiz.minilang.method.ifops.IfRegexp > 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 > > > 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. - You can reply to this email to add a comment to the issue online.