国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

通過SSH交互進(jìn)行Java應(yīng)用開發(fā)

2024-07-21 02:04:32
字體:
供稿:網(wǎng)友
javaeye上活躍的開發(fā)者complystill(歆淵)最近發(fā)布了自己的開源securejsh項(xiàng)目,提供了一個(gè)通過ssh交互進(jìn)行java應(yīng)用開發(fā)或者管理的工具。

 

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

 

那么securejsh是如何實(shí)現(xiàn)的呢?讀者首先會(huì)想到j(luò)sr-223,這個(gè)api可以自己擴(kuò)展腳本語言支持,比如rhino是 javascript解釋引擎。但是使用它難以實(shí)現(xiàn)交互操作,因?yàn)樗仨気斎胍粋€(gè)相對(duì)完整的腳本才可以運(yùn)行,這樣會(huì)喪失一部分交互性。securejsh 實(shí)際上是使用了jdk 6.0的新特性java compiler api(jsr-199),它提供了一組api來讓程序可以動(dòng)態(tài)地訪問java編譯器的接口,這樣就可以使用java編譯器動(dòng)態(tài)檢查代碼語法或者動(dòng)態(tài)根據(jù) java源碼生成可以執(zhí)行的字節(jié)碼。這種方式與asm的編程直接生成字節(jié)碼不同,它能直接將java源碼轉(zhuǎn)換為字節(jié)碼,xruby的主力開發(fā)者鄭曄(網(wǎng)名 dreamhead)在他的blog中這樣對(duì)比了兩種方案:

 

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

可見jsr-199不是最高效的字節(jié)碼生成方案,但是更方便使用。java compiler api不是為了取代asm這樣的方案的,它的本意是以編程的方式實(shí)現(xiàn)實(shí)時(shí)編譯及信息反饋。java目前的主要架構(gòu)師之一peter von der ahé曾經(jīng)在他的blog對(duì)誰需要使用java compiler api這個(gè)問題做了如下解釋:

 

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

可見jsr-199的產(chǎn)生主要是面向熱部署或者增量編譯這樣的場(chǎng)合,但是securejsh的產(chǎn)生擴(kuò)展了java compiler api的應(yīng)用場(chǎng)景,同時(shí)也增強(qiáng)了java和jvm的交互性。complystill這樣介紹了securejsh的應(yīng)用場(chǎng)景和需求:

 

securejsh允許java編寫的服務(wù)器端應(yīng)用程序?yàn)楣芾韱T、客戶、開發(fā)者和客戶端服務(wù)提供一個(gè)安全shell,這里可以交互性地讓java語言逐句運(yùn)行。securejsh需要jdk 6.0或者jre 6.0加javac(在classpath中)來運(yùn)行。

securejsh的官方首頁這樣描述了它的主要特性:

安全:securejsh在服務(wù)器端實(shí)現(xiàn)了rfc-4251,ssh 2.0協(xié)議,支持公鑰認(rèn)證,這種方式方便安全(不需要每次輸入密碼)。

交互式執(zhí)行:傳 統(tǒng)的方式下,在運(yùn)行java源代碼之前你必須將它們編譯為字節(jié)碼。但是使用securejsh,編譯的過程是透明完成的,所以你只需要隨意輸入一些 java表達(dá)式(就可以運(yùn)行)。這意味著你可以使用你書寫應(yīng)用程序時(shí)完全相同的語法,與最新的java語言規(guī)范同步。你可以在你的java項(xiàng)目源碼和 securejsh終端里面拷貝&粘貼任何代碼,都沒有問題。

智能命令識(shí)別,unix shell風(fēng)格:不 像jsr-223(java scripting engin,java腳本引擎)對(duì)java語言的腳本的支持,在(java腳本引擎)里面你必須將java類的全部代碼輸入后才可以執(zhí)行, securejsh更加智能和人性化,如果你輸入了不完整的java表達(dá)式,它會(huì)自動(dòng)提示你進(jìn)行多行的輸入,然后將這些表達(dá)式包裝到一個(gè)預(yù)先定義的類結(jié)構(gòu) 中來執(zhí)行。它是一個(gè)真正的shell。

沒有相互干擾,最小化資源消耗:securejsh沒有需要儲(chǔ)存在jvm范圍的靜態(tài)資源,每一個(gè)實(shí)例只消耗很少量的資源(基于nio實(shí)現(xiàn),所有的ssh通訊都由一個(gè)線程處理)。你可以按照你的想法在一個(gè)jvm里面運(yùn)行任意多個(gè)shell服務(wù),包括java應(yīng)用程序服務(wù)器的jvm。

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 横峰县| 普兰县| 塔城市| 昌宁县| 西宁市| 仙桃市| 定远县| 沙田区| 嘉义县| 绥化市| 舞阳县| 中阳县| 剑川县| 台湾省| 仲巴县| 施甸县| 武威市| 志丹县| 鹤庆县| 平陆县| 三江| 改则县| 巨鹿县| 凤冈县| 西贡区| 平潭县| 石柱| 介休市| 新龙县| 沭阳县| 桂阳县| 庄浪县| 项城市| 吉水县| 新野县| 油尖旺区| 应用必备| 商丘市| 利川市| 原阳县| 崇信县|