快捷搜索:

Java交互管理工具——SecureJSH发布

本文已经宣布于InfoQ中文站(http://www.infoq.com/cn/news/2007/07/java-securejsh-publish),谢谢Complystill为我们供献了SJSH这个项目。

JavaEye上生动的开拓者Complystill(歆渊)近来宣布了自己的开源SecureJSH项目,供给了一个经由过程SSH交互进行Java利用开拓或者治理的对象。

在项目的先容中可以得知,SecureJSH与Ptyhon里面的ipython或者Ruby里面的irb异常相似。它们都容许交互式运行说话的代码,以方便跟踪或者调试利用。然则,Java与Ruby、Python不合,后者是动态脚本说话,它们生成具有解释履行的特征(留意:当然Python支持预编译,Ruby也将在YARV中开始支持,这里指它们的解释履行状态)。我们常见的Python和Ruby发行版本基础上都包括自己的说冥器(这也是它们的核心组件),然则Java是一种必要中心编译历程的说话,默认环境下它无法直接解释运行,也没有响应的说冥器。

那么SecureJSH是若何实现的呢?读者首先会想到JSR-223,这个API可以自己扩展脚本说话支持,比如rhino是 Javascript解释引擎。然则应用它难以实现交互操作,由于它必须输入一个相对完备的脚本才可以运行,这样会丢掉一部分交互性。SecureJSH 实际上是应用了JDK 6.0的新特点Java Compiler API(JSR-199),它供给了一组API来让法度榜样可以动态地造访Java编译器的接口,这样就可以应用Java编译器动态反省代码语法或者动态根据 Java源码天生可以履行的字节码。这种要领与ASM的编程直接天生字节码不合,它能直接将Java源码转换为字节码,XRuby的主力开拓者郑晔(网名 dreamhead)在他的Blog中这样比较了两种规划:

之前,刚刚在Blog中提到ASM,里面的代码天肇事情是经由过程直接写 字节码完成的。现在有了Compiler API,可以斟酌天生代码以Java源码的形式完成,然后,经由过程调用Compiler API对源码进行动态编译,这样,可以达到同直接写字节码类似的感化。应用Compiler API,肯定不如直接天生字节码来得高效,但对付不懂得JVM指令的人来说这大概是一种办理规划。

可见JSR-199不是最高效的字节码天生规划,然则更方便应用。Java Compiler API不是为了取代ASM这样的规划的,它的本意因此编程的要领实实际时编译及信息反馈。Java今朝的主要架构师之一Peter von der Ahé曾经在他的Blog对谁必要应用Java Compiler API这个问题做了如下解释:

99%的Java开拓者都不必要懂得Java Compiler API。只有少数的开拓者会直接利用这个API。然则IDE、Java EE利用法度榜样办事器、Maven或者Ant还有测试框架的开拓者却不一样,他们有一个合营点,就逝世必要调用编译器将Java源码转换为类文件(他们是这个 API的潜在用户)。

可见JSR-199的孕育发生主如果面向热支配或者增量编译这样的场合,然则SecureJSH的孕育发生扩展了Java Compiler API的利用处景,同时也增强了Java和JVM的交互性。Complystill这样先容了SecureJSH的利用处景和需求:

SecureJSH容许Java编写的办事器端利用法度榜样为治理员、客户、开拓者和客户端办事供给一个安然shell,这里可以交互性地让Java说话逐句运行。SecureJSH必要JDK 6.0或者JRE 6.0加JAVAC(在classpath中)来运行。SecureJSH的官方首页这样描述了它的主要特点:

安然:SecureJSH在办事器端实现了RFC-4251,SSH 2.0协议,支持公钥认证,这种要领方便安然(不必要每次输入密码)。

交互式履行:传 统的要领下,在运行Java源代码之前你必须将它们编译为字节码。然则应用SecureJSH,编译的历程是透明完成的,以是你只必要随意输入一些 Java表达式(就可以运行)。这意味着你可以应用你书写利用法度榜样时完全相同的语法,与最新的Java说话规范同步。你可以在你的Java项目源码和 SecureJSH终端里面拷贝&粘贴任何代码,都没有问题。

智能敕令识别,UNIX Shell风格:不 像JSR-223(Java Scripting Engin,Java脚本引擎)对Java说话的脚本的支持,在(Java脚本引擎)里面你必须将Java类的整个代码输入后才可以履行, secureJSH加倍智能和人道化,假如你输入了不完备的Java表达式,它会自动提示你进行多行的输入,然后将这些表达式包装到一个预先定义的类布局 中来履行。它是一个真正的Shell。

没有互相滋扰,最小化资本耗损:SecureJSH没有必要储存在JVM范围的静态资本,每一个实例只耗损很少量的资本(基于NIO实现,所有的SSH通讯都由一个线程处置惩罚)。你可以按照你的设法主见在一个JVM里面运行随意率性多个shell办事,包括Java利用法度榜样办事器的JVM。

作为一个开源项目,SecureJSH应用了ganymed的纯Java实现的SSH 2.0库,并应用Java NIO编写了收集办事,代码质量很高。据Comply Still先容,SecureJSH最初是为内存数据库TOB设计的,为这个面向工具数据库供给交互造访的接口,然则后来作者发明它可以被利用在很多场合,以是零丁开源宣布。作为Java开拓者,您可以从这里下载源码从中进修SSH 2.0、NIO收集办事、Java Compiler API的应用措施,信托必然会有所劳绩。

您可能还会对下面的文章感兴趣: