14

I've been reading about Rhino as a useful way to implement JavaScript inside my Java code.

After reading for a while, searching in google and here, I couldn't find a real reason for which I would use JavaScript inside Java.

Could you point some real world advantages you find on using Rhino for a regular Java application?

Santi
  • 4,428
  • 4
  • 24
  • 28
  • In addition to what others said, game development is a great example. Having external scripts is a very common practice in game development for a number of reasons, and if you're writing a game in Java and want to use JavaScript as your scripting language, Rhino is great. – Josh1billion Jan 02 '15 at 21:46

5 Answers5

15

Note that since Java 6, the scripting API is in the standard Java library - see the documentation of the package javax.script. The API in javax.script is an adapted version of Rhino. The scripting API supports not only JavaScript, but many other scripting languages.

See Java Scripting Programmer's Guide

The front page there mentions some reasons you might want to use scripting:

  • Application extension/customization: You can "externalize" parts of your application - like configuration scripts, business logic/rules and math expressions for financial applications.
  • "Command line" shells for applications -for debugging, runtime/deploy time configuration etc. Most applications have a web-based GUI configuaration tool these days. But sysadmins/deployers frequently prefer command line tools. Instead of inventing ad-hoc scripting language for that purpose, a "standard" scripting language can be used.

An example: You can script Oracle Weblogic using Python scripts, for example to configure your application server domain, to start or stop the server and to do other administration tasks.

Jesper
  • 202,709
  • 46
  • 318
  • 350
11
  1. Processing XML with Rhino and E4X is a joy compared to most of the Java XML APIs
  2. You have existing JavaScript that "just works" and you don't want to re-write it. This can happen if you have some calculation or processing happening on the client side and move it to the server.
  3. All kinds of neat caching and code loading tricks.
  4. Your problem is better solved by a more dynamic language then Java.
  5. List comprehensions ;)
JonMR
  • 586
  • 3
  • 18
  • 1
    You're right. I'd use Jython instead of JavaScript for covering most of the points you've given. But your probably a java guy wouldn't. – Santi Oct 05 '09 at 00:47
6

The benefit of embedding a script language like javascript into your software is that you can offer others a way to write plugins for your software without giving the source code away.

A reason to write the whole app in another language is that you are able to write an app for a company which deploys it in their Java EE environment without having to learn Java.

pillingworth
  • 3,238
  • 2
  • 24
  • 49
Martin
  • 719
  • 4
  • 11
  • 2
    To enable others to plug into your app without giving away the source code, all you need is a package with some interfaces. – Bart van Heukelom Nov 22 '10 at 13:00
  • IBM Maximo 7.5 + does this (Rhino or Jython), and the added benefit is that you avoid customizing their software, which makes upgrades smoother. – Bratch Jan 07 '16 at 22:54
4

We use JS (via Rhino) for a DSL in one of our products. It isn't a great DSL, but that is a fault of how we use JS, rather than Rhino.

user1545858
  • 725
  • 4
  • 21
  • I'm all for short and sweet, but it's not clear to me what DSL refers to in this context. Would you care to enlighten me? – WynandB Feb 20 '13 at 23:52
  • 1
    DSL = Domain specific language. Basically, we needed a language that allowed people to express rules. Javascript is good because it is easy to setup what the user can and cannot do by specifying what is in the global context. No includes required. – user1545858 Feb 22 '13 at 05:45
0

If you considering to .Net also, I suggests to get along with Rhino.

Besides Java enviroments, rhino is one of the best performance interpreter on .NET environment (using IKVM). On the other hands, nashorn is very slow on .net.

Porting your own Rhino project to .NET is not so difficult.