Hello! Following the example in the spymemcached module, I have a static definer as so:
public static RubyClass defineDataBag(Ruby runtime) { RubyClass result = runtime.defineClass("DataBag",runtime.getObject(), DATABAG_ALLOCATOR); result.defineAnnotatedMethods(RubyDataBag.class); RubyClass rubybagiterator = result.defineClassUnder("BagIterator", runtime.getObject(), ObjectAllocator.NOT_ALLOCATABLE_ALLOCATOR); result.defineAnnotatedMethods(RubyBagIterator.class); return result; } which I invoke from a class that extends Library, as so: @Override public void load(Ruby runtime, boolean wrap) throws IOException { this.ruby=runtime; RubyDataBag.defineDataBag(ruby); } In jruby: require 'jruby' => true ree-1.8.7-2010.02 :002 > require 'pig.jar' => true ree-1.8.7-2010.02 :003 > org.apache.pig.scripting.jruby.PigLibrary.new.load(JRuby.runtime,false) It is dying on the "defineAnnotatedMethods," saying that there is "Unknown coercion target: interface org.apache.pig.data.DataBag" I don't know what this means! Looking at the JRuby source (RubyBigDecimal for example), there are plenty of classes that take java types are arguments and so on. My class basically just wraps a DataBag, and makes it clean to manipulate one from Ruby. I can actually instantiate it from Ruby as so: org.apache.pig.scripting.jruby.RubyDataBag.new(JRuby.runtime,JRuby.runtime.getObject) but since none of the annotations worked, I can't really do anything. I continue to appreciate your help in this. Oh, and I found a page that explains some of the stuff on @JRubyMethod, but it's not linked to from anywhere (that I could see): https://github.com/jruby/jruby/wiki/JRubyMethod_Signatures stack trace of the error follows: org.apache.pig.scripting.jruby.PigLibrary.new.load(JRuby.runtime,false) java.lang.RuntimeException: Unknown coercion target: interface org.apache.pig.data.DataBag at org.jruby.internal.runtime.methods.InvocationMethodFactory.loadArgumentWithCast(InvocationMethodFactory.java:1242) at org.jruby.internal.runtime.methods.InvocationMethodFactory.loadArguments(InvocationMethodFactory.java:1222) at org.jruby.internal.runtime.methods.InvocationMethodFactory.createAnnotatedMethodInvocation(InvocationMethodFactory.java:1503) at org.jruby.internal.runtime.methods.InvocationMethodFactory.addAnnotatedMethodInvoker(InvocationMethodFactory.java:1451) at org.jruby.internal.runtime.methods.InvocationMethodFactory.getAnnotatedMethodClass(InvocationMethodFactory.java:790) at org.jruby.internal.runtime.methods.InvocationMethodFactory.getAnnotatedMethod(InvocationMethodFactory.java:810) at org.jruby.RubyModule.defineAnnotatedMethod(RubyModule.java:692) at org.jruby.RubyModule.defineAnnotatedMethod(RubyModule.java:660) at org.jruby.anno.TypePopulator$DefaultTypePopulator.populate(TypePopulator.java:75) at org.jruby.RubyModule.defineAnnotatedMethodsIndividually(RubyModule.java:654) at org.jruby.RubyModule.defineAnnotatedMethods(RubyModule.java:542) at org.apache.pig.scripting.jruby.RubyDataBag.defineDataBag(RubyDataBag.java:48) at org.apache.pig.scripting.jruby.PigLibrary.load(PigLibrary.java:17) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jruby.javasupport.JavaMethod.invokeDirectWithExceptionHandling(JavaMethod.java:542) at org.jruby.javasupport.JavaMethod.invokeDirect(JavaMethod.java:392) at org.jruby.java.invokers.InstanceMethodInvoker.call(InstanceMethodInvoker.java:69) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:203) at org.jruby.ast.CallTwoArgNode.interpret(CallTwoArgNode.java:59) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.RootNode.interpret(RootNode.java:129) at org.jruby.evaluator.ASTInterpreter.INTERPRET_EVAL(ASTInterpreter.java:96) at org.jruby.evaluator.ASTInterpreter.evalWithBinding(ASTInterpreter.java:161) at org.jruby.RubyKernel.evalCommon(RubyKernel.java:1135) at org.jruby.RubyKernel.eval(RubyKernel.java:1088) at org.jruby.RubyKernel$s$0$3$eval.call(RubyKernel$s$0$3$eval.gen:65535) at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:181) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:69) at org.jruby.ast.FCallManyArgsNode.interpret(FCallManyArgsNode.java:60) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:120) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:134) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:154) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:69) at org.jruby.ast.CallManyArgsNode.interpret(CallManyArgsNode.java:59) at org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:233) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:195) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:201) at org.jruby.ast.CallTwoArgNode.interpret(CallTwoArgNode.java:59) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.ast.RescueNode.executeBody(RescueNode.java:216) at org.jruby.ast.RescueNode.interpretWithJavaExceptions(RescueNode.java:120) at org.jruby.ast.RescueNode.interpret(RescueNode.java:110) at org.jruby.ast.BeginNode.interpret(BeginNode.java:83) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:112) at org.jruby.runtime.InterpretedBlock.evalBlockBody(InterpretedBlock.java:374) at org.jruby.runtime.InterpretedBlock.yield(InterpretedBlock.java:295) at org.jruby.runtime.InterpretedBlock.yieldSpecific(InterpretedBlock.java:229) at org.jruby.runtime.Block.yieldSpecific(Block.java:99) at org.jruby.ast.ZYieldNode.interpret(ZYieldNode.java:25) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.EnsureNode.interpret(EnsureNode.java:96) at org.jruby.ast.BeginNode.interpret(BeginNode.java:83) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:212) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:187) at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:176) at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:187) at org.jruby.ast.FCallOneArgBlockNode.interpret(FCallOneArgBlockNode.java:34) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:112) at org.jruby.runtime.InterpretedBlock.evalBlockBody(InterpretedBlock.java:374) at org.jruby.runtime.InterpretedBlock.yieldSpecific(InterpretedBlock.java:260) at org.jruby.runtime.Block.yieldSpecific(Block.java:117) at org.jruby.ast.YieldTwoNode.interpret(YieldTwoNode.java:31) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.IfNode.interpret(IfNode.java:117) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.ast.RescueNode.executeBody(RescueNode.java:216) at org.jruby.ast.RescueNode.interpretWithJavaExceptions(RescueNode.java:120) at org.jruby.ast.RescueNode.interpret(RescueNode.java:110) at org.jruby.ast.BeginNode.interpret(BeginNode.java:83) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:112) at org.jruby.runtime.InterpretedBlock.evalBlockBody(InterpretedBlock.java:374) at org.jruby.runtime.InterpretedBlock.yield(InterpretedBlock.java:295) at org.jruby.runtime.InterpretedBlock.yieldSpecific(InterpretedBlock.java:229) at org.jruby.runtime.Block.yieldSpecific(Block.java:99) at org.jruby.RubyKernel.loop(RubyKernel.java:1419) at org.jruby.RubyKernel$s$0$0$loop.call(RubyKernel$s$0$0$loop.gen:65535) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:302) at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:144) at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:153) at org.jruby.ast.FCallNoArgBlockNode.interpret(FCallNoArgBlockNode.java:32) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:112) at org.jruby.runtime.InterpretedBlock.evalBlockBody(InterpretedBlock.java:374) at org.jruby.runtime.InterpretedBlock.yield(InterpretedBlock.java:347) at org.jruby.runtime.InterpretedBlock.yield(InterpretedBlock.java:304) at org.jruby.runtime.Block.yield(Block.java:130) at org.jruby.RubyContinuation.enter(RubyContinuation.java:106) at org.jruby.RubyKernel.rbCatch(RubyKernel.java:1191) at org.jruby.RubyKernel$s$1$0$rbCatch.call(RubyKernel$s$1$0$rbCatch.gen:65535) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:322) at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:178) at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:187) at org.jruby.ast.FCallOneArgBlockNode.interpret(FCallOneArgBlockNode.java:34) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:169) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:171) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:302) at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:144) at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:153) at org.jruby.ast.CallNoArgBlockNode.interpret(CallNoArgBlockNode.java:64) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:147) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:163) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:292) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:135) at org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:63) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:112) at org.jruby.runtime.InterpretedBlock.evalBlockBody(InterpretedBlock.java:374) at org.jruby.runtime.InterpretedBlock.yield(InterpretedBlock.java:347) at org.jruby.runtime.InterpretedBlock.yield(InterpretedBlock.java:304) at org.jruby.runtime.Block.yield(Block.java:130) at org.jruby.RubyContinuation.enter(RubyContinuation.java:106) at org.jruby.RubyKernel.rbCatch(RubyKernel.java:1191) at org.jruby.RubyKernel$s$1$0$rbCatch.call(RubyKernel$s$1$0$rbCatch.gen:65535) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:322) at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:178) at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:187) at org.jruby.ast.FCallOneArgBlockNode.interpret(FCallOneArgBlockNode.java:34) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.EnsureNode.interpret(EnsureNode.java:96) at org.jruby.ast.BeginNode.interpret(BeginNode.java:83) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:190) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:179) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:312) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:169) at Library.Frameworks.JRuby_dot_framework.Versions.$1_dot_6_dot_4.bin.jirb.__file__(/Library/Frameworks/JRuby.framework/Versions/1.6.4/bin/jirb:13) at Library.Frameworks.JRuby_dot_framework.Versions.$1_dot_6_dot_4.bin.jirb.load(/Library/Frameworks/JRuby.framework/Versions/1.6.4/bin/jirb) at org.jruby.Ruby.runScript(Ruby.java:679) at org.jruby.Ruby.runScript(Ruby.java:672) at org.jruby.Ruby.runNormally(Ruby.java:579) at org.jruby.Ruby.runFromMain(Ruby.java:428) at org.jruby.Main.doRunFromMain(Main.java:278) at org.jruby.Main.internalRun(Main.java:198) at org.jruby.Main.run(Main.java:164) at org.jruby.Main.run(Main.java:148) at org.jruby.Main.main(Main.java:128) LoadError: Unknown coercion target: interface org.apache.pig.data.DataBag from (irb):3:in `evaluate' from org/jruby/RubyKernel.java:1088:in `eval' from /Library/Frameworks/JRuby.framework/Versions/1.6.4/lib/ruby/1.8/irb.rb:158:in `eval_input' from /Library/Frameworks/JRuby.framework/Versions/1.6.4/lib/ruby/1.8/irb.rb:271:in `signal_status' from /Library/Frameworks/JRuby.framework/Versions/1.6.4/lib/ruby/1.8/irb.rb:155:in `eval_input' from org/jruby/RubyKernel.java:1419:in `loop' from org/jruby/RubyKernel.java:1191:in `catch' from /Library/Frameworks/JRuby.framework/Versions/1.6.4/lib/ruby/1.8/irb.rb:154:in `eval_input' from /Library/Frameworks/JRuby.framework/Versions/1.6.4/lib/ruby/1.8/irb.rb:71:in `start' from org/jruby/RubyKernel.java:1191:in `catch' from /Library/Frameworks/JRuby.framework/Versions/1.6.4/lib/ruby/1.8/irb.rb:70:in `start' from /Library/Frameworks/JRuby.framework/Versions/1.6.4/bin/jirb:13:in `(root)'