邋遢居

          我的Java天堂

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

          #

          在過去的一年中。斷斷續(xù)續(xù)的使用了一些Grails。用他做了點(diǎn)東西。覺得不錯(cuò),所以希望更多的人來了解他。使用他。所以錄制了一點(diǎn)視頻,和大家分享。視頻會(huì)不定期持續(xù)更新!

          第一集 Grails 開發(fā)環(huán)境準(zhǔn)備

          http://v.youku.com/v_show/id_XNjUxNjgxMjA4.html

           

          第二集 配置使用 Grails Spring security

          http://v.youku.com/v_show/id_XNjY2MDc4MDgw.html

           

          第三集  Grails中數(shù)據(jù)庫連接

          http://v.youku.com/v_show/id_XNjk4NTM2NDgw.html

          posted @ 2014-04-23 22:49 Jet Geng 閱讀(2505) | 評(píng)論 (0)編輯 收藏

          原起

          EverNote 的強(qiáng)大已經(jīng)無需多說。他自己有很好的客戶端,不過那個(gè)只是對(duì)Windows和OS X。在linux下面就蝦米菜了。就是Windows和OS X下面的客戶端也存在一個(gè)致命的弱點(diǎn):不支持 MarkDown
          不過有好人做了一個(gè)工具 Geeknote 讓我們可以在任何裝有python的機(jī)器上使用Evernote。 更強(qiáng)大的是他可以使用任何編輯器編輯筆記,支持 MarkDown 。 有如此好處還等什么啊趕緊用起來。
          個(gè)人在使用的時(shí)候發(fā)現(xiàn)原版有點(diǎn)點(diǎn)不舒服的地方,做了點(diǎn)點(diǎn)小改動(dòng)放在了 GitHub。 具體是什么改動(dòng),先買個(gè)關(guān)子。

          安裝

          直接從源碼安裝

          1. 使用 git clone git@github.com:jetgeng/geeknote.git 命令下載源碼
          2. 進(jìn)入 geeknote 目錄。
          3. 運(yùn)行 python geeknote.py login 登錄evernote
          4. 通過 python geeknote.py create , python geeknote.py edit , python geeknote.py find 命令來創(chuàng)建,編輯和查詢你的ervernote 中的筆記。
          5. 通過 python geeknote.py settings --editor vim 命令把編輯Evernote的編輯器設(shè)定成我最喜歡的vim。 當(dāng)然你可以設(shè)定成你喜歡的。
          6. 這個(gè)時(shí)候你已經(jīng)用上了GeekNote。 但是還會(huì)有點(diǎn)不爽。最起碼我這個(gè)時(shí)候不爽。

          不爽的地方

          1. 當(dāng)我用python geeknote.py edit 命令使用vim打開我要編輯的筆記時(shí),筆記居然沒有把 MarkDown 語法給我高亮出來! 不爽!!
          2. 輸入命令一定要帶一個(gè)什么python 之類的太繁,而且我tab的時(shí)候也沒有給我把命令補(bǔ)全!在命令行中沒有自動(dòng)補(bǔ)全,太不爽了??!

          改之

          讓vim正確設(shè)定filetype

          在 vim中一般是根據(jù)文件的后綴名來識(shí)別該文件是什么類型。然后為他加載相應(yīng)的語法高亮,代碼補(bǔ)全什么的。在沒有改動(dòng)前geeknote是為筆記創(chuàng)建的臨時(shí) 文件時(shí)沒有后綴的。只是隨機(jī)的創(chuàng)建一個(gè)形如 tmpsNbc8k這樣的文件。所以Vim無法識(shí)別他是何種文件,就無法為他加載對(duì)于的語法高亮之類的。

          既然找到原因了就先看一下geeknote是否有什么地方可以設(shè)定,讓他產(chǎn)生的臨時(shí)文件有后綴。最后在editor.py文件中發(fā)現(xiàn)了這么一行代碼: (tmpFileHandler, tmpFileName) = tempfile.mkstemp() 。 直接沒有給任何后綴的想法。
          那就加上吧。
          我所做的動(dòng)作就是這個(gè),給他加上了一個(gè)文件后綴的設(shè)定。
          通過python geeknote settings --suffix suffix 這樣的命令來設(shè)定零時(shí)文件的后綴。這樣語法高亮,代碼補(bǔ)全就回來了。小爽一下!

          命令行自動(dòng)補(bǔ)全

          這個(gè)其實(shí)geeknote已經(jīng)想到了,而且已經(jīng)做了。代碼倉庫中的那個(gè) bash_completion/geeknote 文件就是干這個(gè)活的。 所以我只要把這個(gè)文件copy到 /etc/bash_completion.d/ 下就可以了。
          但是copy進(jìn)去后沒有達(dá)到我想要的效果。沒有自動(dòng)補(bǔ)全。最后發(fā)現(xiàn)是geeknote配置的補(bǔ)全命令和我們執(zhí)行的時(shí)候不一致。
          下面要做的就是把它們搞一致了。
          我的操作步驟如下:
          1. chmod +x geeknote.py 給geeknote.py加上可執(zhí)行權(quán)限。
          2. 將geeknote.py所在路徑加入到PATH中去。
          3. 修改 /etc/bash_completion.d/geeknote 文件中的 geeknote 為geeknote.py 這個(gè)在我上面提到的github中可以找到。

          這個(gè)時(shí)候在新開一個(gè)控制臺(tái),輸入 geeknote.py tab 可以自動(dòng)補(bǔ)全了。小爽一下!

          posted @ 2013-05-31 22:57 Jet Geng 閱讀(8312) | 評(píng)論 (1)編輯 收藏


          Gemini測試小工具

          作 者: Jet Geng
          日 期: 2011-07-22

          概述

          Blueprint 起步中我們已經(jīng)成功的通過 Blueprint 容器創(chuàng)建了一個(gè)POJO。我們只是通過log的方式查看到我們的POJO已經(jīng)被創(chuàng)建了。無法深入的去了解容器內(nèi)部Bean的運(yùn)行狀態(tài)和行為。 所以才有必要?jiǎng)?chuàng)建一個(gè)Gemini控制臺(tái)這樣的程序。這個(gè)控制臺(tái)最初的需求是:

          • 能夠動(dòng)態(tài)查看特定的Bean是否被創(chuàng)建。
          • 能夠動(dòng)態(tài)的獲取特定的Bean。
          • 能夠檢查特定Bean的行為是否正確。

          解決方案

          為了解決以上的問題。我做了一個(gè)小工具。 這個(gè)小工具的目的讓客戶的動(dòng)態(tài)腳本能在最終的目標(biāo)環(huán)境中運(yùn)行。使用方式如下:
          1. 從 git://github.com/jetgeng/OSGi.git 下載 org.gunn.gemini.consoleorg.codehaus.groovy 這兩個(gè)項(xiàng)目。
          2. 并把這兩項(xiàng)目加入到你的TargetPlatform中。
          3. 使用 invokegv 來運(yùn)行g(shù)roovy腳本。
            1. 直接在命令行輸入腳本。例如: invokegv print act.getBean(''myPOJO'')
            2. 通過輸入Groovy文件。例如: invokegv file:///Users/Puer/.../script.groovy

          注解

          在Groovy腳本中有一個(gè)內(nèi)建的變量 act , 他又一個(gè)叫做 getBean 的方法。通過這個(gè)方法你可以獲得當(dāng)前 OSGi 平臺(tái)中所有的BlueprintContainer中的組件。他的輸入?yún)?shù)時(shí)Bean或Service的id。 如果是使用Groovy文件的形式,注意文件的url格式。他是通過如下的正則表達(dá)式 file:\\/{2}(\\/[:\\w\\.]+)+ 進(jìn)行驗(yàn)證的。并且路徑中暫時(shí)不支持中文。

          這個(gè)周末(23或24日)完成一個(gè)簡單的錄屏,來演示這個(gè)小工具的使用。

          posted @ 2011-07-22 01:01 Jet Geng 閱讀(3137) | 評(píng)論 (0)編輯 收藏

          1 概述
          Blueprint 使用手記 Jet Geng
          July 10, 2011
          Blueprint 是 OSGi Service Platform Enterprise Specification 標(biāo)準(zhǔn)的一 部分。很多最佳實(shí)踐中也都推薦在應(yīng)用程序中使用他。最近在項(xiàng)目中用他 來發(fā)布和應(yīng)用服務(wù)。感覺效果不錯(cuò)。所以就有了這篇使用手記!歡迎各位 看官拍磚!
          2 配置環(huán)境
          我們在前期找到了兩個(gè) Blueprint 的實(shí)現(xiàn):一個(gè)是 Apache 的 aries,另 外一個(gè)就是 Eclipse 的 Gemini。最后選擇了 Gemini。做出這樣的決定出于 兩點(diǎn)考慮:
          • Blueprint的標(biāo)準(zhǔn)就是由Spring提出。
          • Gemini的初始代碼由Srping所捐獻(xiàn)。 下面我就簡單介紹一下環(huán)境的配置過程:
          • 從http://eclipse.org/gemini/ 下載 Gemini 的合適的版本。我們 采用的是 1.0.0M1。并解壓到路徑 A
          • 從http://static.springsource.org/downloads/nightly/milestone-download. php下載 spring-osgi-2.0.0.M1-with-dependencies。并解壓到路徑 B。 他里面包括了 Gemini 所依賴的 bundle。說白了也就是 SpringFrame- work。
          • Eclipse 中新建一個(gè) Target Platform。把上述的路徑 A和 B 加入到新 建的 Target Platform 中去。
          • 選擇新建的 Target Platform 為當(dāng)前活動(dòng)的 Platform。 3 啟航
          個(gè)人理解 Gemini 就是 OSGi 世界中的 IOC。既然是一個(gè) IOC 框架,那 我們就從創(chuàng)建一個(gè) Bean 開始吧!

          3.1    創(chuàng)建一個(gè) Bean 首先我們來看一下我們要存入 Container 中的 POJO。
          Listing 1: POJOWillInContainer.java
          package org.gunn.gemini.demo;
          import org.slf4j.Logger; import org.slf4j.LoggerFactory; /**
          * This pojo will create by blueprint container * 
          @author Jet Geng * */
          public class POJOWillInContainer { private Logger logger =
          }
          LoggerFactory.getLogger(POJOWillInContainer.
          class); private String name ;
          private String age;
          public void setName(String name) { logger.info("the new name is:" + name); this.name = name;
          }
          public void setAge(String age) { logger.info("the new age value is:" + age); this.age = age;
          }

          這個(gè)超級(jí)簡單的一個(gè) POJO,我們?nèi)绾瓮ㄟ^ Gemini 來創(chuàng)建他呢?我們通過 一個(gè)簡單的配置文件。具體如下。
          Listing 2: pojoconfig.xml

          <?xml version="1.0" encoding="UTF-8"?>
          <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
              
          <bean id="myPOJO" class="org.gunn.gemini.demo.POJOWillInContainer" >
                  
          <property name="name" value="JetGeng"/>
                  
          <property name="age" value="32"/>
              
          </bean>
          </blueprint>

          用過 spring 的兄弟,第一眼就能看明白這個(gè)配置文件說的是什么。其實(shí)就 是創(chuàng)建了一個(gè) bean。到這里,我們所需要做的工作其實(shí)就已經(jīng)完成了。下 面就可以通過 Debug 來啟動(dòng)了。
          3.2    運(yùn)行 Blueprint 容器 首先把 pojoconfig.xml 文件放到 project path/OSGi INF/blueprint 目錄
          下。或者在 MANiFEST.MF 文件中通過如下語句進(jìn)行指定。 Blueprint-Bundle: config/account-data-context.xml, config/osgi-*.xml
          更多內(nèi)容參考http://www.eclipse.org/gemini/blueprint/documentation/ reference/1.0.0.RC1/html/app-deploy.html中的 8.2 Blueprint Manifest Configuration Comparison。好了,我們可以啟動(dòng)我們的應(yīng)用程序了。為了 能夠讓 blueprint 順利的跑起來,我們必須要把 blueprint 相關(guān) bundle 以及 他所依賴的 bundle 都加入到運(yùn)行時(shí)中。 按照上圖配置后,點(diǎn)擊運(yùn)行。我們
          Figure 1: Debug 配置

          將在控制臺(tái)得到如下內(nèi)容。

          控制臺(tái)中的黑色行顯示我們的 POJO 已經(jīng)被 BlueprintContainer 創(chuàng)建

          了,并且設(shè)定了相關(guān)屬性。
          .
          這個(gè)部分的全部代碼已經(jīng)放到了 git://github.com/jetgeng/OSGi.git 中了。 感興趣的筒子可以 down 下來玩玩。
          posted @ 2011-07-10 11:06 Jet Geng 閱讀(5046) | 評(píng)論 (4)編輯 收藏

          用Graphviz顯示樹

          緣起

          前幾天不知道那根筋搭錯(cuò),又拿出了大學(xué)時(shí)候買的一本講算法的書翻了起來。想起當(dāng)年學(xué)習(xí)Tree的時(shí)候,看著數(shù)據(jù)結(jié)構(gòu)憑空去想那顆倒著的樹。那個(gè)叫做苦啊。所以就像有沒有什么辦法讓Tree自己畫出這樣的結(jié)構(gòu)圖出來。

          動(dòng)手

          既然想到了,就動(dòng)手做把。因?yàn)橐郧坝肎raphviz畫過一點(diǎn)mindmap,類圖之類的小東西。讓我一下子就想到了,我只要能從Tree結(jié)構(gòu)中方便的輸出成一個(gè)能繪制出對(duì)應(yīng)樹結(jié)構(gòu)的Graphviz腳本就可以。這應(yīng)該是代價(jià)最小的做法。 呵呵,廢話不多說了。看看的Tree的代碼吧!

           @Override
              
          public String toString() {
                  StringBuffer strValue 
          = new StringBuffer();
                  StringBuffer rout 
          =  new StringBuffer("{rank=same ");
                  
                  
          if(getLeftTree()  != null ) {
                      strValue.append(root).append(ARROW).append( getLeftTree().getTreeNode()).append(
          ";\r").
                                  append( getLeftTree());
                      rout.append(getLeftTree().getTreeNode() ).append(ARROW).append(EXTEND).append(root);
                
                  }
                  
                  strValue.append(EXTEND).append(root).append(
          "[label=\"\",width=.1,style=invis];\r");
                  strValue.append(root).append(ARROW).append(EXTEND).append(root).append(
          "[style=invis];\r");
               
                  
          if(getRightTree() != null) {
                      strValue.append(root).append(ARROW).append( getRightTree().getTreeNode()).append(
          ";\r").
                      append( getRightTree());
                 
                      rout.append(ARROW).append(getRightTree().getTreeNode());
                  }
                  strValue.append(rout).append(
          " [style=invis] } ;\r");
                  
          return strValue.toString();
              }

          產(chǎn)生腳本的動(dòng)作全部在這里完成了。我通過如下代碼創(chuàng)建了一顆樹

                 ITree<Integer> tree = new TreeImpl<Integer>(6);   
                  tree.addNode(
          3);
                  tree.addNode(
          16);
                  tree.addNode(
          5);
                  tree.addNode(
          4);
                  tree.addNode(
          2);
                  tree.addNode(
          10);
                  tree.addNode(
          30);

          最后得到的一副如下的圖

          呵呵,這樣的話就可以隨時(shí)查看樹的結(jié)構(gòu)了,我們所需要做的只是把object toString一下就可以。

          附上一些文件

          演示的錄屏文件

          完整的代碼 

          posted @ 2010-08-11 12:59 Jet Geng 閱讀(3817) | 評(píng)論 (1)編輯 收藏

          近來想了解一下關(guān)于網(wǎng)站建設(shè)方面的內(nèi)容。自然而然的就找到了Drupal這個(gè)東西。剛開始沒有發(fā)現(xiàn)他是多么的強(qiáng)大。抱著試試看的態(tài)度,

          搭建了一個(gè)環(huán)境跑跑看??赐曛篌@呼強(qiáng)大!他的強(qiáng)大來源于他的高度的可擴(kuò)展,豐富的模塊,主題。讓你可以不寫一行代碼構(gòu)建出一個(gè)不錯(cuò)的網(wǎng)站來。 看到這么強(qiáng)大的東西,就禁不住好奇往里看。于是找到了一些資料特與大家共享: 書籍:

          •  Using Drupal
          • Drupal 6 Attachment Views
          • Pro Drupal Development 悄悄的說一聲,這幾本書在itpub上都有下載。

          視頻:

          還有兩個(gè)很不錯(cuò)的網(wǎng)站。

          上面提供了很多高質(zhì)量的教學(xué)視頻。讓我這個(gè)初學(xué)者很快對(duì)drupal有個(gè)直觀和深入的了解。

          youtube.com上也有很多視頻,有梯子的童鞋可以過去看看!

          posted @ 2010-05-30 23:44 Jet Geng 閱讀(1662) | 評(píng)論 (0)編輯 收藏


          文中提到的代碼castexception_src
          編譯好了包括不同的版本org.gunn.castexception.supplier插件文件為castexception_bin
          posted @ 2010-05-14 19:15 Jet Geng 閱讀(2680) | 評(píng)論 (6)編輯 收藏

          問題

          這兩天在寫一個(gè)小東西。這個(gè)小東西是一個(gè)大東西的一部分。其實(shí)也就是其中的一兩個(gè)類。而這個(gè)大東西需要部署到一個(gè)特定的環(huán)境中去運(yùn)行。所以有一堆的限制條 件,比如什么配置文件啊,包名,版本之類的什么東西。稍微有點(diǎn)差錯(cuò)就沒有辦法運(yùn)行。需要正確得到這些東西需要一個(gè)很龐大且冗長的構(gòu)建過程。而我寫的也就是 兩三個(gè)類,所以最直接的方式就是把我寫的java 文件編譯或的class 文件直接復(fù)制到j(luò)ar文件中。 完成這樣工作有好幾中方式,最直接的方式就是純手工打造


          GraphViz image

          PS: 這種方式費(fèi)時(shí)費(fèi)力,需要在不同的窗體間進(jìn)行切換。例如我現(xiàn)在就在Eclipse、WinRaR和Windows資源管理器間切換。

          解決過程

          如何避免這個(gè)過程呢,盡量不用人來參與其中。這個(gè)肯定就是讓一個(gè)小程序來把這幾個(gè)動(dòng)作連接起來。而且還要能夠方便變動(dòng)。比如我現(xiàn)在不想往a.jar 里面copy了。我想向b.jar 中復(fù)制了。所以就想到了腳本。對(duì)讓腳本來完成這樣的事情。第一反應(yīng)想到的是ant

          Ant 我的主角

            Ant 是 何須人,就不用我多說了。其實(shí)我了解也不多,只是知道這個(gè)小螞蟻蠻力超大。下面就著手解決問題。第一反應(yīng)就是找到一個(gè)直接copy的任務(wù),把 fileset中的文件復(fù)制到j(luò)ar文件中。但是遺憾的是我沒有能夠找到這樣一個(gè)Task.這個(gè)時(shí)候我的思維陷入了困境。下面該怎么辦?

          困境

          沒有現(xiàn)成的東西,沒有現(xiàn)成的能一步完成的東西?如何是好? 我是程序員,所以我我自己可以寫一個(gè)task來滿足這樣的需求啊。對(duì)啊,我可以自己寫的!正當(dāng)我為這個(gè)想法興奮不已時(shí),正卷起袖子準(zhǔn)備“大干”的時(shí)候。突然想起某人說過 不要重新造輪子! 。所以就追問了我自己一句: 角處會(huì)有什么呢?

          我的拐角

          既然Ant有蠻力,我可否利用一下他的蠻力呢?通過如下的這么一個(gè)流程來達(dá)到我的目的。


          GraphViz image

          這里用了一個(gè)temp文件夾作為中轉(zhuǎn),先解壓,copy需要的文件,最后jar一下獲得最后的更新好的jar。 最終獲得了如下的build.xml

          <target name="prepare">
                          
          <mkdir dir="${temp_dir}"/>
                  
          </target>
                  
                  
          <target name="build" depends="prepare">
                          
          <echo message="unzip">Uzip Jar file</echo>
                          
          <unjar dest="${temp_dir}" src="${comp_plugin}/${contain_plugin}">
                          
          </unjar>
                          
          <copy todir="${temp_dir}">
                                  
          <fileset dir="./bin">
                                          
                                  
          </fileset>
                          
          </copy>
                          
          <jar update="true"
                                  destfile
          ="c:/${contain_plugin}" 
                                  basedir
          ="${temp_dir}" >
                          
          </jar>
                  
          </target>
            

          調(diào)整的過程

          看上去,所有問題都解決了。但是偏偏在使用的時(shí)候遇到了小問題。我的jar包是要在osgi環(huán)境下工作的。所以特別依賴MANIFEST.MF文件。偏偏jar 這個(gè)任務(wù)默認(rèn)情況下會(huì)生成一個(gè)默認(rèn)的MANIFEST.MF文件。如果任由他胡來的話,就全蝦米了。所以要稍微調(diào)整一下。


          <jar update="true"
                                  destfile
          ="c:/${contain_plugin}" 
                                  basedir
          ="${temp_dir}" 
                                  manifest
          ="${temp_dir}/META-INF/MANIFEST.MF">
          </jar>
           

          這樣就可以了。大功告成??!

          posted @ 2009-11-26 18:07 Jet Geng 閱讀(2447) | 評(píng)論 (3)編輯 收藏

          在我們創(chuàng)建領(lǐng)域模型前,我們有必要了解一下我們的模型用來表達(dá)什么內(nèi)容。 所以我就先解釋一下在這個(gè)系列文章中要實(shí)現(xiàn)應(yīng)用。 假設(shè)Eclipse組織邀請你編寫一個(gè)讓他們管理貢獻(xiàn)者和項(xiàng)目的應(yīng)用程序。

          我們需要?jiǎng)?chuàng)建一個(gè)模型來表達(dá)客戶提供的信息。他們有可能如下圖。

          讓我們進(jìn)一步的看看這個(gè)模型。

          Fundation

          fundation是這個(gè)模型的根,他擁有兩個(gè)列表屬性。

          projects: 像EMF,Techonlogy,Platform這樣的頂級(jí)項(xiàng)目。
          persons: 參加一個(gè)或多個(gè)項(xiàng)目的人。
          Project

          Eclipse項(xiàng)目擁有很多屬性,比如項(xiàng)目開始和結(jié)束時(shí)間、項(xiàng)目的主頁的url等等。下面列出我們最感興趣的。

          subprojects: 一個(gè)項(xiàng)目可以擁有多個(gè)子項(xiàng)目。子項(xiàng)目本身也可以擁有多個(gè)子項(xiàng)目。
          parent: 項(xiàng)目有一個(gè)父親(除了頂級(jí)項(xiàng)目外)。這就意味著項(xiàng)目和子項(xiàng)目(project-subproject)的關(guān)系是一個(gè)雙向的關(guān)系。
          projectleads 一個(gè)項(xiàng)目有多個(gè)項(xiàng)目領(lǐng)導(dǎo)人。
          committers 一個(gè)項(xiàng)目可以擁有多個(gè)貢獻(xiàn)者。
          CommitterShip

          當(dāng)一個(gè)用戶成為一個(gè)項(xiàng)目的貢獻(xiàn)者(Committer)時(shí),這就建立了一個(gè)committership。他擁有一個(gè)開始時(shí)間和結(jié)束時(shí)間。另外我們還要記錄下下面的屬性。

          project: 和committership相關(guān)的項(xiàng)目。項(xiàng)目和committership是一個(gè)雙向的關(guān)系。
          person: 參加項(xiàng)目的人。
          Person

          貢獻(xiàn)者或項(xiàng)目領(lǐng)導(dǎo)人的信息。我們關(guān)系的信息如下:

          committerships: 用于保存和人相關(guān)的所有的committerships.這說明人和committership是一個(gè)雙向關(guān)系。

          下面這張類圖給出了關(guān)于上面模型的全貌。

          正如你所看到的,我把許多關(guān)系設(shè)成了雙向關(guān)系。 As you noticed I modeled many of the relations as bidirectional relations. 這個(gè)并不是嚴(yán)格要求所有地方都要這樣,因?yàn)橛械牡胤娇梢酝ㄟ^eComtainer來獲取他的父親。就像project-subproject一樣。 但是包含關(guān)系(containment relationship)在使用databinding的情況下就不太合適了。因?yàn)閺淖拥礁赣H時(shí)沒有對(duì)應(yīng)feature,只能通過調(diào)用eContainer()方法來獲得。 EMF提供了一個(gè)編輯器來創(chuàng)建你的Ecore-Model并把它保存成XMI格式。我們可以用它來創(chuàng)建測試數(shù)據(jù)。下圖就是一個(gè)例子。

          posted @ 2009-11-07 22:41 Jet Geng 閱讀(2044) | 評(píng)論 (0)編輯 收藏

          1.譯序

          在學(xué)習(xí)EMF-Databinding的時(shí)候發(fā)現(xiàn)了Tom Schindl的博客。他的博客中有一個(gè)關(guān)于EMF Databinding的專題。感覺很不多。想嘗試著翻譯一下。 那么Tom Schindl是何許人也?他是JFace項(xiàng)目的一個(gè)Contributor,在2007年Eclipse Zone 就曾經(jīng)采訪過他。 所以稱他為EMF Databinding的專家一點(diǎn)也不過分。

          Note

          原文為路徑為http://tomsondev.bestsolution.at/2009/06/06/galileo-improved-emf-databinding-support/

          2. 原文

          我很高興的宣布在Eclipse-Galileo中EMF-2.5已經(jīng)開始支持新的Eclipse-Databinding API了。榮譽(yù)歸Matthew Hall,他審查我的代碼,幫我整理支撐部分并且整理文檔(詳細(xì)內(nèi)容在bug 262160 中)

          幾周前我成為了EMF項(xiàng)目的捐獻(xiàn)者,現(xiàn)在我負(fù)責(zé)Databinding對(duì)EMF的支持模塊。我將盡力修正API中的問題,回答Newsgroup中的問題。

          請?jiān)试S我在介紹這個(gè)API的優(yōu)點(diǎn)以及如何使用它之前聲明一點(diǎn):這個(gè)API還處于過渡期,他可能會(huì)有一些細(xì)微的變化。不過我們將會(huì)詳細(xì)說明變化的部分。

          我將用一個(gè)系列文章來展現(xiàn)這個(gè)新的EMF-Databinding:

          第一部分:創(chuàng)建領(lǐng)域模型
          第二部分:介紹新的Properties API
          第三部分:用EMF-Databinding綁定到TreeViewer
          第四部分:在master-detail模式中使用Properties API
          第五部分:用EMF-Databinding綁定到TableViewer
          第六部分:Write your own Property for unsupport Widget-Types
          第七部分:Make the storage system plugable

          為了讓你快速進(jìn)入EMF-Databinding中,我在前幾天做了一個(gè)例子。

          所有代碼都是基于EPL協(xié)議,你可以在從Eclipse-CVS 處獲得。

          posted @ 2009-11-07 22:39 Jet Geng 閱讀(2045) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共7頁: 1 2 3 4 5 6 7 下一頁 
          主站蜘蛛池模板: 特克斯县| 福泉市| 汾阳市| 始兴县| 惠来县| 卓资县| 宜宾县| 彭州市| 大足县| 咸宁市| 南召县| 万荣县| 鄂伦春自治旗| 朝阳市| 石渠县| 汉阴县| 南涧| 双桥区| 磴口县| 龙山县| 尼勒克县| 封丘县| 滦平县| 临海市| 板桥市| 华安县| 武威市| 池州市| 黑水县| 陕西省| 静乐县| 通化县| 三明市| 新化县| 韶关市| 砀山县| 广饶县| 巨野县| 吴川市| 铜山县| 邳州市|