commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Henri Biestro (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (JEXL-194) synchronize on iterableValue in foreach statement
Date Fri, 13 May 2016 09:28:12 GMT

    [ https://issues.apache.org/jira/browse/JEXL-194?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15282561#comment-15282561
] 

Henri Biestro commented on JEXL-194:
------------------------------------

As a temporary workaround, you already can run code under a 'synchronized' monitor as in :
{code}

    public static class Synchronizer extends MapContext {
        private final JexlContext context;

        public Synchronizer(JexlContext ctxt) {
            this.context =  ctxt;
        }
        public Object call(Object var, JexlScript script) {
            String[] parms = script.getParameters();
            boolean varisarg = parms != null && parms.length == 1;
            if (var == null) {
                return varisarg? script.execute(context, var) : script.execute(context);
            } else {
                synchronized (var) {
                    return varisarg? script.execute(context, var) : script.execute(context);
                }
            }
        }
    }

    @Test
    public void test196() throws Exception {
        Map<String, Object> ns = new TreeMap<String, Object>();
        ns.put("synchronized", Synchronizer.class);
        JexlContext jc = new MapContext();
        JexlEngine jexl = new JexlBuilder().namespaces(ns).create();
        JexlScript js0 = jexl.createScript("synchronized:call(x, (y)->{y.size()})", "x");
        Object size = js0.execute(jc, "foobar");
        Assert.assertEquals(6, size);
    }
{code}

> synchronize on iterableValue in foreach statement
> -------------------------------------------------
>
>                 Key: JEXL-194
>                 URL: https://issues.apache.org/jira/browse/JEXL-194
>             Project: Commons JEXL
>          Issue Type: Improvement
>    Affects Versions: 3.0
>            Reporter: Dmitri Blinov
>            Assignee: Henri Biestro
>            Priority: Minor
>
> Since it is a requirement to synchronize on simple Collections and synchronized Collections
while iterating over them and since jexl has no instrument to control synchronization in script,
I think its reasonable to implement synchronization in jexl itself on iterableValue. In case
of concurrent collections it will possibly block other threads only if they are synchronizing
on those collections themselves, which will be complementary to required synchronization in
jexl.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message