Forum: JRuby JRuby as scripting language inside Java application?

25d5cad1444a95937949486250628f78?d=identicon&s=25 Alan DW (alan47)
on 2014-05-11 20:39
Hello everyone,

I'm currently developing a Java application and I know a bit of Ruby.
I've stumbled across JRuby when I was looking for a lightweight
scripting language.

In my application, the end-user should be able to attach small scripts
at certain points in the application. On the Java side, the script
should be stored as a simple string (containing valid Ruby syntax) and
then be executed at runtime.

Now I do have some questions here...

1) Is the above scenario possible with JRuby or am I using the wrong
tool?
2) How does JRuby inter-operate with Java, i.e. is it capable of calling
Java methods, access the current Java call stack (i.e. local variables,
static fields), work with Java data structures / classes...? Will this
work at all?


I've never integrated a scripting language in any of my applications so
far, sorry if the questions sound a little "noobish". I'm not even sure
if JRuby is the right tool for this job. I've read most of the contents
of the JRuby homepage, but I couldn't find an answer to those questions.


I'd be grateful for any advice!


Alan
486ca04f06d968004643ce5b47376ded?d=identicon&s=25 Keith B. (keith_b)
on 2014-05-11 23:10
(Received via mailing list)
Alan -

You can certainly call JRuby from Java.  The Using JRuby book has a
chapter on how to do this (http://pragprog.com/book/jruby/using-jruby).
If you'll be do any significant amount of work with JRuby, I recommend
this book.

Basically, you create a scripting container, set it up with context
(variables, load paths, etc.), then tell it to run your script.  The
Ruby code calls Java methods pretty seamlessly, except for some obscure
exceptions, such as specifying a method signature where the Java method
is overloaded.

I think that other than the context you explicitly pass to the scripting
container, your Ruby code will have no knowledge of what the Java app is
doing.

- Keith

Keith R. Bennett
http://about.me/keithrbennett
25d5cad1444a95937949486250628f78?d=identicon&s=25 Alan DW (alan47)
on 2014-05-11 23:39
Hi Keith,

thank you for your response and the link in the book, I'm going to take
a look at it! JRuby does indeed sound *very* promising.

Thanks!


Alan
B2625ae7fa60dce7697771ca1ef57444?d=identicon&s=25 Paweł Wielgus (Guest)
on 2014-05-12 01:35
(Received via mailing list)
Hi all,
just as a follow up to the Keith answear,
i'm using this scenario in my apps for years now,
it's based on jsr-223 and scripting engine.
But if i remember correctly
there is something called redbridge [1]
which gives you way more control.

[1] - https://github.com/jruby/jruby/wiki/RedBridge

Best greetings,
Paweł Wielgus.

ps. is it possible you can share what for will you use it?
i'm asking because after i switched one of my apps
from in-memory database (prevayler) into relational database
the need for this scripting engine was gone for good,
so it would be quite interesting what other bussines need can be
acomplished by this solution.




2014-05-11 23:39 GMT+02:00 Alan DW <lists@ruby-forum.com>:
25d5cad1444a95937949486250628f78?d=identicon&s=25 Alan DW (alan47)
on 2014-05-12 15:12
> But if i remember correctly
> there is something called redbridge [1]
> which gives you way more control.
>
> [1] - https://github.com/jruby/jruby/wiki/RedBridge

I will take a look at it, thanks :)


> ps. is it possible you can share what for will you use it?
> i'm asking because after i switched one of my apps
> from in-memory database (prevayler) into relational database
> the need for this scripting engine was gone for good,
> so it would be quite interesting what other bussines need can be
> acomplished by this solution.


Well, I guess it's not strictly "business". What I want to do is to take
libGDX, a rendering engine for Java built on top of LWJGL, and build a
level editor for it. In order to allow users to define events that
should happen in-game, a lightweight scripting language seems apropriate
to me. At least in cases which are too small or too simple to create a
full-fledged Java extension.
7ad5f543b9592aa423771338c057d7e5?d=identicon&s=25 Gergely Nagy (Guest)
on 2014-05-12 21:14
(Received via mailing list)
>
> > [1] - https://github.com/jruby/jruby/wiki/RedBridge
> I will take a look at it, thanks :)


As you can see there, RedBridge is simply org.jruby.embed these days,
which
embedded itself too:) into Jruby.

AFAIK there is nothing extra to be installed for running Ruby inside a
java
App - is there?
BTW, I used to use JSR223, but realised it wasn't worth the hassle for
me.
The core embed API is simpler, cleaner and more powerful - unless you
need
to support other languages so you are ready to take other kinds of
compromises.
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.