posts - 156,  comments - 601,  trackbacks - 0
            2008年7月8日
               摘要: 1. Springboot config示例與原理介紹1.1 Springboot config示例Springboot給我們提供了非常便捷與方便的配置使用方式,常用的使用示例有以下兩種:1)使用@ConfigurationProperties 讀取多個(gè)屬性使用方法:@ConfigurationProperties(prefix = "spring.datasource")使用說(shuō)明:提供...  閱讀全文
          posted @ 2021-04-08 20:00 x.matthew 閱讀(546) | 評(píng)論 (0)編輯 收藏
               摘要: jprotobuf-rpc-http 是應(yīng)用jprotobuf類庫(kù)實(shí)現(xiàn)基于http協(xié)議的RPC開(kāi)發(fā)組件。 目前1.0提供可以直接把Google protobuf的IDL定義語(yǔ)言發(fā)布成RPC服務(wù),客戶端也可以直接應(yīng)用IDL定義語(yǔ)言進(jìn)行動(dòng)態(tài)創(chuàng)建,幫助開(kāi)發(fā)完全省去了手工編譯protobuf IDL語(yǔ)言的麻煩。  閱讀全文
          posted @ 2014-10-10 15:20 x.matthew 閱讀(3556) | 評(píng)論 (0)編輯 收藏
               摘要: JProtobuf官方網(wǎng)址:https://github.com/jhunters/jprotobuf
          1.0.0 支持普通類型,嵌套對(duì)象以及對(duì)象數(shù)組的Protobuf協(xié)議的序列化與反序列化實(shí)現(xiàn)。(注解替換proto描述文件)
          1.0.1 由注解對(duì)象動(dòng)態(tài)生成Protobuf的IDL描述文件內(nèi)容。
          1.0.3 增加由.proto 描述文件動(dòng)態(tài)生成Protobuf操作對(duì)象的支持,詳見(jiàn)下面使用說(shuō)明。  閱讀全文
          posted @ 2014-09-30 11:43 x.matthew 閱讀(4919) | 評(píng)論 (4)編輯 收藏
               摘要: 如果大家有遇到過(guò)Java內(nèi)存泄露問(wèn)題,而且親自動(dòng)手去定位和分析經(jīng)歷的同學(xué)來(lái)講,獲取Java的堆內(nèi)信息對(duì)了內(nèi)存使用情況的問(wèn)題分析和定位是非常有幫助了。例如我們常用的MAT工具,可以較方便的讓我們定位程序中內(nèi)存的使用情況,是哪塊導(dǎo)致了內(nèi)存的泄露等。
          但由于傳統(tǒng)的分析過(guò)程比較麻煩,需要使用Jdk的jmap(Java Memory Map)命令把heap內(nèi)存dump到一個(gè)文件,然后用MAT進(jìn)行分析。所以本文介紹一種方法可以實(shí)現(xiàn)在線查看heap內(nèi)存的使用情況,并附上源碼實(shí)現(xiàn),希望對(duì)大家有幫助。由于目前調(diào)研中只找到了Sun JDK6以及以上版本的實(shí)現(xiàn),所以目前該方案只支持Sun JDK6或以上。如果其他同學(xué)有其它版本的JDK實(shí)現(xiàn)分享,歡迎一起交流。  閱讀全文
          posted @ 2013-02-20 16:30 x.matthew 閱讀(6329) | 評(píng)論 (9)編輯 收藏
               摘要: CyclicBarrier一個(gè)同步輔助類,它允許一組線程互相等待,直到到達(dá)某個(gè)公共屏障點(diǎn) (common barrier point)。假如在涉及一組固定大小的線程的程序應(yīng)用中,要求這些線程必須不時(shí)地互相等待(保證所有線程都執(zhí)行完畢才返回),那么選擇 CyclicBarrier 就會(huì)讓這個(gè)實(shí)現(xiàn)變得非常容易。CyclicBarrier 在釋放等待線程后可以重用,所以又稱它為循環(huán) 的 barrier。  閱讀全文
          posted @ 2012-06-28 13:34 x.matthew 閱讀(2765) | 評(píng)論 (1)編輯 收藏
               摘要: 本文通過(guò)對(duì)Apache Commons Collections 項(xiàng)目中LRUMap這個(gè)集合類的源代碼進(jìn)行詳細(xì)解讀,為幫助大家更好的了解這個(gè)集合類的實(shí)現(xiàn)原理以及使用如何該集合類。
          首先介紹一下LRU算法. LRU是由Least Recently Used的首字母組成,表示最近最少使用的含義,一般使用在對(duì)象淘汰算法上。也是比較常見(jiàn)的一種淘汰算法。  閱讀全文
          posted @ 2012-06-28 13:34 x.matthew 閱讀(5874) | 評(píng)論 (1)編輯 收藏
               摘要: Treap=Tree+Heap。Treap本身是一棵二叉搜索樹(shù),它的左子樹(shù)和右子樹(shù)也分別是一個(gè)Treap,和一般的二叉搜索樹(shù)不同的是,Treap記錄一個(gè)額外的數(shù)據(jù),就是優(yōu)先級(jí)。Treap在以關(guān)鍵碼構(gòu)成二叉搜索樹(shù)的同時(shí),還按優(yōu)先級(jí)來(lái)滿足堆的性質(zhì)(在這里我們假設(shè)節(jié)點(diǎn)的優(yōu)先級(jí)大于該節(jié)點(diǎn)的孩子的優(yōu)先級(jí))。但是這里要注意的是Treap和二叉堆有一點(diǎn)不同,就是二叉堆必須是完全二叉樹(shù),而Treap可以并不一定是。  閱讀全文
          posted @ 2012-05-16 14:37 x.matthew 閱讀(4304) | 評(píng)論 (0)編輯 收藏
               摘要: 對(duì)于Mybatis 擁有的Lazy Load(有中文翻譯成延遲加載)功能,應(yīng)該很同學(xué)都有聽(tīng)說(shuō)過(guò),今天主要與大家一起來(lái)解讀一下Mybatis在Lazy Load功能的實(shí)現(xiàn)的代碼。Lazy Load實(shí)現(xiàn)的功能很好理解,就是在數(shù)據(jù)與對(duì)象進(jìn)行Mapping操作時(shí),只有當(dāng)真正使用該對(duì)象時(shí),才進(jìn)行Mapping操作,以減少不必要的數(shù)據(jù)庫(kù)查詢開(kāi)銷,從而提升了程序的效率。  閱讀全文
          posted @ 2011-12-29 19:14 x.matthew 閱讀(5049) | 評(píng)論 (1)編輯 收藏
               摘要: Thrift出自Facebook用于后臺(tái)各個(gè)服務(wù)間的通訊,Thrift的設(shè)計(jì)強(qiáng)調(diào)統(tǒng)一的編程接口的多語(yǔ)言通訊框架.
          本文通過(guò)一個(gè)實(shí)例來(lái)介紹一下Thrift最基本的應(yīng)用。  閱讀全文
          posted @ 2011-11-12 18:57 x.matthew 閱讀(17918) | 評(píng)論 (4)編輯 收藏
               摘要: JDK Proxy AOP實(shí)現(xiàn)與Cglib Proxy AOP實(shí)現(xiàn)對(duì)比。  閱讀全文
          posted @ 2011-10-10 19:24 x.matthew 閱讀(5030) | 評(píng)論 (1)編輯 收藏
               摘要: 在SQL開(kāi)發(fā)過(guò)程中,動(dòng)態(tài)構(gòu)建In集合條件查詢是比較常見(jiàn)的用法,在Mybatis中提供了foreach功能,該功能比較強(qiáng)大,但由于官方文檔對(duì)這塊的使用,描述的比較簡(jiǎn)短,細(xì)節(jié)上也被忽略掉了(可能是開(kāi)源項(xiàng)目文檔一貫的問(wèn)題吧),也使用不少同學(xué)在使用中遇到了問(wèn)題。特別是foreach這個(gè)函數(shù)中,collection屬性做什么用,有什么注意事項(xiàng)。由于文檔不全,這塊只能通過(guò)源代碼剖析的方式來(lái)分析一下各個(gè)屬性的相關(guān)要求。  閱讀全文
          posted @ 2011-08-31 14:38 x.matthew 閱讀(50572) | 評(píng)論 (4)編輯 收藏
               摘要: 本文主要介紹什么是API,以及API兼容的重要性,最終給出方案如何評(píng)估API,以及如何做到API兼容。  閱讀全文
          posted @ 2011-07-29 19:35 x.matthew 閱讀(583) | 評(píng)論 (0)編輯 收藏
               摘要: Spring聲明式事務(wù)功能應(yīng)該是大家應(yīng)用Spring中使用的最多的功能之一了,的確該功能極大的簡(jiǎn)化了大家對(duì)數(shù)據(jù)庫(kù)操作的。目前Spring支持的聲明式事務(wù)有兩個(gè)配置方式,一種是XML配置方式,另一種是注解方式

          針對(duì)配置這塊,XML配置同學(xué)們會(huì)覺(jué)得比較麻煩,特別是針對(duì)事務(wù)屬性的配置,所以補(bǔ)充一下本塊配置說(shuō)明,特分享給大家,希望對(duì)大家有幫助。  閱讀全文
          posted @ 2011-06-23 13:25 x.matthew 閱讀(4389) | 評(píng)論 (3)編輯 收藏
               摘要: 本月Tomcat 7.0.14版本正式發(fā)布,其最顯著的一個(gè)新功能就是引入了StuckThreadDetectionValve功能,該功能可以幫助分析和檢查耗時(shí)的請(qǐng)求或潛在可能會(huì)出現(xiàn)請(qǐng)求線程阻塞等情況  閱讀全文
          posted @ 2011-05-25 21:51 x.matthew 閱讀(3071) | 評(píng)論 (4)編輯 收藏
               摘要: 本文章會(huì)通過(guò)連載的方式來(lái)深入了解和學(xué)習(xí)Spring相關(guān)核心技術(shù)和實(shí)現(xiàn)原理。包括Spring的Bean生命周期管理,聲明性事務(wù)管理,AOP管理,注解應(yīng)用實(shí)現(xiàn),以及在其上面進(jìn)行擴(kuò)展的相關(guān)應(yīng)用。

          本篇技術(shù)文章將介紹Spring聲明式事務(wù)管理實(shí)現(xiàn)技術(shù)細(xì)節(jié)的剖析。  閱讀全文
          posted @ 2011-04-29 10:54 x.matthew 閱讀(2186) | 評(píng)論 (1)編輯 收藏
               摘要: 講起靜態(tài)代碼分析工具,估計(jì)大家耳熟能詳?shù)亩寄苤v出幾個(gè)來(lái),像PMD, Checkstyle, Findbug等。沒(méi)錯(cuò)這些都是我們?nèi)粘>幋a代碼時(shí)用于提升我們代碼質(zhì)量的好工具,本文將從PMD工具實(shí)現(xiàn)的規(guī)則出發(fā),通過(guò)這些規(guī)則的定義來(lái)學(xué)習(xí)一下代碼優(yōu)化的技巧,希望通過(guò)這些技巧的介紹可以幫助大家在編碼過(guò)程中提升大家的代碼編寫(xiě)質(zhì)量。同時(shí)也算給大家介紹一個(gè)比較不錯(cuò)的途徑去學(xué)習(xí)改進(jìn)代碼編寫(xiě)質(zhì)量的方法。  閱讀全文
          posted @ 2011-04-29 10:54 x.matthew 閱讀(2363) | 評(píng)論 (2)編輯 收藏
               摘要: 本文章會(huì)通過(guò)連載的方式來(lái)深入了解和學(xué)習(xí)Spring相關(guān)核心技術(shù)和實(shí)現(xiàn)原理。包括Spring的Bean生命周期管理,聲明性事務(wù)管理,AOP管理,注解應(yīng)用實(shí)現(xiàn),以及在其上面進(jìn)行擴(kuò)展的相關(guān)應(yīng)用。

          本篇技術(shù)文章介紹Spring AOP的實(shí)現(xiàn)。  閱讀全文
          posted @ 2011-04-01 10:52 x.matthew 閱讀(2355) | 評(píng)論 (0)編輯 收藏
               摘要: 本塊文章會(huì)通過(guò)連載的方式來(lái)深入了解和學(xué)習(xí)Spring相關(guān)核心技術(shù)和實(shí)現(xiàn)原理。包括Spring的Bean生命周期管理,聲明性事務(wù)管理,AOP管理,注解應(yīng)用實(shí)現(xiàn),以及在其上面進(jìn)行擴(kuò)展的相關(guān)應(yīng)用進(jìn)行介紹。

          本篇技術(shù)文章將作為Spring入門(mén)篇。
            閱讀全文
          posted @ 2011-03-14 19:24 x.matthew 閱讀(2453) | 評(píng)論 (3)編輯 收藏
               摘要: 本文是針對(duì) 之前的通過(guò)Spring2.5對(duì)單元測(cè)試的Annotation支持進(jìn)行TDD開(kāi)發(fā) 進(jìn)行擴(kuò)展,增加了Struts Action層的測(cè)試實(shí)現(xiàn)。雖然Action沒(méi)有注入到Spring容器,也可以通過(guò) getProxyAction方法,實(shí)現(xiàn)Spring容器的屬性依賴注入實(shí)現(xiàn)  閱讀全文
          posted @ 2011-02-27 19:15 x.matthew 閱讀(1950) | 評(píng)論 (2)編輯 收藏
               摘要: 介紹:
          Hibernate Envers目的是根據(jù)對(duì)實(shí)體的設(shè)置,提供記錄執(zhí)行數(shù)據(jù)變更歷史的功能(數(shù)據(jù)變更版本)。它實(shí)現(xiàn)原理是通過(guò)對(duì)Hibernate的操作事件監(jiān)聽(tīng)并根據(jù)
          基于Annoatation的配置來(lái)記錄修改數(shù)據(jù)的內(nèi)容。  閱讀全文
          posted @ 2010-08-22 23:20 x.matthew 閱讀(9447) | 評(píng)論 (1)編輯 收藏
               摘要: 在上篇博客中,介紹了如何借助Spring Module項(xiàng)目,配置聲明式緩存功能實(shí)現(xiàn),文中只針對(duì)Ehcahce的實(shí)現(xiàn)進(jìn)行了講解,其它Spring Module項(xiàng)目把這塊的功能做了一個(gè)很好的抽取,使其能更好的對(duì)其它的緩存框架的支持和擴(kuò)展。筆者正好利用該代碼框架實(shí)現(xiàn)了與Memcached服務(wù)的集成,本文將得點(diǎn)通過(guò)源代碼解講一下抽取這層的實(shí)現(xiàn),希望大家有所幫助。  閱讀全文
          posted @ 2010-05-13 19:53 x.matthew 閱讀(4460) | 評(píng)論 (2)編輯 收藏
               摘要: 前言:
          如果大家使用過(guò)Spring事務(wù)管理,會(huì)發(fā)現(xiàn)Spring提供的事務(wù)分為“只讀”和“讀寫(xiě)”事務(wù)兩類。這不免就會(huì)疑問(wèn)這兩種事務(wù)會(huì)有什么不同?本文則通過(guò)對(duì)Spring和Hibernate源代碼的剖析來(lái)找出這兩種事務(wù)的區(qū)別。特別是運(yùn)行性能方面的區(qū)別。
          文章調(diào)試使用的版本為 Spring 2.5.6.SEC01 ,Hibernate 3.3.2.GA。  閱讀全文
          posted @ 2010-05-06 19:31 x.matthew 閱讀(6052) | 評(píng)論 (1)編輯 收藏
               摘要: 本筆記針對(duì)Spring-dynamic 1.2.0版本進(jìn)行一個(gè)簡(jiǎn)單開(kāi)發(fā)應(yīng)用講解,使用Apache Felix-1.8.0作為osgi運(yùn)行環(huán)境。  閱讀全文
          posted @ 2010-04-29 19:08 x.matthew 閱讀(4546) | 評(píng)論 (2)編輯 收藏
               摘要: 前言:
          本文檔將講解一下,如何借助Spring Module項(xiàng)目,實(shí)現(xiàn)配置聲明性緩存功能。
          說(shuō)明:
          本檔的配置經(jīng)過(guò)本人測(cè)試,都能正確運(yùn)行。
          運(yùn)行環(huán)境: Jdk5.0, Spring-2.5, Spring-modules-0.9, ehcache-1.6.0-beta4.jar  閱讀全文
          posted @ 2010-04-22 19:47 x.matthew 閱讀(3300) | 評(píng)論 (4)編輯 收藏
          兩種Java代碼實(shí)現(xiàn)方法:

           通過(guò)jmx rmi 連接:
                    HashMap env = new HashMap(1); 
                  
          final String[]    credentials    = new String[] { "admin""adminadmin" };
                  env.put( JMXConnector.CREDENTIALS, credentials );
                  
          // so our JMXConnectorProvider may be found
                  
          //env.put( JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "com.sun.enterprise.admin.jmx.remote.protocol" );
                  JMXServiceURL serviceURL = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://localhost:8686/management/rmi-jmx-connector");
                  JMXConnector connector 
          = JMXConnectorFactory.connect(serviceURL , env); 
                  MBeanServerConnection connection 
          = connector.getMBeanServerConnection(); 
                      
                  Object o 
          = connection.invoke(new ObjectName("com.sun.appserv:type=domain,category=config"), "getName"new Object[]{}, new String[]{});
                  System.out.println(o);
           通過(guò)jmx http連接
                  HashMap env = new HashMap(4);
                  env.put( 
          "com.sun.enterprise.as.http.auth""BASIC" );
                  env.put( 
          "USER""admin" );
                  env.put( 
          "PASSWORD""adminadmin" );
                  env.put( JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, 
          "com.sun.enterprise.admin.jmx.remote.protocol" );
                  JMXServiceURL serviceURL 
          = new JMXServiceURL("s1ashttp""localhost"4848);
                  
          final JMXConnector conn    = JMXConnectorFactory.connect( serviceURL, env );
                  MBeanServerConnection connection 
          = conn.getMBeanServerConnection(); 
                  
                  Object o 
          = connection.invoke(new ObjectName("com.sun.appserv:type=domain,category=config"), "getName"new Object[]{}, new String[]{});
                  System.out.println(o);


          Good Luck!
          Yours Matthew!

          posted @ 2010-03-29 15:42 x.matthew 閱讀(2537) | 評(píng)論 (0)編輯 收藏
               摘要: 經(jīng)過(guò)這么長(zhǎng)時(shí)候的等候,終于期待到了Spring3.0 GA版本的發(fā)布,猜想眾多和我一樣期待的朋友應(yīng)該是會(huì)非常高興等到這一天。

          Spring3.0主要新增的特征如下:
          1. 完整的Rest API支持(可惜不兼容JSR311規(guī)范)
          2. Java EE 6 的初步支持
          3. 基于聲明式的數(shù)據(jù)模塊校驗(yàn)功能
          4. 支持內(nèi)置數(shù)據(jù)庫(kù)
          5. Spring Expression Language
          6. 基于原生的Java API支持,如泛型支持。  閱讀全文
          posted @ 2009-12-15 22:24 x.matthew 閱讀(1627) | 評(píng)論 (0)編輯 收藏
               摘要: 本示例中,應(yīng)用netbeans 6.0版本,演示使用Netbeans IDE自帶的Profiler工具,跟蹤Java應(yīng)用程序中發(fā)生的內(nèi)存泄漏問(wèn)題。本人已經(jīng)對(duì)文檔中的操作過(guò)程進(jìn)行嘗試,的確能進(jìn)行內(nèi)存泄漏的定位,希望能給大家?guī)?lái)幫助。并祝大家國(guó)慶,中秋雙節(jié)快樂(lè)!
          轉(zhuǎn)自: http://www.javapassion.com/handsonlabs/nbprofilermemory/  閱讀全文
          posted @ 2009-10-07 11:53 x.matthew 閱讀(2860) | 評(píng)論 (1)編輯 收藏
               摘要: 本文將介紹使用Eclipse JPDA,在Eclipse的開(kāi)發(fā)環(huán)境下對(duì)遠(yuǎn)程運(yùn)行的Java程序進(jìn)行調(diào)試操作。

          請(qǐng)按以下步驟進(jìn)行(本人已經(jīng)在Eclipse 3.2, JDK 1.5_08)環(huán)境下調(diào)試成功。

          1. 在啟動(dòng)Java程序時(shí),在Java啟動(dòng)命令中,加入以下參數(shù)
          Xrunjdwp:transport=dt_socket,address=1234,server=y,suspend=n
          注: suspend參數(shù)表示,啟動(dòng)時(shí),是否等待JPDA調(diào)試端連接。n表示否  閱讀全文
          posted @ 2009-08-08 11:10 x.matthew 閱讀(4101) | 評(píng)論 (3)編輯 收藏
               摘要: 在上次發(fā)布http://www.aygfsteel.com/xmatthew/archive/2009/06/30/284825.html游戲之后收到很多人的關(guān)注,在此本人表示感謝。這次把整理后的服務(wù)器和客戶端的程序打包上傳,希望大家能喜歡玩這個(gè)游戲。  閱讀全文
          posted @ 2009-07-06 13:12 x.matthew 閱讀(3659) | 評(píng)論 (10)編輯 收藏
               摘要: 記得剛開(kāi)始學(xué)習(xí)中國(guó)象棋,還不太明白象棋的規(guī)則。所以自然是下得比較糗,所以也不知道是從哪里學(xué)來(lái)了這種玩法,就是只使用半張的 棋盤(pán)空間,把紅黑兩方的棋子都反面朝下打散,然后玩家就一個(gè)個(gè)把棋子翻過(guò)來(lái),比誰(shuí)的棋子大,如果相鄰的棋子,大的一方可以把小的一方吃掉,到最后誰(shuí)的棋子先被吃光,則就輸了。  閱讀全文
          posted @ 2009-06-30 19:43 x.matthew 閱讀(2279) | 評(píng)論 (10)編輯 收藏
               摘要: 針對(duì) JDK IO部分整理的類圖
            閱讀全文
          posted @ 2009-06-13 10:38 x.matthew 閱讀(3425) | 評(píng)論 (6)編輯 收藏

            由于多年一直在使用MySQL數(shù)據(jù)庫(kù),對(duì)其可謂感情深厚。MySQL 從發(fā)展初期到現(xiàn)在幾經(jīng)展轉(zhuǎn),似乎又重回到了最初的開(kāi)創(chuàng)時(shí)期的階段。不同的是它不在稚嫰,又是更加成熟,發(fā)展的更加穩(wěn)健。祝愿MySQL一路發(fā)展順利。

            開(kāi)源數(shù)據(jù)庫(kù)聯(lián)盟: http://opendatabasealliance.com/





          Good Luck!
          Yours Matthew!
          posted @ 2009-05-15 09:23 x.matthew 閱讀(1524) | 評(píng)論 (0)編輯 收藏
               摘要: 終于盼到了五一節(jié),先祝大家節(jié)日快樂(lè)!
          有一陣子沒(méi)有整理該項(xiàng)目,盼到了五一節(jié),本人也花了些時(shí)間,繼續(xù)改進(jìn)了該項(xiàng)目的一些功能。此次發(fā)布版本為1.2.0。
          此次發(fā)布包含以下內(nèi)容:
          * Spring-Integration支持。目前支持最新的版本 1.2.0。對(duì)Spring-Integration的支持,可以更大的利用Spring-Integration提供的擴(kuò)展組件。如JMS, FTP, WebService, RMI, HTTP, Stream等。
          * 全新的項(xiàng)目的主頁(yè),方便大家的交流。
          * 重新整理了更詳細(xì)的 用戶文檔和平臺(tái)開(kāi)發(fā)者文檔(包括與Spring-Integration集成開(kāi)發(fā)文檔)。  閱讀全文
          posted @ 2009-05-01 22:15 x.matthew 閱讀(2670) | 評(píng)論 (4)編輯 收藏
               摘要: JNorm是一個(gè)Java代碼分析工具。
          它能夠探測(cè)代碼中的哪些功能可以用現(xiàn)存的開(kāi)源項(xiàng)目代替,幫助提高代碼的可復(fù)用性,可維護(hù)性。
          該項(xiàng)目還提供一個(gè)輔助使用的Eclipse插件。  閱讀全文
          posted @ 2009-04-14 18:39 x.matthew 閱讀(1513) | 評(píng)論 (4)編輯 收藏
               摘要: 本文以javarebel-2.0 free版本為例,包括如何配置在使用Eclipse插件開(kāi)發(fā)tomcat應(yīng)用時(shí),實(shí)現(xiàn)即時(shí)重載java class更改。  閱讀全文
          posted @ 2009-04-02 11:58 x.matthew 閱讀(2643) | 評(píng)論 (2)編輯 收藏
               摘要: 在Spring官方網(wǎng)站閑逛,發(fā)現(xiàn)Grails 1.1在 2009-03-12正式發(fā)布了.

          主要新加入的功能特征:
          1. Standalone GORM.(可脫離Grails框架單獨(dú)運(yùn)行)
          2. Maven & Ant+Ivy Support(Grails項(xiàng)目可以通過(guò)Maven和Ant Ivy編譯)
          3. Better Plugins (更好的插件實(shí)現(xiàn),支持通知項(xiàng)目的metadata文件進(jìn)行安裝)
          4. Spring Namespace Support
          5. JSP Tag Library Support JSP標(biāo)簽庫(kù)支持  閱讀全文
          posted @ 2009-03-15 22:48 x.matthew 閱讀(1260) | 評(píng)論 (1)編輯 收藏
               摘要: 建議學(xué)習(xí)存儲(chǔ)技術(shù)可以分為前期準(zhǔn)備階段、存儲(chǔ)新人階段、存儲(chǔ)老人階段、存儲(chǔ)高人階段和存儲(chǔ)牛人階段,每個(gè)階段應(yīng)該學(xué)習(xí)或應(yīng)該達(dá)到的目標(biāo)如下  閱讀全文
          posted @ 2009-03-10 21:50 x.matthew 閱讀(697) | 評(píng)論 (2)編輯 收藏
               摘要: 期待這么長(zhǎng)時(shí)間,終于在SpringSource官方網(wǎng)站發(fā)布了M2版本,大部分新特性已經(jīng)開(kāi)發(fā)完成

          * 從Spring3.0開(kāi)始,就只支持java 5及以上的版本。開(kāi)始泛型的支持,M2版本中的HibernateTemplate已經(jīng)實(shí)現(xiàn)了泛型的支持。
          * 擴(kuò)展了對(duì)并發(fā)的支持。M2版本將對(duì)java 5的 java.util.concurrent 類庫(kù)進(jìn)行更緊密的集成。在將來(lái)的Spring 3.0 M3版本會(huì)更進(jìn)一步對(duì)配置進(jìn)行簡(jiǎn)單,以方便使用。  閱讀全文
          posted @ 2009-02-27 21:10 x.matthew 閱讀(2698) | 評(píng)論 (2)編輯 收藏
               摘要: 本人參考官方文檔整理出來(lái)最完整的Quartz CronTrigger配置說(shuō)明.  閱讀全文
          posted @ 2009-02-15 14:41 x.matthew 閱讀(72300) | 評(píng)論 (12)編輯 收藏
               摘要: 之前向大家推薦過(guò)一款Java反編譯工具Java Decompiler, 目前該工具有對(duì)其進(jìn)行較大的更新,所以也再次推薦給大家。

          官網(wǎng)下載網(wǎng)址:http://java.decompiler.free.fr/
          Eclipse 插件更新Url http://java.decompiler.free.fr/jd-eclipse/update  閱讀全文
          posted @ 2009-02-05 20:34 x.matthew 閱讀(7015) | 評(píng)論 (3)編輯 收藏
               摘要: iBatis Java Mapper是iBatis+Spring的一個(gè)擴(kuò)展,能夠讓你使用Java類和接口來(lái)代替用于object-SQL映射的XML文檔。  閱讀全文
          posted @ 2009-01-05 21:35 x.matthew 閱讀(2809) | 評(píng)論 (0)編輯 收藏
               摘要: Spy2server項(xiàng)目發(fā)布至今,也有大半年了,很高興有很多的朋友在使用該項(xiàng)目并給本人也提供很多建議,在此表示感謝。雖然發(fā)布至今有這么長(zhǎng)時(shí)間,但自己真得檢討,一直沒(méi)有時(shí)間對(duì)文檔進(jìn)行整理,加上最近項(xiàng)目比較忙所以一直就拖到了現(xiàn)在。在元旦之際終于有時(shí)間進(jìn)行整理,現(xiàn)在共享大家,希望大家多提些建議。當(dāng)然Spy2servers項(xiàng)目我還會(huì)擴(kuò)展下去,下一部會(huì)對(duì)Spring-integration集成,達(dá)到更好的功能擴(kuò)展。  閱讀全文
          posted @ 2009-01-03 17:37 x.matthew 閱讀(2104) | 評(píng)論 (1)編輯 收藏
               摘要: svenson是一個(gè)用于生成和解析JSON數(shù)據(jù)格式的Java5開(kāi)源類庫(kù)。它能夠?qū)SON數(shù)據(jù)集轉(zhuǎn)換成Java對(duì)象或相反的操作。  閱讀全文
          posted @ 2008-12-29 21:35 x.matthew 閱讀(3122) | 評(píng)論 (0)編輯 收藏
               摘要: 期待了許久的JSR-315(Servlet 3.0)規(guī)范終于Public Review了,這下本人估計(jì)就要熱鬧了。Public Review往往是帶來(lái)最大的討論與爭(zhēng)議的過(guò)程。不過(guò)還是希望JSR-315規(guī)范能盡早的敲定,讓我們這些期盼以久的開(kāi)發(fā)人員能使用這些新特征。  閱讀全文
          posted @ 2008-12-25 08:44 x.matthew 閱讀(1853) | 評(píng)論 (0)編輯 收藏
               摘要: 又是一周的周未,不過(guò)最近項(xiàng)目一直進(jìn)展不順也少了一些悠閑。不過(guò)正好,文秘下來(lái)給大家發(fā)月刊,說(shuō)是刊中有一題
          考大家,前幾名回復(fù)有獎(jiǎng)品。這可一下子讓大家一直緊張的情緒,緩和了一些了。

          下面是這個(gè)題目:

          A、B、C三人的年齡一直是一個(gè)秘密。將A的年齡數(shù)字的位置對(duì)調(diào)一下,就是B的年齡;C的年齡兩倍是A與B
          兩個(gè)年齡的差數(shù);而B(niǎo)的年齡是C的10倍。請(qǐng)問(wèn):A、B、C三人的年齡各是多少?  閱讀全文
          posted @ 2008-12-12 22:58 x.matthew 閱讀(3558) | 評(píng)論 (23)編輯 收藏
               摘要: Simple是一個(gè)XML序列化框架,一個(gè)Java版本寬容的序列化框架,能夠快速在Java平臺(tái)上開(kāi)發(fā)XML。支持通過(guò)annotations完全配置化的XML結(jié)構(gòu);提供版本管理框架允許向前和向后兼容序列化;更好的性能,使用輕量級(jí)StAX提升XML反序列化進(jìn)程,比XStream和JAXB更快;通過(guò)namespace annotations提供完全的命名空間支持;包括XML模板系統(tǒng)  閱讀全文
          posted @ 2008-12-10 20:16 x.matthew 閱讀(3836) | 評(píng)論 (1)編輯 收藏
               摘要: 期待了許久,終于等到Spring Integration 1.0的正式發(fā)布。在些先祝賀一了Spring Source公司和Spring integration團(tuán)隊(duì)。
          下面是本人爭(zhēng)取第一時(shí)整理的學(xué)習(xí)筆記(針對(duì)最新版本)  閱讀全文
          posted @ 2008-12-04 08:33 x.matthew 閱讀(4795) | 評(píng)論 (3)編輯 收藏
               摘要: 前一部分,通過(guò)XML的使用方式講解了The Cafe Sample(小賣部訂餐例子)
          本筆記接下講解以Annotation的方式來(lái)使用Spring-integration的例子。還是之前的那個(gè)示例:
            閱讀全文
          posted @ 2008-12-04 08:33 x.matthew 閱讀(3262) | 評(píng)論 (0)編輯 收藏
               摘要: 應(yīng)該使用過(guò)Spring的人都被問(wèn)題過(guò)這個(gè)問(wèn)題, What is Spring?(當(dāng)然不能回答春天了,呵呵)

          其實(shí)在Spring官方網(wǎng)站就是具體的介紹,下面本人對(duì)其譯成了中文.如有翻譯不當(dāng)之處,敬請(qǐng)各位指正。  閱讀全文
          posted @ 2008-12-01 22:04 x.matthew 閱讀(1755) | 評(píng)論 (6)編輯 收藏
               摘要: ftp4j是一個(gè)FTP客戶端Java類庫(kù),實(shí)現(xiàn)了FTP客戶端應(yīng)具有的大部分功能。可以將ftp4j嵌到你的Java應(yīng)用中,來(lái)傳輸文件(包括上傳和下載),瀏覽遠(yuǎn)程FTP服務(wù)器上的目錄和文件,創(chuàng)建、刪除、重命,移動(dòng)遠(yuǎn)程目錄和文件。ftp4j提供多種方式連接到遠(yuǎn)程FTP服務(wù)器包括:通過(guò) TCP/IP直接連接,通過(guò)FTP代理、HTTP代理、SOCKS4/4a代理和SOCKS5代理連接,通過(guò)SSL安全連接。  閱讀全文
          posted @ 2008-12-01 08:13 x.matthew 閱讀(7736) | 評(píng)論 (8)編輯 收藏
               摘要: 在網(wǎng)絡(luò)上看到了這個(gè)項(xiàng)目,本人對(duì)這個(gè)不太了解,但挺興趣所以也推薦給大家,希望能一起學(xué)習(xí)。
          jNetPcap是libpcap的一個(gè)Java完整封裝。jNetPcap使用與libpcap相同風(fēng)格的API。libpcap是unix/linux平臺(tái)下的網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)庫(kù),大多數(shù)網(wǎng)絡(luò)監(jiān)控軟件都以它為基礎(chǔ)。 Libpcap可以在絕大多數(shù)類unix平臺(tái)下工作。Libpcap提供了系統(tǒng)獨(dú)立的用戶級(jí)別網(wǎng)絡(luò)數(shù)據(jù)包捕獲接口,并充分考慮到應(yīng)用程序的可移植性。  閱讀全文
          posted @ 2008-11-27 22:55 x.matthew 閱讀(11810) | 評(píng)論 (1)編輯 收藏
               摘要: 自JDK5.0 引入注解(Annotation)后,讓Java的開(kāi)發(fā)簡(jiǎn)化了很多,讓開(kāi)發(fā)者幾乎擺脫復(fù)雜的
          配置文件的煩惱。本文將介紹Spring提供的一套相當(dāng)于Commons Attribut屬性類的注解和一個(gè)策略接口 JmxAttributeSource 的實(shí)現(xiàn)類 AnnotationsJmxAttributeSource, 這個(gè)類允許 MBeanInfoAssembler 來(lái)讀這些注解。本文就給大家展示一下,使用Spring的JMX annotation,如何簡(jiǎn)單快速讓POJO對(duì)象輸出到JMX.  閱讀全文
          posted @ 2008-11-26 22:20 x.matthew 閱讀(2599) | 評(píng)論 (2)編輯 收藏
               摘要: Cobertura是一個(gè)基于jcoverage的免費(fèi)Java工具,它能夠顯示哪一部分代碼被你的測(cè)試所覆蓋,并可生成HTML或XML報(bào)告. 本文將介紹如何在項(xiàng)目中使用cobertura來(lái)測(cè)量單元測(cè)試的代碼覆蓋情況.  閱讀全文
          posted @ 2008-11-25 22:47 x.matthew 閱讀(4552) | 評(píng)論 (4)編輯 收藏
               摘要: Java Base64 這是一個(gè)用于編碼和解碼(encode/decode )base64字符串和數(shù)據(jù)流的Java開(kāi)源類庫(kù)。Base64是網(wǎng)絡(luò)上最常見(jiàn)的用于傳輸8Bit字節(jié)代碼的編碼方式之一。可用來(lái)作為電子郵件或WebService附件的傳輸編碼.  閱讀全文
          posted @ 2008-11-25 20:23 x.matthew 閱讀(10285) | 評(píng)論 (0)編輯 收藏
               摘要: 關(guān)鍵字: Jetty, Cometd, Continuation, dojo

          前言:
          為了更容易的掌握J(rèn)etty cometd的使用方法,本筆記通過(guò)講解Jetty 6.0自帶的chat演示程序來(lái)輔助講解Jetty Cometd的實(shí)現(xiàn)。  閱讀全文
          posted @ 2008-11-20 20:04 x.matthew 閱讀(13941) | 評(píng)論 (10)編輯 收藏
               摘要: 在業(yè)余時(shí)間開(kāi)發(fā)的一個(gè)益智小游戲《老虎過(guò)河》。游戲比較簡(jiǎn)單,前后花了大概一天多的時(shí)間,由于對(duì)swing接觸的太少,所以在界面上花了太多的時(shí)間,而且寫(xiě)的比較凌亂。  閱讀全文
          posted @ 2008-11-16 16:19 x.matthew 閱讀(4741) | 評(píng)論 (40)編輯 收藏
               摘要: 試用JBoss Envers項(xiàng)目有一陣子了,趁項(xiàng)目發(fā)布 1.1.0版,也同時(shí)把學(xué)習(xí)筆記共享給大家,希望對(duì)大家有所幫助。
          JBoss Envers目的是根據(jù)對(duì)實(shí)體的設(shè)置,提供記錄執(zhí)行數(shù)據(jù)變更歷史的功能(數(shù)據(jù)變更版本)。Envers的配置非常簡(jiǎn)單,如果需要對(duì)某個(gè)實(shí)例進(jìn)行歷史數(shù)據(jù)版本記錄,只需要在實(shí)例上配置@Versioned annotation即可。針對(duì)每個(gè)實(shí)體的版本的歷史數(shù)據(jù),Envers都會(huì)創(chuàng)建一個(gè)單獨(dú)的數(shù)據(jù)表進(jìn)行存儲(chǔ)。  閱讀全文
          posted @ 2008-11-14 12:14 x.matthew 閱讀(1874) | 評(píng)論 (1)編輯 收藏
               摘要: 美國(guó)時(shí)間2008年11月11日 21點(diǎn)16分, SpringSource宣布并購(gòu)G2One公司(G2One公司擁有Groovy和Grails兩大產(chǎn)品)。此次收購(gòu)后, SpringSource現(xiàn)在將會(huì)向groovy和Grails開(kāi)發(fā)團(tuán)隊(duì)提供全面的技術(shù)和解決方案的支持。

          這對(duì)Groovy和Grails開(kāi)發(fā)用戶,無(wú)疑是一個(gè)好消息。  閱讀全文
          posted @ 2008-11-12 16:34 x.matthew 閱讀(1699) | 評(píng)論 (5)編輯 收藏
               摘要: memcached安裝幫助手冊(cè)。  閱讀全文
          posted @ 2008-11-12 12:47 x.matthew 閱讀(5489) | 評(píng)論 (3)編輯 收藏
               摘要: 目前最新版本為JSDT 1.0.2。
          Javascript Debug Toolkit介紹

          JSDT(Javascript Debug Toolkit)是一個(gè)用于javascript調(diào)試的eclipse 插件,用于調(diào)試javascript。JSDT可以跨瀏覽器調(diào)試,支持在IE,Firefox,Safari,Chrome等主流瀏覽器中調(diào)試 javascript。JSDT支持設(shè)置斷點(diǎn),單步調(diào)試等調(diào)試工具的基本特性。
          當(dāng)然使用Firefox的朋友也可以選擇 FireBug,也是很不錯(cuò)的JS調(diào)試工具。  閱讀全文
          posted @ 2008-11-10 19:54 x.matthew 閱讀(31407) | 評(píng)論 (8)編輯 收藏
               摘要: 期待了許久,終于等到Spring Integration 1.0的 RC1版本。相對(duì)于Spring的其它項(xiàng)目,Spring Integration項(xiàng)目的推進(jìn)速度的確是比較慢。由于本人對(duì)EIP這一塊的情有獨(dú)鐘,所以對(duì)這一塊也是一直追蹤著。RC1版本的發(fā)布,也代表著1.0 的正式也臨近發(fā)布了,請(qǐng)我們期待吧。
          下面是本人先前整理的學(xué)習(xí)筆記(目前只針對(duì)M6版本,RC1版有一些改動(dòng),正在整理中)  閱讀全文
          posted @ 2008-11-08 12:53 x.matthew 閱讀(1668) | 評(píng)論 (1)編輯 收藏
          NetBeans IDE 6.5 RC2 已經(jīng)發(fā)布了,下面是官方發(fā)布的新特性列表:

          PHP

          • PHP Editor (Code completion, syntactic and semantic code highlighting)
          • Support for heredoc notation and PHTML
          • Debugging using Xdebug
          • Generators for MySQL database code snippets

          JavaScript and Ajax

          • JavaScript Debugging on FireFox & Internet Explorer
          • Http transaction monitoring
          • JavaScript Editor
          • JavaScript Library Manager incl Yahoo UI, Woodstock, jQuery, Dojo, Scriptaculous, Prototype libraries
          • Improved CSS Editor

          Java EE & Web Development

          • Enhanced support for Spring, Hibernate, JSF, JSF CRUD generator, JPA (Java Persistence API)
          • Create RESTful web services from database tables or from JPA entities
          • Drag and drop SaaS services into PHP files
          • SQL Editor Improvements (code completion, save/recall queries, and more)
          • Improved Eclipse project import and synchronization for Java Web projects
          • Automatic Deploy on Save

          Groovy and Grails

          • Develop pure Groovy apps or use Groovy in Java SE projects
          • Groovy editor (code completion, highlighting, and more)
          • Grails web application framework
          • Open existing Grails applications without adding metadata

          Ruby and Rails

          • New Test Runner interface for displaying test results
          • Rake improvements: Rake Runner and a pre-generated Rake file
          • Debugger: Conditional breakpoints and catchpoints
          • Ruby projects accept JVM options from command line

          GlassFish v3 Prelude for Web Development

          • Modular, OSGi based architecture
          • Small footprint, fast startup and deployment
          • Support for scripting, including JRuby

          C/C++

          • Improved code completion, error highlighting, and semantic highlighting
          • Call graph, Memory window
          • Remote development
          • Packaging of application as tar files, zip files, or SVR4 packages


          Java ME

          • New project wizard for adding custom components to the Visual Designer Palette
          • New SVG UI components in the enhanced SVG Composer enable rich UI design
          • New Data Binding Custom Components in the Visual Designer Palette
          • Upgraded obfuscation tool to ProGuard 4.2 and test framework to JMUnit 1.1.0


          Java Debugger

          • New multi-threaded debugging with improved UI and work-flow
          • Smart Step Into with method selection right inside expression
          • Deadlock detection with visual indication


          Java SE

          • Automatic Compile on Save
          • Improved Eclipse project import and synchronization
          • Java Call Hierarchy
          • Analyze Javadoc
          • Swing GUI Builder can generate simple class names (instead of fully qualified names)


          IDE Tools and Usability

          • Camel Case Code Completion
          • Formatting Settings per Project
          • One QuickSearch shortcut for IDE actions, files, options, and docs
          • Support for Windows UNC paths (shared network folders)



          posted @ 2008-11-08 12:17 x.matthew 閱讀(480) | 評(píng)論 (0)編輯 收藏
               摘要: 期待了四個(gè)多月的Spring 2.5.6版本終于正式發(fā)布了,官網(wǎng)信息.

          按照官方3.0版本開(kāi)發(fā)的說(shuō)明,Spring 2.5.6將會(huì)是Spring 2.5分支的最后一個(gè)版,整個(gè)開(kāi)發(fā)團(tuán)隊(duì)將會(huì)全力投入到 3.0版本的開(kāi)發(fā)工作。3.0版的MVC將會(huì)對(duì)Rest進(jìn)行支持。
          Spring 3.0 is in progress now! view roadmap click here  閱讀全文
          posted @ 2008-11-06 10:25 x.matthew 閱讀(2203) | 評(píng)論 (0)編輯 收藏
               摘要: 本文從一個(gè)例子出發(fā),根據(jù)TDD(測(cè)試驅(qū)動(dòng)開(kāi)發(fā))要求,進(jìn)行開(kāi)發(fā)。只是用于演示如何使用Spring2.5提供的基于Annonation方式的IOC實(shí)現(xiàn),進(jìn)行TDD開(kāi)發(fā)。

          首先我們來(lái)看一下這個(gè)例子的要求:
          開(kāi)發(fā)一個(gè)購(gòu)物車對(duì)象,可以添加商品,刪除商品,查詢已購(gòu)商口,結(jié)賬功能。  閱讀全文
          posted @ 2008-11-05 19:40 x.matthew 閱讀(1911) | 評(píng)論 (2)編輯 收藏
               摘要: JSON-taglib 是 JSP 2.0 標(biāo)簽庫(kù),用于生產(chǎn) JSON (JavaScript Object Notation) 數(shù)據(jù)結(jié)構(gòu)。  閱讀全文
          posted @ 2008-11-03 19:30 x.matthew 閱讀(2335) | 評(píng)論 (0)編輯 收藏
               摘要: Spring2 針對(duì)遠(yuǎn)程訪問(wèn)服務(wù),提供的一個(gè)remote包。其的的是提供一套統(tǒng)一的遠(yuǎn)程服務(wù)發(fā)布功能。
          Spring2支持遠(yuǎn)程服務(wù)功能如下:
          1. RMI服務(wù)
          2. Hessian或者Burlap通過(guò)HTTP遠(yuǎn)程調(diào)用服務(wù)
          3. HTTP調(diào)用器暴露服務(wù)
          本文結(jié)合源碼示例,來(lái)講解如何實(shí)現(xiàn)這些功能發(fā)布。  閱讀全文
          posted @ 2008-11-02 19:20 x.matthew 閱讀(2515) | 評(píng)論 (1)編輯 收藏
               摘要: 雖然目前Glassfish V3離正式發(fā)布還需要一段時(shí)日,但針對(duì)V3版這么長(zhǎng)久的發(fā)布日期,就讓人特想認(rèn)識(shí)一下V3版將會(huì)給我?guī)?lái)怎么樣的新特性。
          *組件化架構(gòu)(OSGi Based Modular architecture)
          *可插拔式容器與動(dòng)態(tài)腳本語(yǔ)言支持:
          *增強(qiáng)后的命令行模式與管理控制平臺(tái):
          *基于角色的安全策略支持:
          *支持用于內(nèi)置服務(wù)器方式部署:
          *提供讓人耳目一新的問(wèn)題剖析框架:
          *REST 支持(Jersey):  閱讀全文
          posted @ 2008-10-30 19:37 x.matthew 閱讀(2807) | 評(píng)論 (3)編輯 收藏
          今天瀏覽Spring Source官網(wǎng)時(shí),發(fā)現(xiàn)其公告欄又增加了一個(gè)子項(xiàng)目.Spring workflow.
          Spring也加入到了工作流的競(jìng)爭(zhēng)行例中來(lái)了。

          下面其官方布的信息:

          The Workflow extension brings Spring to the world of workflow programming. Jan Machacek originally started this extension because he was not happy with  the complexity of other workflow management libraries. The Spring Workflow extension treats all components of the workflow as first- 
          class Spring beans. As a result, your flows, states and transitions can take advantage of all features in the Spring Framework.

          Finally, the unobtrusive approach means that testing your workflows is as easy as testing any other Spring components.

          全文的大概意思是: 該項(xiàng)目創(chuàng)始人Jan Machacek,其本人覺(jué)得目前已經(jīng)存在其它的工作流項(xiàng)目過(guò)于復(fù)雜,難被掌握,所以決定嘗試基于Spring,開(kāi)發(fā)一個(gè)全新的工作流引擎。Spring Workflow extension作為Spring中一個(gè)組件,將會(huì)成為目前從多存在的Spring組件中最優(yōu)秀之一,最終將會(huì)使用都在Spring框架上實(shí)現(xiàn)流程管理,狀態(tài)控制和流程遷移控制管理,當(dāng)然由于基于Spring,所有實(shí)現(xiàn)都可以無(wú)縫的整合Spring所有特征。

          最后補(bǔ)充一句,Spring Workflow最讓人關(guān)注的一點(diǎn)就是測(cè)試Spring Workflow就像使用其它的Spring組件一樣的簡(jiǎn)單,方便。

          目前該項(xiàng)目還正處理培育階段,目前最新的版本為 1.3.0, 點(diǎn)擊可直接下載

          作者語(yǔ):

          目前開(kāi)源的工作流項(xiàng)目比較多,但比較做的好的,本人認(rèn)為JBoss JBPM應(yīng)該是比較好的一個(gè)。無(wú)論從其開(kāi)發(fā)工具的支持,開(kāi)發(fā)團(tuán)隊(duì)的支持都很不錯(cuò)。但有一點(diǎn)就是有點(diǎn)復(fù)雜,不太容易上手。所以期待Spring workflow能否真會(huì)給我?guī)?lái)一個(gè)驚喜

          備注:
          Spring workflow 官方網(wǎng)址:
          http://springframework.org/extensions/se-workflow
          作者Jan Machacek 博客網(wǎng)址 http://unjobs.org/authors/jan-machacek

          Good Luck!
          Yours Matthew!

           
          posted @ 2008-10-30 13:26 x.matthew 閱讀(2672) | 評(píng)論 (10)編輯 收藏
             推薦一款Java反編譯器,也使用了挺久的了,感覺(jué)還是很好用,就拿出和大家分享一下。
          這款反編譯器叫 "Java Decompiler", 由 Pavel Kouznetsov開(kāi)發(fā),目前最新版本為0.2.5.
          它由 C++開(kāi)發(fā),并且官方可以下載 windows、linux和蘋(píng)果Mac Os三個(gè)平臺(tái)的可執(zhí)行程序。 本地windows版本下載

             本人之所以認(rèn)為它還不錯(cuò),是其有下面幾個(gè)功能:
            1. 支持對(duì)整個(gè)Jar文件進(jìn)行反編譯,并本源代碼可直接點(diǎn)擊進(jìn)行相關(guān)代碼的跳轉(zhuǎn)
            2. 支持眾多Java編譯器的反編譯(支持泛型, Annotation和enum枚舉類型)
          • jdk1.1.8
          • jdk1.3.1
          • jdk1.4.2
          • jdk1.5.0
          • jdk1.6.0
          • jikes-1.22
          • harmony-jdk-r533500
          • Eclipse Java Compiler v_677_R32x, 3.2.1 release
          • jrockit90_150_06
             圖示:


             3. 快速查找源文件功能(Ctrl+Shift+T)

             4. 安裝方便.只有600K,直接運(yùn)行即可。
             5. 支持文件的拖放功能,源代碼高亮顯示

            當(dāng)然對(duì)于反編譯的效果,感覺(jué)還可以。當(dāng)然在本人使用過(guò)程也出現(xiàn)過(guò),編譯效果不佳的情況。但從總體上來(lái)看已經(jīng)讓我挺滿意了,呵呵。

          Good Luck!
          Yours Matthew!
          posted @ 2008-10-28 20:31 x.matthew 閱讀(74783) | 評(píng)論 (73)編輯 收藏
               摘要: spy2servers已經(jīng)發(fā)布有一段時(shí)間了,部分的使用手法都發(fā)布在不同的文章中:
          http://www.aygfsteel.com/xmatthew/archive/2008/04/24/194894.html
          http://www.aygfsteel.com/xmatthew/archive/2008/04/21/194349.html
          http://www.aygfsteel.com/xmatthew/archive/2008/03/24/187934.html
          http://www.aygfsteel.com/xmatthew/articles/185673.html
          現(xiàn)在應(yīng)該是時(shí)候把它們統(tǒng)一整理出來(lái)了。

          本手冊(cè)分為兩部分,用戶使用手冊(cè)和開(kāi)發(fā)手冊(cè)。  閱讀全文
          posted @ 2008-10-28 12:54 x.matthew 閱讀(3860) | 評(píng)論 (7)編輯 收藏
               摘要: 本人早期整理的Java工具類學(xué)習(xí)筆記  閱讀全文
          posted @ 2008-10-25 20:21 x.matthew 閱讀(4110) | 評(píng)論 (7)編輯 收藏
              期待了好久了,終于等到了規(guī)范的正式的發(fā)布。下面官方發(fā)布信息,記錄了JSR 311規(guī)范從籌備到發(fā)布的歷程。


            Status: Final              
            Stage       Start   Finish  
            Final Release   Download page   10 Oct, 2008      
            Final Approval Ballot   View results   09 Sep, 2008   22 Sep, 2008  
            Proposed Final Draft   Download page   15 Aug, 2008      
            Public Review Ballot   View results   27 May, 2008   02 Jun, 2008  
            Public Review   Download page   02 May, 2008   02 Jun, 2008  
            Early Draft Review   Download page   24 Oct, 2007   23 Nov, 2007  
            Expert Group Formation       27 Feb, 2007   15 Aug, 2007  
            JSR Review Ballot   View results   13 Feb, 2007   26 Feb, 2007  
             
          JCP version in use: 2.6
          Java Specification Participation Agreement version in use: 2.0
          Please direct comments on this JSR to: jsr-311-comments@jcp.org
           


              與其它規(guī)范發(fā)布一樣,伴隨此次發(fā)布,Sun同步發(fā)布該規(guī)范的參考實(shí)現(xiàn)項(xiàng)目jersey。最新版本為1.0。 為了讓大家能快速體驗(yàn)Rest帶給我們?nèi)碌募軜?gòu)風(fēng)格,可以直接從本地下載程序。bookstore-1.0.war 源代碼 bookmark-1.0-project.zip.

          下面展示了一個(gè)代碼片斷,讓大家直觀感受一下。
           1 @Path("/bank")
           2 public class Bank {
           3 
           4     @POST
           5     @Path("/account/{name}")
           6     public Account createAccount(@PathParam("name") String name, 
           7             @QueryParam("balance")BigDecimal balance) {
           8         //
           9         return new Account(name, balance);
          10     }
          11     
          12     @GET
          13     @Path("/account/{name}")
          14     public Account getAccount(@PathParam("name") String name) {
          15         //
          16         return Account.getByName(name);
          17     }
          18     
          19 }
          20 


          上面的代碼,就會(huì)發(fā)布兩個(gè)資源服務(wù):

          POST /bank/account/newAccount
          GET  /bank/account/newAccount

          大家看到,用Rest發(fā)布資源服務(wù)非常方便。當(dāng)然上面例子只是一個(gè)非常簡(jiǎn)單的示例,用于展示Rest的應(yīng)用,也希望大家提出好的建議和意見(jiàn)。

          Good Luck!
          Yours Matthew!


          posted @ 2008-10-21 21:29 x.matthew 閱讀(5901) | 評(píng)論 (3)編輯 收藏
            參讀了Hibernate的源代碼后,整理了一下Hibernate配置文件中幾種實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接方式的配置方法。(共四個(gè)方式)
             1. 程序內(nèi)部啟動(dòng) c3p0 連接池。
             配置方式如下:連接池的支持(注:需要c3p0的類庫(kù)支持)
                  <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
                 
          <property name="hibernate.connection.url" value="jdbc:postgresql://xxxxx/xxxx" />
                 
          <property name="hibernate.connection.username" value="xxxxx" />
                 
          <property name="hibernate.connection.password" value="xxxx" />
                  
          <property name="hibernate.c3p0.min_size"
                              value
          ="5"/>
                  
          <property name="hibernate.c3p0.max_size"
                              value
          ="20"/>
                  
          <property name="hibernate.c3p0.timeout"
                              value
          ="300"/>
                  
          <property name="hibernate.c3p0.max_statements"
                              value
          ="50"/>
                  
          <property name="hibernate.c3p0.idle_test_period"
                              value
          ="3000"/>   
             注: Hibernate根據(jù) hibernate.c3p0.max_size 這個(gè)配置來(lái)識(shí)別是支持c3p0連接池

             2. 引用外部連接池    (通過(guò)JNDI查找 DataSource資料)
             需要配置方式如下:
                <property name="hibernate.connection.datasource" value="java:comp/env/jdbc/qualitydb"/>

             3. 通過(guò) org.hibernate.connection.ProxoolConnectionProvider 創(chuàng)建
              由
                 hibernate.proxool.xml
                 hibernate.proxool.properties
                 hibernate.proxool.existing_pool 三個(gè)配置一起來(lái)確定

             4.  DriverManager 創(chuàng)建直接連接方式
                 <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
                
          <property name="hibernate.connection.url" value="jdbc:postgresql://xxxxx/xxxx" />
                
          <property name="hibernate.connection.username" value="xxxxx" />
                
          <property name="hibernate.connection.password" value="xxxx" />
              注: Hibernate根據(jù) hibernate.connection.url這個(gè)來(lái)識(shí)別,由于在識(shí)別時(shí),c3p0的優(yōu)先級(jí)會(huì)高于DriverManger所以,與c3p0的配置不會(huì)沖突


          Good Luck!
          Yours Matthew!
          posted @ 2008-10-19 21:19 x.matthew 閱讀(3293) | 評(píng)論 (0)編輯 收藏

              好久的筆記了,趁剛好休息整理文檔,翻出這一部分,稍加整理后,就發(fā)上來(lái)給大家共享一下,希望對(duì)各位有所幫助。

              關(guān)于LazyLoadException異常,使用過(guò)Hibernate O/R Mapping工具的人應(yīng)該都遇到過(guò),網(wǎng)上也是有很多解決的方案,其中Spring提供的一個(gè)方案就是在web.xml增加一個(gè)filter,示例代碼如下:

          <filter>  
              
          <filter-name>entityManager</filter-name>  
              
          <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>  
          </filter>  
            
          <filter-mapping>  
              
          <filter-name>entityManagerFilter</filter-name>  
              
          <url-pattern>*.action</url-pattern>  
          </filter-mapping> 

            解決辦法有了,接下來(lái)應(yīng)該會(huì)有人好奇:這個(gè)配置filter后它是如何工作的?
            下面來(lái)分析一下這個(gè)功能實(shí)現(xiàn)的源代碼, 不過(guò)之前,比較重要的是了解,為何會(huì)出現(xiàn)lazyload exception的異常發(fā)生。

             下面我模擬寫(xiě)了一段代碼,這段代碼就會(huì)發(fā)生該異常
             注:只是為了說(shuō)明,相關(guān)的代碼就省略了。

          @Entity
          public class Room {

           @Id
           @Column(length
          =32)
           
          private String id;

           @Column(length
          =20)
           
          private code;
           
           @OneToMany(mappedBy
          ="room"//default is use lazy load strategy 
           private Set desks;
          }

          @Entity
          public class Desk {

               @Id
               @Column(length
          =32)
               
          private String id;
              
               @Column(length
          =20)
               
          private code;
               
               @ManyToOne
               
          private Room root;

          }

          public class RoomSerivce {

              @Transactional(readOnly
          =true)
              
          public Room getRoomById(String roomId) {
                Assert.notBlank(roomId, 
          "room'id is null);
                  return getDao().findById(roomId);
              
              }

          }


           1 public class RoomServiceTest {
           2 
           3     public static void main(String[] args[]) {
           4     
           5         //get service from spring beanfactory
           6         RoomService service = SpringContext.getSerivce("roomService");
           7         Assert.notNull(service, " roomService bean not exsit");
           8     
           9       Room room = service.getRoomById("1");
          10       //here lazy exception throw out
          11       Set Desks = room.getDesks();
          12       CollectionsUtils.toString(Desks);
          13     }
          14 }

             分析這段代碼,我們不難發(fā)現(xiàn),在RoomServiceTest這個(gè)測(cè)試的例子中,因?yàn)槭褂昧嘶贏nnotation的聲明性事務(wù),所以在RoomSerivce.getRoomById方法運(yùn)行結(jié)束后,事務(wù)就已經(jīng)提交了。但示例中Room實(shí)體與Desk實(shí)例的關(guān)系使用的是lazy fetch的策略,此時(shí)Room對(duì)象中的desks集合還是為空。
          當(dāng)執(zhí)行到下面兩句時(shí)(這才真正使用到desks集合時(shí))
            Set Desks = room.getDesks();
            CollectionsUtils.toString(Desks);
          Hibernate就會(huì)根據(jù)原來(lái)lazy設(shè)定的方式,取EntityManager, 根據(jù)它從數(shù)據(jù)庫(kù)查詢 Desk實(shí)現(xiàn)的數(shù)據(jù),這時(shí)上面我們已經(jīng)提到,事務(wù)已經(jīng)隨getRoomById方法的運(yùn)行結(jié)束提交. EntityManager對(duì)象也已經(jīng)關(guān)閉。此時(shí)再調(diào)用 EntityManager操作,就會(huì)報(bào)EntityManager has been closed 異常(lazy load exception)

             ok, 清楚這塊,大家有時(shí)可能也猜想到了Spring這個(gè)解決方案是怎么處理的了。
             Spring的TransactionInterceptor 其就是通過(guò)AOP負(fù)責(zé)攔截著所有針對(duì)事務(wù)TransactionManager的操作.
             這樣Spring就可以針對(duì)lazy異常進(jìn)行攔截了。

             清楚上面的后,下面的代碼是非常好理解了,來(lái)看一下OpenEntityManagerInViewFilter的代碼:
          我加了些注釋,大家很容易明白:

           1     protected void doFilterInternal(
           2             HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
           3             throws ServletException, IOException {
           4 
           5       //通過(guò)WebApplicationContext,從Web服務(wù)中取得context實(shí)例后,根據(jù)EntityManagerFactory.class類型
           6       //取得EntityManagerFacotry實(shí)例
           7         EntityManagerFactory emf = lookupEntityManagerFactory(request);
           8         boolean participate = false;
           9 
          10         //如果靜態(tài)方法hasResource已經(jīng)有EntityManagerFactory實(shí)例了,就不用再通過(guò)
          11         //EntityManagerFactory創(chuàng)建一個(gè)新EntityManger了
          12         if (TransactionSynchronizationManager.hasResource(emf)) {
          13             // Do not modify the EntityManager: just set the participate flag.
          14             participate = true;
          15         }
          16         else {
          17             logger.debug("Opening JPA EntityManager in OpenEntityManagerInViewFilter");
          18             try {
          19             //通過(guò)EntityManagerFactory創(chuàng)建一個(gè)新EntityManger,并通過(guò)bindResource方法
          20             //保存到TransactionSynchronizationManager中
          21             //這樣,通TransactionSynchronizationManager的getResource方法取得EntityMangerHolder
          22                 EntityManager em = createEntityManager(emf);
          23                 TransactionSynchronizationManager.bindResource(emf, new EntityManagerHolder(em));
          24             }
          25             catch (PersistenceException ex) {
          26                 throw new DataAccessResourceFailureException("Could not create JPA EntityManager", ex);
          27             }
          28         }
          29 
          30         try {
          31             filterChain.doFilter(request, response);
          32         }
          33 
          34         finally {
          35             if (!participate) {
          36             //每次請(qǐng)求結(jié)束后,就把EntityManager關(guān)閉
          37                 EntityManagerHolder emHolder = (EntityManagerHolder)
          38                         TransactionSynchronizationManager.unbindResource(emf);
          39                 logger.debug("Closing JPA EntityManager in OpenEntityManagerInViewFilter");
          40                 EntityManagerFactoryUtils.closeEntityManager(emHolder.getEntityManager());
          41             }
          42         }
          43     }
          44    

              上面的代碼就不用多解釋了, 到現(xiàn)在已經(jīng)很清楚知道Spring針對(duì) Hibernate的Lazy問(wèn)題是怎么解決的。
              當(dāng)然我們可以擴(kuò)展到除Web服務(wù)以外,來(lái)實(shí)現(xiàn)解決lazy的問(wèn)題。(我們自己來(lái)管理TransactionSynchronizationManager就可以了)
             
              當(dāng)然Spring針對(duì) Hibernate(非JPA的實(shí)現(xiàn))原理也是一樣,只是它針對(duì)的SessionFactory,也是由TransactionSynchronizationManager來(lái)統(tǒng)一管理。
             
              最后如果大家如還有不清楚的,歡迎一起討論。
             
          Good Luck!
          Yours Matthew!

          posted @ 2008-10-11 18:01 x.matthew 閱讀(3101) | 評(píng)論 (3)編輯 收藏
              盼了好久的國(guó)慶節(jié)終于到了,整理一下手邊的工作,工作進(jìn)度的追蹤,code review和工作管理報(bào)告都已經(jīng)完成。終于松了口氣,長(zhǎng)假可以盡情休整一下(雖然回來(lái)工作會(huì)更忙碌),但這段時(shí)間可以有很多的自由時(shí)間分配,打算給自己好好的沖沖電。

              閑話少說(shuō),進(jìn)入正題。之所以本人要提出"找工作一定要先了解公司的團(tuán)隊(duì)文化"這個(gè)建議,是因?yàn)樽罱豁?xiàng)工作中的一些事情讓我感觸頗深,所以寫(xiě)下來(lái),也且當(dāng)發(fā)發(fā)牢騷。
              由于最近公司與一個(gè)專業(yè)的軟件公司X公司(不方便直注該公司名稱)簽訂開(kāi)發(fā)了一套比較大的系統(tǒng),現(xiàn)在到了開(kāi)發(fā)合同到期, 按雙方領(lǐng)導(dǎo)協(xié)商,開(kāi)始系統(tǒng)的交接工作。本人被任命參與到這項(xiàng)任務(wù),擔(dān)任移交過(guò)程中所有的技術(shù)支持工作。
             
              交接工作其實(shí)就是對(duì)方公司提交約定要求設(shè)計(jì)文檔,最新的源代碼,接口文檔,我這邊負(fù)責(zé)審閱這些文檔和代碼,再重新按公司文檔要求重新整理,備案,當(dāng)然前題我必須完全整理這些文檔的內(nèi)容和代碼的每個(gè)方法的功能。
              就在移交過(guò)程中,發(fā)生一些事情,讓我頭疼了好一陣,才引發(fā)了我對(duì)大家找工作的這條建議。
              事情的全部經(jīng)過(guò)大概是這樣,因?yàn)橄到y(tǒng)比較龐大(其實(shí)共有五個(gè)獨(dú)立的子系統(tǒng)組成),所以一個(gè)子系統(tǒng)的進(jìn)行交接,每個(gè)子系統(tǒng)交接安排在兩周至三周時(shí)間。首先交接的就是文檔,當(dāng)我接到文檔后,著實(shí)讓我吃驚不少。文檔基本上看不太明白,不僅內(nèi)容不全,而且基于上與系統(tǒng)對(duì)應(yīng)不上。所謂的設(shè)計(jì)文檔,只有界面設(shè)計(jì)(而且沒(méi)有幾個(gè)與現(xiàn)系統(tǒng)能完全對(duì)應(yīng)上的)與數(shù)據(jù)表設(shè)計(jì)外,其它的什么都沒(méi)有。沒(méi)有辦法,所以讓領(lǐng)導(dǎo)干涉,但多次溝通無(wú)果后(跨公司合作很難), 最終只要放棄對(duì)文檔部分的要求,公司這邊也是希望我這邊通過(guò)掌握他們的代碼,這樣文檔部分就可以由我們邊來(lái)整理了。

             當(dāng)然讀代碼并不是件易事,尤其是讀別人寫(xiě)的代碼。所以我也整理了一套方案,希望對(duì)方公司能提供下面一些簡(jiǎn)單文檔以幫助我順利開(kāi)展代碼的閱讀工作。
              1. 程序清單--包括程序名稱(功能)對(duì)應(yīng)的源代碼文件,對(duì)應(yīng)的數(shù)據(jù)表名 (因?yàn)橛肅#開(kāi)發(fā),基本上一個(gè)源文件,一個(gè)窗體文件)
              2. 接口文檔(主要對(duì)其它子系統(tǒng)的接口部分,因?yàn)樗麄兊膶?shí)現(xiàn)是通過(guò)共享表實(shí)現(xiàn)數(shù)據(jù)交互,所以這塊接口說(shuō)明就更加重要)接口文檔希望他們能整理出 接口的功能說(shuō)明,接口所在的源代碼,接口數(shù)據(jù)表字段說(shuō)明,觸發(fā)的動(dòng)作,觸發(fā)的頻率。

              這次對(duì)方公司很合作,三天就把文檔寫(xiě)完發(fā)給了我們,但質(zhì)量呢?,除了程序清單還算可以看外,接口文檔就丟了幾張數(shù)據(jù)表過(guò)來(lái),而且還有三分之一的表名沒(méi)有列到文檔中,其它就什么都沒(méi)有的。(這是接口說(shuō)明文檔,當(dāng)然覺(jué)得不行了,這個(gè)根本沒(méi)有辦法整理), 所以提議想與他們的技術(shù)人員溝通一下,猜想可能對(duì)方是沒(méi)有太明白我們接口文檔的要求吧,所以溝通后,與他們的一個(gè)項(xiàng)目經(jīng)理協(xié)商(到里覺(jué)很,安排得很好,這樣的任務(wù)與技術(shù)領(lǐng)導(dǎo)溝通問(wèn)題應(yīng)該馬上就能解決了,我刻意先打聽(tīng)一下這位經(jīng)理的一些情況,聽(tīng)說(shuō)是有很高的學(xué)歷和資歷),準(zhǔn)備好說(shuō)詞后,就與這個(gè)經(jīng)理進(jìn)行了交流,但結(jié)果讓我有點(diǎn)意外,他強(qiáng)調(diào)這個(gè)文檔沒(méi)有問(wèn)題,所以我按原準(zhǔn)備好的說(shuō)詞,與他說(shuō)明接口的重要性,接口文檔應(yīng)該怎么編寫(xiě)。而他的這次回答,就讓感覺(jué)太意外了。他解釋到,接口不是一個(gè)東西(頭一次聽(tīng)說(shuō)),在他們的設(shè)計(jì)中,所有的代碼設(shè)計(jì)都是個(gè)人邊想邊寫(xiě)的,而且他們的系統(tǒng)是一個(gè)整體,沒(méi)有接口(那幾個(gè)子系統(tǒng)交互的數(shù)據(jù)說(shuō)明沒(méi)有,那還不亂了),所以他解析根本沒(méi)有"(你們說(shuō)的)接口"這個(gè)東西,是因?yàn)槲覀兲崃艘?(這個(gè)他認(rèn)為不存在的)接口", 所以弄了幾張表給你們。還說(shuō)以前他們給別人做系統(tǒng),別人從沒(méi)有這么要過(guò)。同時(shí)故意詢問(wèn)一下他手下幾個(gè)做開(kāi)發(fā)的人員,"你們知道接口嗎?能按他們要求整理出來(lái)嗎?"結(jié)果他手下很會(huì)意的回復(fù)到,怎么會(huì)有這東西,現(xiàn)在能整理得出數(shù)據(jù)表已經(jīng)不錯(cuò)了,我寫(xiě)代碼現(xiàn)在早記不清楚,給你們弄表名已經(jīng)夠花時(shí)間的了。(真是無(wú)話可說(shuō)),接下來(lái)他還要"教導(dǎo)"我,說(shuō)我對(duì)接口是一個(gè)錯(cuò)誤的理解,要幫我糾正過(guò)來(lái)。聽(tīng)他們這樣的回復(fù),真是無(wú)奈的很,但畢竟工作沒(méi)完成,無(wú)法向領(lǐng)導(dǎo)交差,還是堅(jiān)持的一點(diǎn)希望他們能按要求交出接口文檔, 但足足說(shuō)了20分鐘,都無(wú)果(可能有人會(huì)問(wèn),怎么會(huì)花這么多時(shí)間,我只能說(shuō)大家都看過(guò)大話西游的唐僧吧)。
           
             最后終于放棄(無(wú)奈啊),無(wú)功而返。回去后,雖然頭疼,但必竟是自己的任務(wù)沒(méi)有完后,只好自己花時(shí)間讀代碼,希望把接口這部分的文檔整理出來(lái)。結(jié)果一看代碼,簡(jiǎn)直讓我哭笑不得,到處都是不知明的變量a1,ttt,text1,不知明的方法button1Onclick, button5Onclick。方法沒(méi)有參數(shù),都是通過(guò)全局變量來(lái)傳遞,還有更嚴(yán)重的就是數(shù)據(jù)庫(kù)操作竟然沒(méi)有事務(wù)(后來(lái)與他們一個(gè)開(kāi)發(fā)人員交流后,才得知他根據(jù)就不知道什么是事務(wù),也不知道事務(wù)有什么用途), 與他們經(jīng)理溝通,結(jié)果他很“聰明"來(lái)一個(gè)拖延戰(zhàn)術(shù),沒(méi)辦法,系統(tǒng)問(wèn)題太多,不交接對(duì)方公司就不提供源代碼,也就無(wú)法解決問(wèn)題(最終他的戰(zhàn)術(shù)成功).

             到現(xiàn)在為止交接過(guò)程就在這種狀況進(jìn)行近一半了,交接了有二個(gè)系統(tǒng)。也陸續(xù)見(jiàn)過(guò)一些他們的開(kāi)發(fā)人員,都是畢業(yè)二三年的年青程序員,實(shí)話說(shuō)看他們的代碼,真是件非常痛苦的事情(怎么會(huì)有這樣的程序員),但反思過(guò)來(lái),替他們一想,想必他們剛從大學(xué)出來(lái),應(yīng)該也是雄心壯志,也想做一個(gè)優(yōu)秀的程序員(應(yīng)該是誤入了這個(gè)這么糟的團(tuán)隊(duì)所致吧)。其實(shí)我心里一直想問(wèn)他們一個(gè)問(wèn)題,"你們真不擔(dān)心自己的前途和發(fā)展嗎?"(并非我忋人憂天,像他們雖年輕,但時(shí)間一晃就過(guò),照他們現(xiàn)在沒(méi)有目標(biāo)規(guī)劃,只是與現(xiàn)在的團(tuán)隊(duì)熬下去的話,到了三十歲以后,那就比較難補(bǔ)救了。)
           
            說(shuō)了這么多,的確啰嗦了。最后還是強(qiáng)調(diào)一下我們觀點(diǎn),找工作,一定要多去了解面試的那個(gè)團(tuán)隊(duì)的文化氛圍。本人認(rèn)為好的團(tuán)隊(duì),才能帶領(lǐng)員工成長(zhǎng)和發(fā)展的。
          祝國(guó)慶快樂(lè)!

          Good Luck!
          Yours Matthew!

          posted @ 2008-09-29 00:48 x.matthew 閱讀(664) | 評(píng)論 (1)編輯 收藏
              Tomcat5.5 類裝載器的實(shí)現(xiàn)都是通過(guò)繼承于JDK中的 java.lang.ClassLoader類。
              包括Bootstrap,System,Common, Catalina, Shared和Webapp這六種類加載器來(lái)實(shí)現(xiàn)不同目錄的類文件裝載。
             
                Bootstrap
                    |
                 System
                    |
                 Common
                /      \
           Catalina   Shared
                       /   \
                  Webapp1  Webapp2 ...


            Bootstrap 類裝載器:
                它用于加載最基本的JVM運(yùn)行環(huán)境類,裝載JDK目錄下類文件($JAVA_HOME/jre/lib/ext)
                使用它的目的是以防一些JVM提供商實(shí)現(xiàn)時(shí),可能考慮某些原因會(huì)把部分的類文件通過(guò)不同的多個(gè)類加載加器加載,同時(shí)會(huì)
                屏蔽一些類加載讓?xiě)?yīng)用層的類加載器訪問(wèn)到。
              System 類裝載器:
                  該類裝載器根據(jù)JVM的CLASSPATH參數(shù)設(shè)置裝載類文件,該類裝載器對(duì)于Tomcat內(nèi)部的程序和應(yīng)用層的程序都是可見(jiàn)的。
                  注:目前tomcat5的啟動(dòng)腳本($CATALINA_HOME/bin/catalina.sh 或 %CATALINA_HOME%\bin\catalina.bat),會(huì)把全局環(huán)境變量CLASSPATH忽略。
                  而且通過(guò)下面的幾個(gè)類庫(kù)來(lái)實(shí)現(xiàn)裝載設(shè)置:
                  * $CATALINA_HOME/bin/bootstrap.jar 包含一個(gè)main()方法來(lái)初始化tomcat5服務(wù),并實(shí)例類裝器所依賴的類文件。
                  * $CATALINA_HOME/bin/tomcat-juli.jar 初始Jakarta commons logging API和 java.util.logging LogManager.
                  * $CATALINA_HOME/bin/commons-logging-api-x.y.z.jar - Jakarta commons logging API.
                  * $CATALINA_HOME/bin/commons-daemon.jar - Jakarta commons daemon API.
                  * jmx.jar - The JMX 1.2 implementation.
              Common 類裝載器
                  該類裝載器對(duì)于Tomcat內(nèi)部的程序和應(yīng)用層的程序都是可見(jiàn)的.
                  當(dāng)然不太建議把應(yīng)用層的類庫(kù)放到這里來(lái)加載。
                  所有$CATALINA_HOME/lib目錄下未壓縮的類文件,資源和壓縮后Jar/zip文件都會(huì)補(bǔ)該類裝載器加載。
                 
                  Tomcat5.5默認(rèn)該目錄的類文件有:
                  * commons-el.jar - Jakarta commons el, implementing the expression language used by Jasper.
                  * jasper-compiler.jar - The JSP 2.0 compiler.
                  * jasper-compiler-jdt.jar - The Eclipse JDT Java compiler.
                  * jasper-runtime.jar - The JSP 2.0 runtime.
                  * jsp-api.jar - The JSP 2.0 API.
                  * naming-common.jar - The JNDI implementation used by Tomcat 5 to represent in-memory naming contexts.
                  * naming-factory.jar - The JNDI implementation used by Tomcat 5 to resolve references to enterprise resources (EJB, connection pools).
                  * naming-factory-dbcp.jar - Jakarta commons DBCP, providing a JDBC connection pool to web applications. The classes have been moved out of their default org.apache.commons package.
                  * naming-java.jar - Handler for the java: namespace.
                  * naming-resources.jar - The specialized JNDI naming context implementation used to represent the static resources of a web application. This is not related to the support of the J2EE ENC, and cannot be removed.
                  * servlet-api.jar - The Servlet 2.4 API.
                  * tomcat-i18n-**.jar - Optional JARs containing resource bundles for other languages. As default bundles are also included in each individual JAR, they can be safely removed if no internationalization of messages is needed.

              Catalina 類裝載器:
                   該類裝載器用都裝載tomcat5.5本身所需要的類文件和資源。應(yīng)用層的類裝載器不能訪問(wèn)到它。
                    所有$CATALINA_HOME/server/classes目錄下未壓縮的類文件,資源文件都會(huì)補(bǔ)該類裝載器加載。
                    所有$CATALINA_HOME/server/lib目錄下壓縮后Jar/zip文件都會(huì)補(bǔ)該類裝載器加載。
                   Tomcat5.5默認(rèn)該目錄的類文件有:
                  * catalina.jar - Implementation of the Catalina servlet container portion of Tomcat 5.
                  * catalina-ant.jar - Some Ant tasks which can be used to manage Tomcat using the manager web application.
                  * catalina-optional.jar - Some optional components of Catalina.
                  * commons-modeler.jar - A model MBeans implementation used by Tomcat to expose its internal objects through JMX.
                  * servlets-xxxxx.jar - The classes associated with each internal servlet that provides part of Tomcat's functionality. These are separated so that they can be completely removed if the corresponding service is not required, or they can be subject to specialized security manager permissions.
                  * tomcat-coyote.jar - Coyote API.
                  * tomcat-http.jar - Standalone Java HTTP/1.1 connector.
                  * tomcat-ajp.jar - Classes for the Java portion of the AJP web server connector, which allows Tomcat to run behind web servers such as Apache and iPlanet iAS and iWS.
                  * tomcat-util.jar - Utility classes required by some Tomcat connectors.     

              Shared 類裝載器:
                  該類裝載器可化被所有的應(yīng)用程序類裝載器共享(除了tomcat本身內(nèi)部類加載外)
                      所有$CATALINA_BASE/shared/classes目錄下未壓縮的類文件,資源文件都會(huì)補(bǔ)該類裝載器加載。
                    所有$CATALINA_BASE/shared/lib目錄下壓縮后Jar/zip文件都會(huì)補(bǔ)該類裝載器加載。
                  注: 如果有該類庫(kù)使用$CATALINA_BASE環(huán)境變量啟動(dòng)了多個(gè)實(shí)例,則該類裝載器類庫(kù)的引使用會(huì)$CATALINA_BASE變量而不是$CATALINA_HOME 


              Webapp 類裝載器:
                  應(yīng)用層的類裝載器,每個(gè)應(yīng)用程序都會(huì)創(chuàng)建一個(gè)單獨(dú)的類裝載器。該類裝載器只能本應(yīng)用程序中可見(jiàn)。
                  所有/WEB-INF/classes目錄下未壓縮的類文件,資源文件都會(huì)補(bǔ)該類裝載器加載。
                  所有/WEB-INF/lib目錄下壓縮后Jar/zip文件都會(huì)補(bǔ)該類裝載器加載。
               
           
              把各個(gè)類裝載器的定義整理出來(lái)后,Tomcat5.5服務(wù)器類裝載器執(zhí)行的順序如下:
              * Bootstrap classes of your JVM
              * System class loader classses (described above)
              * /WEB-INF/classes of your web application
              * /WEB-INF/lib/*.jar of your web application
              * $CATALINA_HOME/common/classes
              * $CATALINA_HOME/common/endorsed/*.jar
              * $CATALINA_HOME/common/i18n/*.jar
              * $CATALINA_HOME/common/lib/*.jar
              * $CATALINA_BASE/shared/classes
              * $CATALINA_BASE/shared/lib/*.jar

          Good Luck!
          Yours Matthew!

          posted @ 2008-09-27 19:28 x.matthew 閱讀(2121) | 評(píng)論 (1)編輯 收藏
              Tomcat6 類裝載器的實(shí)現(xiàn)都是通過(guò)繼承于JDK中的 java.lang.ClassLoader類。
              包括Bootstrap,System,Common和Webapp這四種類加載器來(lái)實(shí)現(xiàn)不同目錄的類文件裝載。
              示例結(jié)構(gòu)如下:
                Bootstrap
                    |
                 System
                    |
                 Common
                 /     \
            Webapp1   Webapp2 ...

            Bootstrap 類裝載器:
                它用于加載最基本的JVM運(yùn)行環(huán)境類,裝載JDK目錄下類文件($JAVA_HOME/jre/lib/ext)
                使用它的目的是以防一些JVM提供商實(shí)現(xiàn)時(shí),可能考慮某些原因會(huì)把部分的類文件通過(guò)不同的多個(gè)類加載加器加載,同時(shí)會(huì)
                屏蔽一些類加載讓?xiě)?yīng)用層的類加載器訪問(wèn)到。
              System 類裝載器:
                  該類裝載器根據(jù)JVM的CLASSPATH參數(shù)設(shè)置裝載類文件,該類裝載器對(duì)于Tomcat內(nèi)部的程序和應(yīng)用層的程序都是可見(jiàn)的。
                  注:目前tomcat5的啟動(dòng)腳本($CATALINA_HOME/bin/catalina.sh 或 %CATALINA_HOME%\bin\catalina.bat),會(huì)把全局環(huán)境變量CLASSPATH忽略。
                      而且通過(guò)下面的兩個(gè)類庫(kù)來(lái)實(shí)現(xiàn)裝載設(shè)置:
                      * $CATALINA_HOME/bin/bootstrap.jar 包含一個(gè)main()方法來(lái)初始化tomcat6服務(wù),并實(shí)例類裝器所依賴的類文件。
                      * $CATALINA_HOME/bin/tomcat-juli.jar 初始Jakarta commons logging API和 java.util.logging LogManager.
              Common 類裝載器
                  該類裝載器對(duì)于Tomcat內(nèi)部的程序和應(yīng)用層的程序都是可見(jiàn)的.
                  當(dāng)然不太建議把應(yīng)用層的類庫(kù)放到這里來(lái)加載。
                  所有$CATALINA_HOME/lib目錄下未壓縮的類文件,資源和壓縮后Jar/zip文件都會(huì)補(bǔ)該類裝載器加載。
                 
                  Tomcat6默認(rèn)該目錄的類文件有:
                  * annotations-api.jar - JEE annotations classes.
                  * catalina.jar - Implementation of the Catalina servlet container portion of Tomcat6.
                  * catalina-ant.jar - Tomcat Catalina Ant tasks.
                  * catalina-ha.jar - High availability package.
                  * catalina-tribes.jar - Group communication package.
                  * el-api.jar - EL 2.1 API.
                  * jasper.jar - Jasper 2 Compiler and Runtime.
                  * jasper-el.jar - Jasper 2 EL implementation.
                  * jasper-jdt.jar - Eclipse JDT 3.2 Java compiler.
                  * jsp-api.jar - JSP 2.1 API.
                  * servlet-api.jar - Servlet 2.5 API.
                  * tomcat-coyote.jar - Tomcat connectors and utility classes.
                  * tomcat-dbcp.jar - package renamed database connection pool based on Commons DBCP.
                  * tomcat-i18n-**.jar - Optional JARs containing resource bundles for other languages. As default bundles are also included in each individual JAR, they can be safely removed if no internationalization of messages is needed.

              Webapp 類裝載器:
                應(yīng)用層的類裝載器,每個(gè)應(yīng)用程序都會(huì)創(chuàng)建一個(gè)單獨(dú)的類裝載器。該類裝載器只能本應(yīng)用程序中可見(jiàn)。
                所有/WEB-INF/classes目錄下未壓縮的類文件,資源文件都會(huì)補(bǔ)該類裝載器加載。
                所有/WEB-INF/lib目錄下壓縮后Jar/zip文件都會(huì)補(bǔ)該類裝載器加載。


              把各個(gè)類裝載器的定義整理出來(lái)后,Tomcat6服務(wù)器類裝載器執(zhí)行的順序如下:
             
              * Bootstrap classes of your JVM
              * System class loader classses (described above)
              * /WEB-INF/classes of your web application
              * /WEB-INF/lib/*.jar of your web application
              * $CATALINA_HOME/lib
              * $CATALINA_HOME/lib/*.jar

          Good Luck!
          Yours Matthew!
          posted @ 2008-09-27 19:24 x.matthew 閱讀(2860) | 評(píng)論 (2)編輯 收藏
           最近在Spring官網(wǎng)上發(fā)現(xiàn),Spring 2.5發(fā)布不久,Spring3.0項(xiàng)目已經(jīng)是開(kāi)始進(jìn)行了。

          包括很多新功能,如標(biāo)題中提到的Restful的支持,還有Servlet3.0的支持等。
          大概總結(jié)了一下,Spring3.0中會(huì)包括以下一些新特性:
          • 1. Full scale REST support by means of additions to the Spring MVC API - already pretty detailed, and apparently going to be included in the first milestone release
          • 2. Support for Unified EL (as seen in Spring Web Flow) - very likely part of 3.0, but no details given
          • 3. Annotation support for declaring factory methods - as above
          • 4 .Support for Portlet 2.0 (JSR 286), including resource requests (ResourceServingPortlet) - as above
          • 5. "Preparations" for Servlet 3.0 specification - sounded a lot like architectural preparations not visible to the "consumer"
          • 6. Something to fill the gap between Spring Web Flow and Spring MVC - that sounded very vague
          • 7. Inclusion (probably generalisation) of the repeat, retry and resume semantics provided by Spring Batch - was only hinted at, no details given
          • 8. Inclusion of the OXM support provided by Spring WS - sounded pretty definitive, but no details given
          • 9. Some kind of site definition language for the web stack - no idea whether this is more than a rumour
          • 10. Model-based validation for use both in server and client - as above

          下面我們具體介紹一下Restful該特性.
            剛才我也提到了,Spring3.0是基于其目前提供的Spring MVC框架上引入對(duì)Rest的支持,這樣使其可以很好的融合到Spring中。
            下面有一段代碼,大家看了會(huì)更有體會(huì)。
             先看一下如何發(fā)布Rest風(fēng)格的服務(wù)接口
          1 @RequestMapping(value = "/gadgets/{id}",
          2       method = RequestMethod.GET)
          3 public View getGadget(@PathParam String id) {
          4   // 功能是根據(jù) id 查詢 Gadget對(duì)象
          5   // 返回View對(duì)象
          6 }
          7 
             看到使用Annotation方式,代碼非常簡(jiǎn)潔。@RequestMapping是對(duì)訪求的資源進(jìn)行服務(wù)的綁定, value指定服務(wù)的資源路徑, method是指Rest風(fēng)格中的CRUD的方法。
             @PathParam是對(duì)資源路么參數(shù)的解析,它會(huì)自動(dòng)根據(jù)提交的數(shù)據(jù)格式,解析參數(shù)值。

             下面來(lái)看一下RestTemplate,對(duì)Rest服務(wù)接口的調(diào)用.
           
           1 // 使用getForObject執(zhí)行查詢操作
           2 //  (指定參數(shù)提交方式)
           3 RestTemplate template = new RestTemplate();
           4 Gadget gadget = template.getForObject(
           5     "http://www.springify.com/gadgets/{id}",
           6     Gadget.class1);
           7 
           8 // 使用postForLocation 執(zhí)行新增操作
           9 // (指定參數(shù)提交方式,使用Map對(duì)象)
          10 Map<String, String> params =
          11     new HashMap<String, String>();
          12 params.put("id"42);
          13 URI uri = template.postForLocation(
          14     "http://www.springify.com/gadgets/{id}/features",
          15     new Feature("Glows in the dark."), params);
          16 
          17 // 刪除操作的演示
          18 template.delete(
          19     "http://www.springify.com/gadgets/{id}", someId);
          20 
          21
          29 

          總結(jié):可以看到使用Rest風(fēng)格的服務(wù)發(fā)布,可以對(duì)服務(wù)資源進(jìn)行統(tǒng)一的管理,使用發(fā)布的接口更清晰。

          當(dāng)然在Spring 3.0 發(fā)布之前,上述的API,annotation可能會(huì)有變動(dòng),我們也期待Spring能與我們?cè)缛找?jiàn)面。

          最后,由于本人對(duì)Rest技術(shù)了解還不是太深入,也希望大家能多提些意見(jiàn)和建議。

          Good Luck!
          Yours Matthew!

          posted @ 2008-09-02 19:32 x.matthew 閱讀(4806) | 評(píng)論 (4)編輯 收藏
               摘要: 今天在網(wǎng)上看到一個(gè)用Memcached作為Hibernate二級(jí)分布式緩存,感覺(jué)挺有興趣,就是嘗試用了,感覺(jué)還不錯(cuò),就推薦給大家看一下。  閱讀全文
          posted @ 2008-08-20 16:43 x.matthew 閱讀(14939) | 評(píng)論 (11)編輯 收藏
               摘要: 引子: VB6是一種比較早的高級(jí)語(yǔ)言,但可以說(shuō)在它那個(gè)時(shí)代非常流行,本人就遇到不少項(xiàng)目用該語(yǔ)言進(jìn)行開(kāi)發(fā),但隨著Java, .net等其它新語(yǔ)言的發(fā)展,VB6已經(jīng)漸漸淡出了,但不少其開(kāi)發(fā)的項(xiàng)目卻被保留了下來(lái)。目前遇到的一個(gè)困擾就是這樣的系統(tǒng)如何解決與新語(yǔ)言開(kāi)發(fā)的系統(tǒng)的數(shù)據(jù)交互問(wèn)題。本文就先拋一個(gè)話題,VB6實(shí)現(xiàn)基于HTTP Web調(diào)用來(lái)解決與基于B/S架構(gòu)的應(yīng)用程序間的調(diào)用(示例使用Java開(kāi)發(fā))。  閱讀全文
          posted @ 2008-08-19 08:50 x.matthew 閱讀(5633) | 評(píng)論 (1)編輯 收藏
          《美國(guó)數(shù)學(xué)月刊》登載了一個(gè)有趣的數(shù)學(xué)問(wèn)題:3名男子參加一個(gè)以氣球?yàn)槟繕?biāo)的投鏢游戲。每個(gè)人都用飛鏢攻擊另外2個(gè)人的氣球,氣球被戳破的要出局,最后幸存的是勝者。

              3名選手水平不一,在固定標(biāo)靶的測(cè)試中,老大10投8中,命中率80%。老二和老三的命中率分別為60%和40%。現(xiàn)在,3個(gè)人一起角逐,誰(shuí)最有可能獲勝?

              答案看似簡(jiǎn)單,投得準(zhǔn)的會(huì)取勝。而實(shí)際上,一開(kāi)場(chǎng),每個(gè)人都希望先把另外2個(gè)對(duì)手中的強(qiáng)者滅掉,自己才安全,下面的比賽也輕松。于是,老大專攻老二,老二、老三就攻老大,結(jié)果,水平最高的老大最易出局,水平最差的老三最安全!

              老大自然不會(huì)那么蠢,他會(huì)游說(shuō)老二:“我們合伙把老三那小子滅了,這樣,你我勝率都高!”

              但是,老二會(huì)這樣想老大:“你想得美!若我們滅了老三,然后對(duì)打,我還不是處在劣勢(shì)?”

              老大和老二的合作有了裂痕。

              耶魯大學(xué)煺研究所的經(jīng)濟(jì)學(xué)教授馬丁·蘇比克,討論過(guò)另一種策略:“老大會(huì)對(duì)老二保持一種威懾:‘我不攻擊你,你也別攻擊我,否則,我將不顧一切地回?fù)裟悖?#8217;這樣一來(lái),就會(huì)造成新的局面。老二豈肯善罷甘休,也會(huì)以同樣的方式威脅老三,那么,三人的勝率又是……”

              若2個(gè)男人比賽,問(wèn)題再簡(jiǎn)單不過(guò);若多出1人,問(wèn)題就復(fù)雜了許多倍。

              摒棄復(fù)雜的數(shù)學(xué)和社會(huì)問(wèn)題,還原為一些簡(jiǎn)單的生活道理:面對(duì)一個(gè)強(qiáng)者,弱者只能接受失敗;面對(duì)一群強(qiáng)者,弱者反而有了更多的周旋空間。

          posted @ 2008-08-09 16:19 x.matthew 閱讀(626) | 評(píng)論 (3)編輯 收藏
               摘要: 今天在DZone網(wǎng)站看到發(fā)布兩個(gè)新的筆記幫助卡片,下載看一下感覺(jué)很不錯(cuò),所以推薦給大家。不過(guò)除了今天要推薦的 Design Patterns和GlassFish以外,DZone RefCards還有很多不錯(cuò)的學(xué)習(xí)筆記卡片可供下載,有興趣的朋友可以去官網(wǎng)下載。  閱讀全文
          posted @ 2008-07-18 12:58 x.matthew 閱讀(1467) | 評(píng)論 (4)編輯 收藏
               摘要: 聲明:本博客屬作者原創(chuàng),如果任何網(wǎng)站轉(zhuǎn)載本文,請(qǐng)注明作者及引用來(lái)源,謝謝合作! 關(guān)于Cas實(shí)現(xiàn)單點(diǎn)登入(single sing on)功能的文章在網(wǎng)上介紹的比較多,想必大家多多少少都已經(jīng)有所了解,在此就不再做具體介紹。如果不清楚的,那只能等我把single sign on這塊整理出來(lái)后再了解了。當(dāng)然去cas官方網(wǎng)站也是有很多的文章進(jìn)行介紹。cas官網(wǎng)http://www.ja-sig.org...  閱讀全文
          posted @ 2008-07-09 22:44 x.matthew 閱讀(31805) | 評(píng)論 (13)編輯 收藏
               摘要: 推薦一本使用Java開(kāi)源工具實(shí)踐XP經(jīng)驗(yàn)的書(shū)籍,書(shū)名有點(diǎn)長(zhǎng)
          Java-Tools-for-Extreme-Programming-Mastering-Open-Source-Tools-Including-Ant-JUnit-and-Cactus

          全書(shū)包括三大部分
          1. 介紹敏捷開(kāi)發(fā)的概念。包括原則和最佳實(shí)踐。
          2. 開(kāi)源工具的介紹。涵蓋的工具應(yīng)用有自動(dòng)化構(gòu)建,持續(xù)集成,自動(dòng)化測(cè)試(功能和壓力性能),部署以及代碼重構(gòu)等。
          3. API介紹。從編程方面來(lái)剖析這些開(kāi)源工具是如何工作的。  閱讀全文
          posted @ 2008-07-08 21:17 x.matthew 閱讀(1584) | 評(píng)論 (5)編輯 收藏
          主站蜘蛛池模板: 新化县| 郴州市| 西畴县| 比如县| 滨海县| 横山县| 集贤县| 惠东县| 启东市| 当阳市| 清丰县| 白玉县| 英德市| 宣恩县| 铜梁县| 南安市| 利川市| 泰州市| 秦皇岛市| 太谷县| 固原市| 阳朔县| 柳江县| 象山县| 城固县| 利津县| 商南县| 鹤壁市| 广平县| 潢川县| 榆社县| 清远市| 泽库县| 龙江县| 黄冈市| 孝昌县| 白玉县| 道孚县| 昌平区| 唐山市| 泾川县|