Tobias, Would you send some more detailed code snippets (or gist link)?
Cheers, -- Jim On 2013-07-17, at 1:35 PM, Tobias Schlottke <[email protected]> wrote: > Hi Jim, > > sounds pretty reasonable to me. > I still have the problem that I want to return something in run() though, so > this renders a bit more complicated. > I understand that you have to check security once but I don't really > understand why in my case because the object should not have changed. > Do you have an Idea why the ScriptObjects are not equal? > > Best, > > Tobias > > > > Am 17.07.2013 um 18:23 schrieb Jim Laskey (Oracle) <[email protected]>: > >> Tobias, >> >> We'll look into removing the doPrivileged on first entry (security is >> checked elsewhere), but we need to do a security assessment before >> proceeding. >> >> That said, I would recommend as a best practice to use a per-thread >> JavaScript loop instead, to avoid such issues. I generally use a >> java.util.concurrent.LinkedBlockingQueue to "feed" the loop from other >> threads. >> >> Cheers, >> >> -- Jim >> >> >> >> >> On 2013-07-17, at 12:37 PM, Tobias Schlottke <[email protected]> >> wrote: >> >>> Hi there, >>> >>> I've built a small case where I evaluate a compiled script equipped with a >>> custom bindings. >>> The script is equipped with some variables and and compiled like this: >>> >>> engine.put("shopId", "test"); >>> runner = (Bindings) >>> engine.compile(ad.getCondition_script().getCode()).eval(); >>> >>> afterwards, I execute the "run" method on the object returned by eval() >>> like this: >>> >>> return (MyCustomObject) engine.invokeMethod(runner, "run", attr); >>> >>> the run method does local compilations but does not change anything so >>> basically the runner is immutable. >>> I access it from various threads. >>> >>> When profiling the code I see a lot of time spent in >>> java.security.AccessController.doPrivileged() which is invoked in >>> setNashornGlobal() if the globals changed. >>> I'm a bit unsure what changed globals really mean because in my case >>> nothing (either context nor bindings) changed and I wonder if it is >>> necessary. >>> >>> Best, >>> >>> Tobias >> >
