You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@samza.apache.org by Elias Levy <fe...@gmail.com> on 2015/09/24 01:13:16 UTC

JRuby port of Hello Samza

I am exploring Samza for some of our use cases.  As we have a lot of Ruby
developers, I decided to determine if we could use JRuby with Samza.  After
some work, I've been able to write Ruby jobs. To demonstrate the details,
I've ported the Hello Samza project to JRuby.  You can find the port at
https://github.com/eliaslevy/samza-hello-samza-jruby.

The port largely straightforward once the right pieces were found.  It
makes use of an existing Maven plug-in to compile the Ruby sources to Java
sources, which are then compiled as usual.  It also makes use of an
existing Maven plugin and the Maven proxy at rubygems-proxy.torquebox.org
to enable the use of Ruby gems within tasks.

That said, there were two complications.  A bug in JRuby generated bad Java
source when a Ruby class attempted to implement more than one interface.  I
fixed this in JRuby and the fix should be included in the next release.  In
the mean time, you'll have to use JRuby 1.7.23-SNAPSHOT.  As there appears
to be no JRuby Maven repository with the snapshot artifacts, you'll have to
build them yourself from the JRuby source and place them in your local repo.

The second complication is that JRuby won't let you inherit from a class
when you use the JRuby compiler.  That means you can't
subclass BlockingEnvelopeMap to pick up its poll implementation. One could
get around this by writing a bit of Java to implement a class that inherits
from BlockingEnvelopeMap.  Instead, I abused the FileReaderSystemConsumer
class by instantiating it and proxying calls to it from my SystemConsumer
to gain access to the BlockingEnvelopeMap implementation.

The main difference between the JRuby implementation of Hello Samza and the
original is that I replaced the Java IRC library with a Ruby gem to
demonstrate their use.

I hope this helps someone.

Elias

Re: JRuby port of Hello Samza

Posted by Yi Pan <ni...@gmail.com>.
Hi, Elias,

That sounds an awesome addition to the Samza eco-system! Do you have a plan
to open-source your JRuby version of Hello Samza job? It would be awesome!

Thanks a lot!

-Yi

On Wed, Sep 23, 2015 at 4:13 PM, Elias Levy <fe...@gmail.com>
wrote:

> I am exploring Samza for some of our use cases.  As we have a lot of Ruby
> developers, I decided to determine if we could use JRuby with Samza.  After
> some work, I've been able to write Ruby jobs. To demonstrate the details,
> I've ported the Hello Samza project to JRuby.  You can find the port at
> https://github.com/eliaslevy/samza-hello-samza-jruby.
>
> The port largely straightforward once the right pieces were found.  It
> makes use of an existing Maven plug-in to compile the Ruby sources to Java
> sources, which are then compiled as usual.  It also makes use of an
> existing Maven plugin and the Maven proxy at rubygems-proxy.torquebox.org
> to enable the use of Ruby gems within tasks.
>
> That said, there were two complications.  A bug in JRuby generated bad Java
> source when a Ruby class attempted to implement more than one interface.  I
> fixed this in JRuby and the fix should be included in the next release.  In
> the mean time, you'll have to use JRuby 1.7.23-SNAPSHOT.  As there appears
> to be no JRuby Maven repository with the snapshot artifacts, you'll have to
> build them yourself from the JRuby source and place them in your local
> repo.
>
> The second complication is that JRuby won't let you inherit from a class
> when you use the JRuby compiler.  That means you can't
> subclass BlockingEnvelopeMap to pick up its poll implementation. One could
> get around this by writing a bit of Java to implement a class that inherits
> from BlockingEnvelopeMap.  Instead, I abused the FileReaderSystemConsumer
> class by instantiating it and proxying calls to it from my SystemConsumer
> to gain access to the BlockingEnvelopeMap implementation.
>
> The main difference between the JRuby implementation of Hello Samza and the
> original is that I replaced the Java IRC library with a Ruby gem to
> demonstrate their use.
>
> I hope this helps someone.
>
> Elias
>