2010年9月3日 #
摘要: 在項目中實現了一個工具(獨立運行的Java工程,打成jar包后 通過 java -jar **.jar 執行的。),該工具通過配置能夠實現一些業務功能,
并且該工具提供了接口與抽象類,供其他人擴展它的功能。
這就涉及到一個問題:別人在擴展它的時候,需要引入一些jar或者配置文件,本來工具依賴的jar和配置文件都記錄在manifest文件中了,
不可能別人加了jar包和配置文件就要修改manifest文件的。
所以我為工具提供了另外一個入口,通過 該通過的配置文件 進行配置 路徑,由于考慮到擴展的人可能多人或者多組,所以配置文件如下定義:
以ext_classpath開頭的,諸如 ext_classpath_biz1等對應的路徑均被加入到classpath中。
以ext_resourcepath開頭的,諸如 ext_resourcepath_biz1等對應的路徑均被加入classpath中。 閱讀全文
并且該工具提供了接口與抽象類,供其他人擴展它的功能。
這就涉及到一個問題:別人在擴展它的時候,需要引入一些jar或者配置文件,本來工具依賴的jar和配置文件都記錄在manifest文件中了,
不可能別人加了jar包和配置文件就要修改manifest文件的。
所以我為工具提供了另外一個入口,通過 該通過的配置文件 進行配置 路徑,由于考慮到擴展的人可能多人或者多組,所以配置文件如下定義:
以ext_classpath開頭的,諸如 ext_classpath_biz1等對應的路徑均被加入到classpath中。
以ext_resourcepath開頭的,諸如 ext_resourcepath_biz1等對應的路徑均被加入classpath中。 閱讀全文
摘要: 問題:
freemarker在解析數據格式的時候,默認將數字按3位來分割,例如1000被格式化為1,000,這樣做看似美觀,但在實際操作時候會帶來問題。例如我一個頁面有一個元素,該元素的值由后臺綁定且超過1000,那么當我要使用這個元素的值的時候,便會出現問題。 閱讀全文
freemarker在解析數據格式的時候,默認將數字按3位來分割,例如1000被格式化為1,000,這樣做看似美觀,但在實際操作時候會帶來問題。例如我一個頁面有一個元素,該元素的值由后臺綁定且超過1000,那么當我要使用這個元素的值的時候,便會出現問題。 閱讀全文
摘要: 總體上來說,jMock 是一個輕量級的模擬對象技術的實現。它具有以下特點:
1.可以用簡單易行的方法定義模擬對象,無需破壞本來的代碼結構表;
2.可以定義對象之間的交互,從而增強測試的穩定性;
3.可以集成到測試框架;
4.易擴充;
閱讀全文
1.可以用簡單易行的方法定義模擬對象,無需破壞本來的代碼結構表;
2.可以定義對象之間的交互,從而增強測試的穩定性;
3.可以集成到測試框架;
4.易擴充;
閱讀全文
摘要: 淺談TDD
JUnit4的用法介紹
測試方法 @Test
@Before(SetUp)
@After(TearDown)
@Before和@After小結
@BeforeClass和@AfterClass
測試異常@Test(expected=XXXException.class)
參數化測試
閱讀全文
JUnit4的用法介紹
測試方法 @Test
@Before(SetUp)
@After(TearDown)
@Before和@After小結
@BeforeClass和@AfterClass
測試異常@Test(expected=XXXException.class)
參數化測試
閱讀全文
摘要: 本次分頁組件著重于頁面(Freemarker部分)、及Action部分。
至于Service及持久層處理,只是做了一個模擬的實現,實際開發中,我是應用了iBatis,封裝了分頁調用。
由于用法有所不同,所以就不放在源碼范圍內,也不在這里介紹了。
這里的分頁功能只提供了 上一頁、下一頁、指定頁 的分頁,但在分頁Java代碼中包含了 首頁、末頁的實現。有需要的可自行添加。
分頁的效果如圖: 閱讀全文
至于Service及持久層處理,只是做了一個模擬的實現,實際開發中,我是應用了iBatis,封裝了分頁調用。
由于用法有所不同,所以就不放在源碼范圍內,也不在這里介紹了。
這里的分頁功能只提供了 上一頁、下一頁、指定頁 的分頁,但在分頁Java代碼中包含了 首頁、末頁的實現。有需要的可自行添加。
分頁的效果如圖: 閱讀全文
摘要: struts2 的Result type chain:基本用途是構造成一條動作鏈。前一個Action將控制權轉交給后一個Action,而前一個Action的狀態在后一個Action里仍然保持著。
但這種數據傳遞前提是數據要在Value stack里。
本文介紹基于Struts2 Result type 為 chian時, 通過增加攔截器、注解的方式,實現Action之間的數據傳遞。所傳遞的數據可以不在Value stack里。
實現的基本思路是Result type為chain時,在準備執行當前Action時,可以得到上一個Action對象的實例,上一個Action的實例被加入到了ValueStack中...
閱讀全文
但這種數據傳遞前提是數據要在Value stack里。
本文介紹基于Struts2 Result type 為 chian時, 通過增加攔截器、注解的方式,實現Action之間的數據傳遞。所傳遞的數據可以不在Value stack里。
實現的基本思路是Result type為chain時,在準備執行當前Action時,可以得到上一個Action對象的實例,上一個Action的實例被加入到了ValueStack中...
閱讀全文
摘要: 默認情況下,freemarker的變量必須有值,如果沒有被賦值的變量在頁面上使用就會拋出異常,出錯的信息都會顯示在頁面上,讓人感覺不爽(開發時還可以忍忍)。
以下介紹四種解決辦法。 閱讀全文
以下介紹四種解決辦法。 閱讀全文
摘要: 統一處理系統中的異常并將其以固定的格式顯示在頁面上。
當使用js做前臺的表單驗證的時候,提示用戶的輸入有問題,則可以使用 Message.showMsg('...'),提示信息也會顯示在同一個位置。
這樣就實現了異常提示信息的統一展示了。
這是一個比較簡易的實現,只提供一個思路。 閱讀全文
當使用js做前臺的表單驗證的時候,提示用戶的輸入有問題,則可以使用 Message.showMsg('...'),提示信息也會顯示在同一個位置。
這樣就實現了異常提示信息的統一展示了。
這是一個比較簡易的實現,只提供一個思路。 閱讀全文
摘要: 在上一篇 Hessian構建分布式系統應用 的基礎上,我們對程序進行改進。
現在有以下比較突出的問題:
a.如果hessian服務端我要做的業務很多,怎么辦?
我要定義很多個接口,然后再寫實現類,最煩的是還要配置它。
我的設想是,hessian服務只提供一個歸口,再此對外的接口實現中反射調用具體的業務類。
b.客戶端在調用時,每次調用遠程接口都要用以下代碼嗎: 閱讀全文
現在有以下比較突出的問題:
a.如果hessian服務端我要做的業務很多,怎么辦?
我要定義很多個接口,然后再寫實現類,最煩的是還要配置它。
我的設想是,hessian服務只提供一個歸口,再此對外的接口實現中反射調用具體的業務類。
b.客戶端在調用時,每次調用遠程接口都要用以下代碼嗎: 閱讀全文
摘要: Hessian是一個輕量級的remoting onhttp工具,使用簡單的方法提供了RMI的功能. 相比WebService,Hessian更簡單、快捷。
采用的是二進制RPC協議,因為采用的是二進制協議,所以它很適合于發送二進制數據。
本文將分為以下幾個內容:
一、一個簡單的Hessian調用例子
二、Spring+Hessian的例子
三、使我們的調用變得通用
第一?% 閱讀全文
采用的是二進制RPC協議,因為采用的是二進制協議,所以它很適合于發送二進制數據。
本文將分為以下幾個內容:
一、一個簡單的Hessian調用例子
二、Spring+Hessian的例子
三、使我們的調用變得通用
第一?% 閱讀全文
摘要: 通過上一篇 利用自定義Java注解實現資源注入 介紹的方法,我們實現了通過自定義注解完成了對DataSource資源的注入,但在實際應用中,我們通常不希望去顯式的去聲明這樣的MyAnnotationBeanProcessor對象來幫助我們完成注入,而是希望通過Spring幫我們“悄悄地”完成。 閱讀全文
摘要: 這里是想介紹一下如何通過Java的注解機制,實現對bean資源的自動注入。主要介紹實現方法,至于例子的實用性不必討論。
需求:一個應用有兩個數據庫,分別為DB-A,DB-B。
假設持久層框架使用iBatis來完成,那么SqlMapClient對象在創建時,對于兩個不同的DB連接要有兩個不同的SqlMapClient對象,
假設我們有一個Service類為MyService.java,該類中有兩個SqlMapClient對象分別對應著DB-A、DB-B。 閱讀全文
需求:一個應用有兩個數據庫,分別為DB-A,DB-B。
假設持久層框架使用iBatis來完成,那么SqlMapClient對象在創建時,對于兩個不同的DB連接要有兩個不同的SqlMapClient對象,
假設我們有一個Service類為MyService.java,該類中有兩個SqlMapClient對象分別對應著DB-A、DB-B。 閱讀全文
摘要: 繼上一篇 擴展Spring-實現對外部引用的屬性文件的 屬性值 進行加密、解密 ,這次要實現的是對整個外部屬性文件進行加密,Spring在加載這個外部屬性文件時進行解密。
分析過程與在 擴展Spring-實現對外部引用的屬性文件的 屬性值 進行加密、解密 中介紹的基本一致,只不過這次的入口就在 PropertiesLoaderSupport.java 這個抽象類的loadProperties方法。代碼片段:(注意注釋部分) 閱讀全文
分析過程與在 擴展Spring-實現對外部引用的屬性文件的 屬性值 進行加密、解密 中介紹的基本一致,只不過這次的入口就在 PropertiesLoaderSupport.java 這個抽象類的loadProperties方法。代碼片段:(注意注釋部分) 閱讀全文
摘要: 當我們在使用Spring進行開發時,我們經常使用占位符引用屬性文件的屬性值來簡化我們的配置及使我們的配置具有更高的靈活性和通用性。
使用這種方式的好處這里就不贅述了,這里要講的是怎樣對此外部屬性文件的屬性值進行加密、解密。 閱讀全文
使用這種方式的好處這里就不贅述了,這里要講的是怎樣對此外部屬性文件的屬性值進行加密、解密。 閱讀全文
摘要: 此程序需要ganymed-ssh2-build210.jar包。
下載地址:http://www.ganymed.ethz.ch/ssh2/
為了調試方便,可以將\ganymed-ssh2-build210\src下的代碼直接拷貝到我們的工程里,
此源碼的好處就是沒有依賴很多其他的包,拷貝過來干干凈凈。
此程序的目的是執行遠程機器上的Shell腳本。 閱讀全文
下載地址:http://www.ganymed.ethz.ch/ssh2/
為了調試方便,可以將\ganymed-ssh2-build210\src下的代碼直接拷貝到我們的工程里,
此源碼的好處就是沒有依賴很多其他的包,拷貝過來干干凈凈。
此程序的目的是執行遠程機器上的Shell腳本。 閱讀全文
摘要: 一個Java應用程序的日志里,出現了很不和諧的記錄:
java.io.IOException: Too many open files
在網上查了一些關于此異常的解決方案,基本上都是說要擴大linux系統的文件句柄數限制。
但如果程序對于Socket、Stream等使用后沒能及時關閉的話,擴大這個文件句柄數限制是治標不治本的。
閱讀全文
java.io.IOException: Too many open files
在網上查了一些關于此異常的解決方案,基本上都是說要擴大linux系統的文件句柄數限制。
但如果程序對于Socket、Stream等使用后沒能及時關閉的話,擴大這個文件句柄數限制是治標不治本的。
閱讀全文
摘要: 他山之石可以攻玉。
Spring為我們提供了一個PropertyPlaceholderConfigurer,它能夠使Bean在配置時引用外部屬性文件。
可以將BeanFactory定義中的一些屬性值放到另一個單獨的標準Java Properties文件中。
我們在部署應用時只需要在屬性文件中對一些屬性進行修改,而不用對主XML定義文件或容器所用文件進行復雜和危險的修改。
讓我們看看下面的例子: 閱讀全文
Spring為我們提供了一個PropertyPlaceholderConfigurer,它能夠使Bean在配置時引用外部屬性文件。
可以將BeanFactory定義中的一些屬性值放到另一個單獨的標準Java Properties文件中。
我們在部署應用時只需要在屬性文件中對一些屬性進行修改,而不用對主XML定義文件或容器所用文件進行復雜和危險的修改。
讓我們看看下面的例子: 閱讀全文
摘要:
LINUX常用命令(基礎)
1. man 對你熟悉或不熟悉的命令提供幫助解釋
eg:man ls 就可以查看ls相關的用法
注:按q鍵或者ctrl+c退出,在linux下可以使用ctrl+c終止當前程序運行。
閱讀全文
LINUX常用命令(基礎)
1. man 對你熟悉或不熟悉的命令提供幫助解釋
eg:man ls 就可以查看ls相關的用法
注:按q鍵或者ctrl+c退出,在linux下可以使用ctrl+c終止當前程序運行。
閱讀全文
摘要: cglib版本為cglib-nodep-2.2.jar.
本次只為演示在使用中出現的Java內存泄漏的問題,以及如何解決這樣的問題。
cglib的應用是非常多的,但是當我們使用它的時候,如果一不小心,等出了問題再去查,就比較杯具了。所以好的解決方案就是寫代碼時就注意這些細節。
近期項目在做壓力測試,就暴露了內存泄漏的Bug,cglib的使用不當,就是原因之一。 閱讀全文
本次只為演示在使用中出現的Java內存泄漏的問題,以及如何解決這樣的問題。
cglib的應用是非常多的,但是當我們使用它的時候,如果一不小心,等出了問題再去查,就比較杯具了。所以好的解決方案就是寫代碼時就注意這些細節。
近期項目在做壓力測試,就暴露了內存泄漏的Bug,cglib的使用不當,就是原因之一。 閱讀全文
摘要: Quartz版本為1.8.3
Spring版本為2.5
自定義作業表 QRTZ_JOB。
其中定義 作業標識、作業名稱、類名、觸發器名稱、觸發器腳本等。
下面看看在Spring中如何配置Quartz。
閱讀全文
Spring版本為2.5
自定義作業表 QRTZ_JOB。
其中定義 作業標識、作業名稱、類名、觸發器名稱、觸發器腳本等。
下面看看在Spring中如何配置Quartz。
閱讀全文
摘要: 接上一篇Maven2 學習筆記[5]-構建一個Java Application項目。
一個一個來處理不符合我們需求的地方。
1.問題:在QrtzPrj.jar的同一目錄下并沒有lib文件夾,也沒有依賴的jar包。
這個問題的解決辦法便是引入Maven的maven-dependency-plugin插件。
內容如下:(配置在 ... 中) 閱讀全文
一個一個來處理不符合我們需求的地方。
1.問題:在QrtzPrj.jar的同一目錄下并沒有lib文件夾,也沒有依賴的jar包。
這個問題的解決辦法便是引入Maven的maven-dependency-plugin插件。
內容如下:(配置在
摘要: 這個 Java App 項目,包含的東西還是蠻多的。
在我構建這個項目的過程中遇到了很多問題,讓我著實的痛苦了一天,在這一天中,我在網上看到很多構建類似項目的文章,但寫的都不是很詳細。至少不能滿足我的需求。
對于像我這樣,需要在1天內就要搞定打包的人來講,這確實很失望。
所以我要把我構建這個項目的過程,記錄下來,希望能對 與我有類似需求的人 有一些幫助。
里面的一些配置也許不夠完美,還請指正。謝謝。 閱讀全文
在我構建這個項目的過程中遇到了很多問題,讓我著實的痛苦了一天,在這一天中,我在網上看到很多構建類似項目的文章,但寫的都不是很詳細。至少不能滿足我的需求。
對于像我這樣,需要在1天內就要搞定打包的人來講,這確實很失望。
所以我要把我構建這個項目的過程,記錄下來,希望能對 與我有類似需求的人 有一些幫助。
里面的一些配置也許不夠完美,還請指正。謝謝。 閱讀全文
摘要: 搭建repository私服的用處有很多。
除了如何如何管理好jar包外,還有就是當 maven2 無法自動獲取某個jar包時,(例如 oracle的jdbc jar包)
我們需要手動下載此jar包,將其上傳至我們得私服,填寫groupId,artifactId,version等信息。
然后再在pom.xml里進行依賴配置。 閱讀全文
除了如何如何管理好jar包外,還有就是當 maven2 無法自動獲取某個jar包時,(例如 oracle的jdbc jar包)
我們需要手動下載此jar包,將其上傳至我們得私服,填寫groupId,artifactId,version等信息。
然后再在pom.xml里進行依賴配置。 閱讀全文
摘要: 位于Maven2安裝目錄conf文件夾下的settings.xml文件,是maven2作為全局性質的配置。
打開剛剛安裝的Maven2的settings.xml文件,里面基本都是被注釋掉了的。
settings.xml有主要有下面幾個配置節點:
localRepository:用于設置本地倉庫的位置。如果不設置此節點,則本地倉庫在 ${user.dir}/.m2/repository。 閱讀全文
打開剛剛安裝的Maven2的settings.xml文件,里面基本都是被注釋掉了的。
settings.xml有主要有下面幾個配置節點:
localRepository:用于設置本地倉庫的位置。如果不設置此節點,則本地倉庫在 ${user.dir}/.m2/repository。 閱讀全文
摘要: 1.創建一個項目
建立一個文件夾mvntest(由于我是在做測試,所以隨便建立一個文件夾,但習慣上,這應該是我們的Workspaces。)
通過cmd切換到此文件夾下:
cd mvntest
mvn archetype:create -DgroupId=com.jn -DartifactId=HW -DpackageName=com.jn
然后看看 mvntest的文件夾下發生了什么變化。 閱讀全文
建立一個文件夾mvntest(由于我是在做測試,所以隨便建立一個文件夾,但習慣上,這應該是我們的Workspaces。)
通過cmd切換到此文件夾下:
cd mvntest
mvn archetype:create -DgroupId=com.jn -DartifactId=HW -DpackageName=com.jn
然后看看 mvntest的文件夾下發生了什么變化。 閱讀全文