nashorn-polyfill

WebJar for nashorn-polyfill

License

License

MIT
Categories

Categories

JavaScript Languages
GroupId

GroupId

org.webjars.npm
ArtifactId

ArtifactId

nashorn-polyfill
Last Version

Last Version

0.2.4
Release Date

Release Date

Type

Type

jar
Description

Description

nashorn-polyfill
WebJar for nashorn-polyfill
Project URL

Project URL

http://webjars.org
Source Code Management

Source Code Management

https://github.com/shendepu/nashorn-polyfill

Download nashorn-polyfill

How to add to project

<!-- https://jarcasting.com/artifacts/org.webjars.npm/nashorn-polyfill/ -->
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>nashorn-polyfill</artifactId>
    <version>0.2.4</version>
</dependency>
// https://jarcasting.com/artifacts/org.webjars.npm/nashorn-polyfill/
implementation 'org.webjars.npm:nashorn-polyfill:0.2.4'
// https://jarcasting.com/artifacts/org.webjars.npm/nashorn-polyfill/
implementation ("org.webjars.npm:nashorn-polyfill:0.2.4")
'org.webjars.npm:nashorn-polyfill:jar:0.2.4'
<dependency org="org.webjars.npm" name="nashorn-polyfill" rev="0.2.4">
  <artifact name="nashorn-polyfill" type="jar" />
</dependency>
@Grapes(
@Grab(group='org.webjars.npm', module='nashorn-polyfill', version='0.2.4')
)
libraryDependencies += "org.webjars.npm" % "nashorn-polyfill" % "0.2.4"
[org.webjars.npm/nashorn-polyfill "0.2.4"]

Dependencies

compile (3)

Group / Artifact Type Version
org.webjars.npm : core-js jar [2.4.1,3)
org.webjars.npm : url-search-params jar [0.6.1,0.7)
org.webjars.npm : webpack jar 2.1.0-beta.25

Project Modules

There are no modules declared in this project.

Nashorn Polyfill

This is the polyfill for Nashorn:

Missing polyfill:

  • FormData

Variable injected in ScriptContext

Required

__NASHORN_POLYFILL_TIMER__

instance of ScheduledExecutorService.

Sample:

static ScheduledExecutorService globalScheduledThreadPool = Executors.newScheduledThreadPool(20);

// Injection of __NASHORN_POLYFILL_TIMER__ in ScriptContext
sc.setAttribute("__NASHORN_POLYFILL_TIMER__", globalScheduledThreadPool, ScriptContext.ENGINE_SCOPE);

Optional

__HTTP_SERVLET_REQUEST__

The HttpServletRequest instance. If this variable injected, XmlHttpRequest polyfill will copy Cookie and Authorization headers of HttpServletRequest, so that AJAX call from Javascript application will act like user session fired from browser.

If more headers want to be copied, it is easy to customize it in xml-http-request-polyfill line 92.

Required Java Jars:

gradle

compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.2'
compile group: 'org.apache.httpcomponents', name: 'httpasyncclient', version: '4.1.2'
compile group: 'org.apache.commons', name: 'commons-pool2', version: '2.4.2'

Important Notes

In https://github.com/morungos/java-xmlhttprequest, it uses Timer to run setTimeout and setInterval task, but they are run in a separate thread of the Timer creates that is different with the main JavaScript thread.

This implementation uses ScheduledExecutorService instead of Timer so the threads for task scheduling can be reused instead of each JavasScript thread create a Timer thread when using Timer.

And most important thing is this adds global.nashornEventLoop and scheduled tasks only add function callback object in eventLoop (ArrayQueue), and it is main JavaScript thread to run these function callback by calling global.nashornEventLoop.process(); at the end of JavaScript Application. It is just like browser or NodeJS that event loop is called when the main stack is cleared.

When runs on server with Promise, remember to call nashornEventLoop.process() when waiting for Promise by Thread.sleep(), and call nashornEventLoop.reset() if server thread (e.g. Servlet thread) decides to be timeout so that eventLoop will be clean for next request.

Link

Product Demo: This is demo of a product with react, react-router, apollo (GraphQL client)

Moqui React SSR Demo:

This demo shows how react app is rendered on server side. The code playing with Nashorn Script Engine sits in Moqui React SSR which is easy to extract to be used in any Java application.

License

MIT

Versions

Version
0.2.4