Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

Menu method under JRuby does not appear to work

#92

The menu method of Adhearsion does not appear to work under JRuby, as the menu method never passes to link to evaluate the selection. If I run the same dialplan under MRI, everything works, but once moving to JRuby it does not.

At first I thought it might be related to this patch, but does not appear to be:

http://github.com/jicksta/adhearsion/commit/c694bc97057523d9f2f0b93...

Reported by jsgoecke · December 2nd, 2009 @ 01:14 PM

State: resolved
Milestone: 0.8.5
Assigned to: Ben Klang Ben Klang

Activity

  1. dilshodm
    dilshodm
    • Tag set to jruby menu jump_to

    Hi,

    The problem exists with jump_to command which is used by menu.
    I did some investigation and see in commands.rb in def jump_to there is following:

    raise Adhearsion::VoIP::DSL::Dialplan::ContextNotFoundException unless context.kind_of?(Adhearsion::DialPlan::DialplanContextProc)

    I check under jruby and see that context.class == 'Proc', but not 'Adhearsion::DialPlan::DialplanContextProc'
    So, as a temporary hack we can use the following:

    raise Adhearsion::VoIP::DSL::Dialplan::ContextNotFoundException unless context.kind_of?(Proc)

    instead of above.

    January 5th, 2010 @ 07:19 PM

  2. Ben Klang
    Ben Klang
    • Tag changed from jruby menu jump_to to jruby menu jump_to, dsl, menu
    • Milestone order changed from 0 to 0

    August 7th, 2010 @ 01:55 PM

  3. Ben Klang
    Ben Klang
    • Milestone set to 0.8.5
    • Assigned user changed from Jay Phillips to Ben Klang
    • Milestone order changed from 3033 to 0

    August 7th, 2010 @ 01:55 PM

  4. Ben Klang
    Ben Klang
    • State changed from new to open

    I have traced this down to what I believe is a bug in JRuby. As dilshodm observed, the class is incorrectly being reported as a Proc, instead of Adhearsion::Dialplan::DialplanContextProc. I did a couple of quick tests in JRuby:

    module Adhearsion
      class Foo
    
        def self.new_bar(&block)
          Bar.new(&block)
        end
    
        class Bar < Proc
          def initialize(&block)
            super(&block)
          end
        end
      end
    end
    

    With the above code I tried two different ways of getting a Adhearsion::Foo::Bar object:

    x = Adhearsion::Foo::Bar.new { puts "x" }
    puts x.class # => Adhearsion::Foo::Bar
    
    x = Adhearsion::Foo.new_bar { puts "x" }
    puts x.class # => Proc
    

    I will file a bug with the JRuby developers. In the meantime I will find a safe workaround to re-enable the menu DSL under JRuby.

    August 19th, 2010 @ 05:28 PM

  5. Ben Klang
    Ben Klang
    • Tag changed from jruby menu jump_to, dsl, menu to dsl, jruby, menu

    Issue reported to JRuby here:
    http://jira.codehaus.org/browse/JRUBY-5026

    August 19th, 2010 @ 05:41 PM

  6. Ben Klang
    Ben Klang
    • State changed from open to fixcommitted

    A workaround has been committed. This effectively addresses the issue.

    http://github.com/adhearsion/adhearsion/commit/98fd9530a9a7cd9ef236...

    August 19th, 2010 @ 06:52 PM

  7. Ben Klang
    Ben Klang
    • State changed from fixcommitted to open

    The problem is that JRuby is actually not instantiating the class correctly. Because of this the workaround I committed only fixes part of the problem. Using the +context syntax to include another context will still not work in JRuby.

    JRuby has fixed the issue and it will appear in 1.6.0. Until then Menu will only have limited functionality under JRuby. This needs to be documented.

    August 24th, 2010 @ 01:53 PM

  8. Ben Klang
    Ben Klang
    • State changed from open to resolved

    Charles Nutter has noted in the JRuby bug report that the DialPlanProc class will not properly get initialized. The workaround I committed will make most of the menu work, but I do not consider adding more workarounds for this bug in JRuby to be feasible. A check has been added to the top of dial_plan.rb that will warn users who have an affected version of JRuby. The bugfix in JRuby is currently scheduled to be a part of the 1.6.0 release.

    Based on my testing, the basic menu functionality will work. The only thing I see that will not work is the "+context" functionality to jump from one context to another.

    my_context {
      +other_context
    }
    
    other_context {
      play "demo-congrats
    }
    

    A call into "my_context" will result in this type of exception:

    ERROR agi: NoMethodError: undefined method `+@' for #<Proc:0x734d246@/Users/bklang/src/ahn_app/dialplan.rb:33>
    

    August 24th, 2010 @ 04:20 PM

Please Sign in or create a free account to add a new ticket.

With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.