? 數(shù)據(jù)導(dǎo)入功能終于做的差不多了,服務(wù)器端導(dǎo)入模式也試了一下,臨下班之前還有nullpointerexception錯(cuò)誤沒(méi)有解決,還有就是生成憑證有問(wèn)題。總感覺(jué)項(xiàng)目中有太多將就的東西了,底層開(kāi)發(fā)框架設(shè)計(jì)的很好,擴(kuò)展性也很強(qiáng)。但是業(yè)務(wù)框架就差很多了,那個(gè)憑證生成平臺(tái)竟然建立在源單據(jù)要建立一個(gè)名字為fivouchered字段的基礎(chǔ)之上,否則根本跑不起來(lái),耦合性太強(qiáng)了,而且這種耦合是很不容易被發(fā)現(xiàn)的。周四就要把做的這個(gè)Demo發(fā)到客戶現(xiàn)場(chǎng)了,希望一切都平安,否則下周甚至下下……下周都不可能安心進(jìn)入項(xiàng)目開(kāi)發(fā)了。今天項(xiàng)目組開(kāi)例會(huì)沒(méi)有前一陣子那么忙碌了,產(chǎn)品延期發(fā)版了兩個(gè)多月,戰(zhàn)友們也感覺(jué)壓力小了許多。但是風(fēng)險(xiǎn)是無(wú)處不在的,只希望需求、開(kāi)發(fā)、測(cè)試合作更緊密一點(diǎn),交流更通暢一些,多快好省的讓產(chǎn)品發(fā)版,少點(diǎn)全員加班。
? 忙是忙,總不能把自己困死在工作上的。畢竟還是要自己學(xué)點(diǎn)東西的。本想回來(lái)看一看hibernate的源代碼的,但是同宿舍兄弟剛買(mǎi)了臺(tái)電腦要用我的電腦做代理上網(wǎng)。生平第一次看到用雙網(wǎng)卡實(shí)現(xiàn)共享上網(wǎng),又學(xué)了一招,我那個(gè)兄弟可是個(gè)網(wǎng)絡(luò)高手,以后要經(jīng)常向他學(xué)習(xí)了,等有時(shí)間買(mǎi)個(gè)小路由,讓他教教我怎么配置路由器。
? 時(shí)間不多只能把我前一陣子研究的java中調(diào)用腳本語(yǔ)言的東西拿出來(lái)整理一下了。java中調(diào)用腳本語(yǔ)言有很廣泛的用途,比如用戶自定義公式,自定義單據(jù)轉(zhuǎn)換規(guī)則,用戶自定義工作流等等。java中調(diào)用腳本語(yǔ)言有很多中實(shí)現(xiàn),比如Jython、Groovy、Beanshell等等。但是即使對(duì)于有一定開(kāi)發(fā)經(jīng)驗(yàn)的程序員學(xué)習(xí)它們是需要一段時(shí)間的。而提起腳本,無(wú)論是程序員還是有一定軟件開(kāi)發(fā)基礎(chǔ)的客戶(例如客戶公司的網(wǎng)管、信息管理員等等)都會(huì)想起javascript和VBScript,如果我們的系統(tǒng)使用這些用戶熟悉的腳本語(yǔ)言,必將降低系統(tǒng)學(xué)習(xí)的難度。VBScript是捆綁在windows平臺(tái)下的,因此javascript就成了我們專(zhuān)注的對(duì)象。javascript引擎可以在NetScape的js.jar中找到,而現(xiàn)在這個(gè)包已經(jīng)做為一個(gè)開(kāi)源項(xiàng)目獨(dú)立出來(lái)了,項(xiàng)目的名字是Rhino,項(xiàng)目網(wǎng)站:
http://www.mozilla.org/rhino/。? Rhino支持javascript標(biāo)準(zhǔn)的所有特性,如賦值、運(yùn)算、判斷語(yǔ)句、循環(huán)語(yǔ)句、甚至簡(jiǎn)單的io操作。Rhino很簡(jiǎn)單易用,我以一個(gè)例子來(lái)說(shuō)明,這個(gè)例子就是允許用戶設(shè)定一個(gè)使用x,y兩個(gè)變量進(jìn)行一定邏輯算術(shù)運(yùn)算(運(yùn)算規(guī)則用戶用javascript定義),并允許用戶對(duì)x,y賦值,然后運(yùn)行得出計(jì)算結(jié)果。代碼如下:
??????? Context ctx = Context.enter();
??????? Scriptable scope = ctx.initStandardObjects();
???????
??????? scope.put("x", new Integer(20));
??????? scope.put("y", new Integer(30));
??????? try
??????? {
????????? ctx.evaluateString("if(x
",1,null);
????????? System.out.println(scope.get("result", scope));
??????? }
??????? finally
??????? {
??????????? Context.exit();
??????? }
很簡(jiǎn)捷吧。scope.put("x", new Integer(20))的意思是為變量x賦值,ctx.evaluateString("if(x",1,null); 則是運(yùn)行javascript腳本,而scope.get("result", scope)則是得到運(yùn)算結(jié)束后變量的值,我們采用result做為返回值,所以scope.get("result", scope)就表示得到返回值。不錯(cuò)吧。嘿嘿,很方便呀。
? 好了,都凌晨一點(diǎn)鐘了,該睡覺(jué)了,明天還要改bug呢,爭(zhēng)取提前把任務(wù)搞定,周五調(diào)休。