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