<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Tin's Blog

    You are coming a long way, baby~Thinking, feeling, memory...

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      128 隨筆 :: 0 文章 :: 221 評論 :: 0 Trackbacks

    本文已經(jīng)發(fā)布于InfoQ中文站(http://www.infoq.com/cn/news/2007/07/java-securejsh-publish),感謝Complystill為我們貢獻了SJSH這個項目。

    JavaEye上活躍的開發(fā)者Complystill(歆淵)最近發(fā)布了自己的開源SecureJSH項目,提供了一個通過SSH交互進行Java應(yīng)用開發(fā)或者管理的工具。

    在項目的介紹中可以得知,SecureJSH與Ptyhon里面的ipython或者Ruby里面的irb非常相似。它們都允許交互式運行語言的代 碼,以方便跟蹤或者調(diào)試應(yīng)用。但是,Java與Ruby、Python不同,后者是動態(tài)腳本語言,它們天生具有解釋執(zhí)行的特點(注意:當(dāng)然Python支 持預(yù)編譯,Ruby也將在YARV中開始支持,這里指它們的解釋執(zhí)行狀態(tài))。我們常見的Python和Ruby發(fā)行版本基本上都包括自己的解釋器(這也是 它們的核心組件),但是Java是一種需要中間編譯過程的語言,默認(rèn)情況下它無法直接解釋運行,也沒有相應(yīng)的解釋器。

    那么SecureJSH是如何實現(xiàn)的呢?讀者首先會想到JSR-223,這個API可以自己擴展腳本語言支持,比如rhino是 Javascript解釋引擎。但是使用它難以實現(xiàn)交互操作,因為它必須輸入一個相對完整的腳本才可以運行,這樣會喪失一部分交互性。SecureJSH 實際上是使用了JDK 6.0的新特性Java Compiler API(JSR-199),它提供了一組API來讓程序可以動態(tài)地訪問Java編譯器的接口,這樣就可以使用Java編譯器動態(tài)檢查代碼語法或者動態(tài)根據(jù) Java源碼生成可以執(zhí)行的字節(jié)碼。這種方式與ASM的編程直接生成字節(jié)碼不同,它能直接將Java源碼轉(zhuǎn)換為字節(jié)碼,XRuby的主力開發(fā)者鄭曄(網(wǎng)名 dreamhead)在他的Blog中這樣對比了兩種方案

    之前,剛剛在Blog中提到ASM, 里面的代碼生成工作是通過直接寫 字節(jié)碼完成的。現(xiàn)在有了Compiler API,可以考慮生成代碼以Java源碼的形式完成,然后,通過調(diào)用Compiler API對源碼進行動態(tài)編譯,這樣,可以達到同直接寫字節(jié)碼類似的作用。使用Compiler API,肯定不如直接生成字節(jié)碼來得高效,但對于不了解JVM指令的人來說這也許是一種解決方案。

    可見JSR-199不是最高效的字節(jié)碼生成方案,但是更方便使用。Java Compiler API不是為了取代ASM這樣的方案的,它的本意是以編程的方式實現(xiàn)實時編譯及信息反饋。Java目前的主要架構(gòu)師之一Peter von der Ahé曾經(jīng)在他的Blog對誰需要使用Java Compiler API這個問題做了如下解釋

    99%的Java開發(fā)者都不需要了解Java Compiler API。只有少數(shù)的開發(fā)者會直接應(yīng)用這個API。但是IDE、Java EE應(yīng)用程序服務(wù)器、Maven或者Ant還有測試框架的開發(fā)者卻不一樣,他們有一個共同點,就死需要調(diào)用編譯器將Java源碼轉(zhuǎn)換為類文件(他們是這個 API的潛在用戶)。

    可見JSR-199的產(chǎn)生主要是面向熱部署或者增量編譯這樣的場合,但是SecureJSH的產(chǎn)生擴展了Java Compiler API的應(yīng)用場景,同時也增強了Java和JVM的交互性。Complystill這樣介紹了SecureJSH的應(yīng)用場景和需求

    SecureJSH允許Java編寫的服務(wù)器端應(yīng)用程序為管理員、客戶、開發(fā)者和客戶端服務(wù)提供一個安全shell,這里可以交互性地讓Java語言逐句運行。SecureJSH需要JDK 6.0或者JRE 6.0加JAVAC(在classpath中)來運行。
    SecureJSH的官方首頁這樣描述了它的主要特性:
    • 安全:SecureJSH在服務(wù)器端實現(xiàn)了RFC-4251,SSH 2.0協(xié)議,支持公鑰認(rèn)證,這種方式方便安全(不需要每次輸入密碼)。
    • 交互式執(zhí)行:傳 統(tǒng)的方式下,在運行Java源代碼之前你必須將它們編譯為字節(jié)碼。但是使用SecureJSH,編譯的過程是透明完成的,所以你只需要隨意輸入一些 Java表達式(就可以運行)。這意味著你可以使用你書寫應(yīng)用程序時完全相同的語法,與最新的Java語言規(guī)范同步。你可以在你的Java項目源碼和 SecureJSH終端里面拷貝&粘貼任何代碼,都沒有問題。
    • 智能命令識別,UNIX Shell風(fēng)格:不 像JSR-223(Java Scripting Engin,Java腳本引擎)對Java語言的腳本的支持,在(Java腳本引擎)里面你必須將Java類的全部代碼輸入后才可以執(zhí)行, secureJSH更加智能和人性化,如果你輸入了不完整的Java表達式,它會自動提示你進行多行的輸入,然后將這些表達式包裝到一個預(yù)先定義的類結(jié)構(gòu) 中來執(zhí)行。它是一個真正的Shell。
    • 沒有相互干擾,最小化資源消耗:SecureJSH沒有需要儲存在JVM范圍的靜態(tài)資源,每一個實例只消耗很少量的資源(基于NIO實現(xiàn),所有的SSH通訊都由一個線程處理)。你可以按照你的想法在一個JVM里面運行任意多個shell服務(wù),包括Java應(yīng)用程序服務(wù)器的JVM。

    作為一個開源項目,SecureJSH使用了ganymed的純Java實現(xiàn)的SSH 2.0庫,并使用Java NIO編寫了網(wǎng)絡(luò)服務(wù),代碼質(zhì)量很高。據(jù)Comply Still介紹,SecureJSH最初是為內(nèi)存數(shù)據(jù)庫TOB設(shè)計的,為這個面向?qū)ο髷?shù)據(jù)庫提供交互訪問的接口,但是后來作者發(fā)現(xiàn)它可以被應(yīng)用在很多場 合,所以單獨開源發(fā)布。作為Java開發(fā)者,您可以從這里下載源碼從中學(xué)習(xí)SSH 2.0、NIO網(wǎng)絡(luò)服務(wù)、Java Compiler API的使用方法,相信一定會有所收獲。

    posted on 2007-07-27 09:56 Tin 閱讀(1546) 評論(1)  編輯  收藏 所屬分類: 開源

    評論

    # re: Java交互管理工具——SecureJSH發(fā)布 2007-07-27 11:45 sitinspring
    值得一看,做個記號.  回復(fù)  更多評論
      

    主站蜘蛛池模板: a毛片免费播放全部完整| 男男gvh肉在线观看免费| 怡红院免费的全部视频| 人人狠狠综合久久亚洲高清| 亚洲天天在线日亚洲洲精| aa级毛片毛片免费观看久| 国产成人精品亚洲精品| 免费的黄色的网站| 一本色道久久88综合亚洲精品高清| 中文字幕亚洲情99在线| 99精品全国免费观看视频| 亚洲综合av一区二区三区不卡| 成年私人影院免费视频网站| 亚洲国产综合精品中文第一| 日本视频免费在线| 香蕉视频免费在线| 亚洲色自偷自拍另类小说| a级片免费观看视频| 亚洲国产成人片在线观看| 亚欧免费无码aⅴ在线观看| 久久狠狠高潮亚洲精品| 免费精品国偷自产在线在线 | 亚洲天堂男人天堂| 精品无码免费专区毛片| 亚洲最大的成人网| 亚洲成A∨人片天堂网无码| 国产精品免费在线播放| 无码欧精品亚洲日韩一区| 国产在线观看麻豆91精品免费| 亚洲男人的天堂久久精品| 免费a级毛片无码av| 国产在线观看免费av站| 中文字幕亚洲综合久久| 女人18毛片水最多免费观看| 黄页网址在线免费观看| 亚洲日产韩国一二三四区| 18国产精品白浆在线观看免费| 亚洲狠狠婷婷综合久久蜜芽| 亚洲精品一级无码鲁丝片| 一级毛片在线免费看| 亚洲爆乳无码专区www|