我有一个相当复杂的服务器端应用程序,它经常要求我查看其内部发生了什么,以调试和修复问题。
因此,我嵌入了一个 Beanshell 实例,我可以通过 telnet 进入该实例(通常通过 ssh 隧道),但我想知道是否有更好的方法。
一些限制:
- 没有 readline 支持,我可以通过在 telnet 上使用“rlwrap”来解决这个问题,但这并不理想
- 变量和方法的制表符补全确实很好,但我还没有找到实现此目的的方法
- 预定义变量(以访问我需要经常访问的内容)似乎不起作用,我必须预定义函数
总而言之,它相当笨重,尽管 Beanshell 有一个很好的优势,即它是 Java 的超集,因此没有人需要学习另一种编程语言来使用它。
我想知道其他人是否有通过脚本语言(Beanshell 或其他语言)促进远程调试/管理的经验,也许有人找到了更好的方法。
最佳答案
我们的一个应用程序有一个 BeanShell 接口(interface),它通过 RMI+SSL 通过 JMX 连接到我们的应用程序。
您确实可以通过调用 Interpreter#set() 来预定义变量在实际调用解释器之前。
除此之外,我同意您关于“阅读线”之类的功能的看法。有一个项目叫java-readline (BSH 显然附带了一个插件),旨在提供功能,但我还没有研究过如何使用它。它还需要 JNI 库。
我听说人们使用 Scala 和 Groovy 来实现命令行客户端,但到目前为止,我认为用于嵌入解释器的 Scala API 尚未标准化。我也不相信他们支持您正在寻找的“readline”功能。
关于java - 关于嵌入 Java 脚本语言以进行调试/远程管理的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1572985/