views:

54

answers:

1

I have a fairly sophisticated server-side application which frequently requires me to see what is going on with its internals to debug and fix problems.

I've therefore embedded a Beanshell instance, which I can telnet into (normally over a ssh tunnel), but I'm wondering if there is a better way.

A few limitations:

  • No readline support, which I can get around by using 'rlwrap' on telnet, but its not ideal
  • Tab-completion of variables and methods would be really nice, but I haven't found a way to do this
  • Pre-defining variables (to access stuff I need to access frequently) doesn't seem to work, I have to pre-define functions instead

All-in-all its rather clunky, although Beanshell has the nice advantage that its a super-set of Java, so nobody needs to learn another programming language to use it.

I'm wondering if others have any experience with facilitating remote debugging/administration via a scripting language (Beanshell or otherwise), perhaps someone has found a better approach.

+1  A: 

One of our application has a BeanShell interface that connects to our application over JMX with RMI+SSL.

You can indeed pre-define variables by calling Interpreter#set() before actually invoking the Interpreter.

Other than that, I agree with you on the "readline" like functionality. There is a project called java-readline (and BSH apparently ships with a plugin for it) that purports to provide functionality but I haven't investigated using it. It also requires a JNI library.

I've heard that people use Scala and Groovy to implement command line clients but as of now, I don't think the Scala API for embedding the interpreter is standardized yet. I also don't believe they support the "readline" features you're looking for.

Kevin