Man today was one of those days, I am about to give up on Jruby. Don’t get me wrong I absolutely love the idea of Jruby, great way to sneak in Ruby into the enterprise. But I don’t think it is quite there yet.
If you want to use Jruby and Spring all you got do is include these dependencies into your pom file.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jruby</groupId>
<artifactId>jruby-complete</artifactId>
<version>1.0.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.1_3</version>
<scope>compile</scope>
</dependency>
And it works great,……………as long as you don’t have to use Hibernate. It just so happens that Jruby uses asm-2.2.3.jar file and Hibernate uses asm-1.5.3 and apparently the api is very different between these two versions, result is
java.lang.NoSuchMethodError: net.sf.cglib.core.Signature.(Ljava/lang/String;Lnet/sf/cglib/asm/Type;[Lnet/sf/cglib/asm/Type ; ) V
Man this is frustrating, I spent all day trying to work around the problem but no go. Now here is the kicker, it works perfectly fine in eclipse and I am using maven 2 ide .
I spoke with my colleague (Tim) about this and he thinks it works because of OSGI which allows different jar’s depend on different versions of other jars.
Hi,
the asm lib is a known issue with JRuby and Hibernate. This kind of trouble is in fact more a Java jar issue than a JRuby one and occurs frequently as soon as you integrate large frameworks together.
Still, I don’t really understand why you get the issue (or may be it’s only in Maven?). Indeed, JRuby works arround that issue by repackaging asm.jar using the ‘jarjar’ tool. Thus, if you look inside jruby-complete.jar you’ll see that it’s repackaged into jruby.objectweb.asm … which is different from the asm of the Hibernate distro.
So I don’t really understand why you are getting the problem since asm classes aren’t colliding anymore. Did you really use jruby-complete and jruby-complete only? Is it a Maven issue?
I think you should really be able to work arround the problem: lot’s of others successfully used Hibernate in JRuby. There is even the ActiveHibernate lib wrapping Hibernate object better into Ruby objects:
http://code.google.com/p/activehibernate/
Hope this helps. You might also get help from the JRuby mailing list.
Raphaë Valyi.