domingo, 15 de novembro de 2015

Wildfly 10 Javascript Hello World in 2 minutes

We already talked about Nashorn, JavaFX and Javascript in this blog, but today I was surprised by the announcement that Widlfly 10 supports Javascript in the server side. I should have seen before, but only after a few months it was released I saw it on twitter!

After seeing the announcements samples, I thought I had to try it and surprisingly it took less than a few minutes to have my first script running. Here are the steps I had to follow:

(I am considering you already have Java 8 installed)

  • * Download Widlfly 10: I downloaded Widlfly 10.0.0.CR4 Application Server Distribution. See more in widlfly downloads page;
$ wget

  • Unzip it somewhere locally: 
$ unzip

  • Start it "quietly":
$ cd wildfly-10.0.0.CR4
& ./bin/ > /dev/null &

  • Create the application structure in the deployments directory
$ mkdir -p standalone/deployments/app.war/WEB-INF

  • Create the only descriptor needed in your application and declare the Javascript file on it (hello.js):
$ cat standalone/deployments/app.war/WEB-INF/undertow-scripts.conf 

  • Create the javascript file itself in the application root directory:
$ cat standalone/deployments/app.war/hello.js 
$undertow.onGet("/say-hello", function($exchange) {
return "Hello World!";

As you can see above, when you send a HTTP request using the GET method to the URL {host}/{app context}/say-hello it should return "Hello World!". We just have to provide the context and the function that will handle the requests.
  • Deploy the application itself:
$ touch standalone/deployments/app.war.dodeploy

  • Check if it was correctly deployed by checking the logs:
$ tail  -n 3 standalone/log/server.log 
2015-11-15 21:47:09,649 INFO  [] (MSC service thread 1-3) WFLYSRV0027: Starting deployment of "app.war" (runtime-name: "app.war")
2015-11-15 21:47:11,600 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 63) WFLYUT0021: Registered web context: /app
2015-11-15 21:47:11,654 INFO  [] (DeploymentScanner-threads - 2) WFLYSRV0010: Deployed "app.war" (runtime-name : "app.war")

  • Finally test the application using a web browser or curl:
$ curl http://localhost:8080/app/say-hello
Hello World!

Well, that's just the beginning. You can now using Java EE services in your javascript annotation as it is described in the release announcement

I guess you still did not notice the best part: you don't need to recompile your application anymore, you can simply edit the javascript and touch the app.war.dodeploy file and the changes will be immediately available (after, of course, a redeploy). Stuart Douglas pointed that you can configure hot deployment and no redeploy is needed. The hot deployment configuration is described in the announcement as well and to configure it I simply created the file undertow-external-mounts.conf with the directory where my javascripts are located:

$ echo /opt/jboss/WILDFLY/wildfly-10.0.0.CR4/standalone/deployments/app.war/  > standalone/deployments/app.war/WEB-INF/undertow-external-mounts.conf

Now if I edit any javascript file in the pointed directory I will see the changes immediately once I reach the endpoint.

If you still do not believe it is really simple, I have created a video for you!

Nenhum comentário:

Postar um comentário