第一次接觸mina這個物件,在網上看了一些相關的資料,同時也參考了別人的一些分析mina的心得和方式!
mina是何物?
Mina是一個用于開發高性能和高可用性的網絡應用程序基礎架構,它封裝了底層的I/O和線程并發等復雜工作。
Mina主要是基于java NIO類庫開發;采用非阻塞方式的異步傳輸、事件驅動、批量數據傳輸;支持TCP、UDP網絡協議
首先從服務器端啟動NioSocketAcceptor對象進行分析。
1、實例化DefaultSocketSessionConfig會話配置器和異步傳輸NioProcessor處理器
2、實例化AbstractPollingIoAcceptor構造器同時實例化SimpleIoProcessorPool處理器池
--〉在SimpleProcessorPool中初始化執行器<線程池>,然后初始化一個IoProcessor對象數組,長度為3,最后將處理器對象放入到IoProcessor數組中
--〉處理化傳輸帶元數據
--〉初始化服務監視器
--〉初始化異常監視器
3、初始化過濾鏈
4、初始化選擇器
架構介紹
應用結構圖

深入分析結構圖

mina的基本應用可以分為3層:
1、I/O Serivce:實際執行I/O層
2、I/OFilter chain:數據過濾和轉換層,主要是把字節轉換為需要的數據格式或者反過來處理
3、I/OHandler:業務處理層
創建Mina應用分為3部分:
1、創建I/O 2、創建過濾鏈
3、創建I/O業務處理
Dojo介紹
Dojo 是一個用javascript語言實現的開源DHTML工具包。它是在幾個項目捐助基礎上建立起來的(nWidgets, Burstlib, f(m)), 這也是為什么叫它a \"unified\" toolkit的原因。Dojo的目標是解決開發DHTML應用程序遇到的那些,長期存在 、歷史問題。historical problems with DHTML 跨瀏覽器問題。Dojo讓你更容易 使web頁面具有動態能力,或在任何穩健的支持javascript語言的環境中發揮作用。
a、利用dojo提供的組件,你可以提升你的web應用程序可用性、交互能力以及功能上的提高;
b、你也可以 更容易的建立degradeable user interfaces ??,dojo提供小巧的 widgets ,animate transitions;
c、利用它的低級APIs和可兼容的代碼,寫出輕便的、單一風格(復雜)的javascript代碼,Dojo的 event system, I/O APIs, and generic language enhancement form the basis of a powerful programming environment.
d、通過Dojo提供的工具,你可以為你的代碼寫命令行式的單元測試代碼。
e、the Dojo package system使你自己的代碼更容易維護,偶合性更低。
Dojo通過很少的代碼完成了以上的功能。(以后可能我詳細說說dojo的package system ,只需要三個js文件)。當你寫腳本時,只需要包含很少的js文件(大?。?。也可以選擇的(包含)下載dojo提供的龐大的功能。Dojo provides MultiplePointsOfEntry, InterpreterIndependence, ForwardLookingAPIs, and focuses on ReducingBarriersToAdoption.
dojo試圖建立一種新的標簽語言DojoML。目標是,在DojoML和javascript腳本語言不變的情況下,用不同的render方式展示數據, Renderings may be made available in several rendering contexts (such as SVG, or perhaps even the desktop or Flash)。(比較美好?。└M一步,the DojoML 剖析器可以接受html和svg為輸入,容易的建立DegradeableResponsiveApplications。
第一部分 安裝
第一個小節 怎么安裝Dojo Toolkit
Dojo在磁盤上只是一堆文件,它不需要特殊的設置,它可以通過以下三種途徑獲得:
1、可以從google的內容分布網絡獲得
加載的方法可以參考http://code.google.com/intl/zh-CN/apis/ajaxlibs/documentation/index.html#dojo
2、.在你自己的服務器上使用Dojo
a、下載最新的dojo包,地址:http://dojotoolkit.org/downloads;目前最新的包為1.3.1
b、解壓下載的壓縮文件
--dojo-release-1.3.1-src
----dijit
----dojo
----dojox
----util
c、可以通過D:\Apache-Source\dojo\1.3.1\dojo-release-1.3.1-src\dojo-release-1.3.1-src\dijit\themes\themeTester.html 這樣的路徑來查看相關的JS例子
3、每日構建代碼
你可以通過SVN地址獲得
For instance, Dojo Core repository is:
http://svn.dojotoolkit.org/src/dojo/trunk
There are two versions of this view: anonymous and committer.
For users (readonly):
http://svn.dojotoolkit.org/src/view/anon/all/trunk
For committers (read/write):
https://svn.dojotoolkit.org/src/view/committer/all/trunk
第二部分 Ajax
第一個小節 ajax
a、ajax and Dojo
1)XHR選項
例子:
// post some data, ignore the response:
dojo.xhrPost({
form: "someFormId", // read the url: from the action="" of the <form>
timeout: 3000, // give up after 3 seconds
content: { part:"one", another:"part" } // creates ?part=one&another=part with GET, Sent as POST data when using xhrPost
});
// get some data, convert to JSON
dojo.xhrGet({
url:"data.json",
handleAs:"json",
load: function(data){
for(var i in data){
console.log("key", i, "value", data[i]);
}
}
});
2)XHR回調
有三種方法可以附加到XHR選擇對象,以確定當數據回調時該怎么做。
如果不輸入絕對的URL訪問地址,例如:URL=http://localhost:8080/petstore;則Glassfish能夠自動的搜索項目中是否存在index.html或者index.jsp頁面作為入口頁面。
CatalogFacade對象在服務器啟動時被實例化,然后將實例化的CatalogFacade對象放置到ServletContext環境中,這樣可以直接從ServletContext環境中取得CatalogFacade對象進行相關數據方法的調用。
index.jsp中涉足到一個js框架DOJO,這個需要進一步的學習。
對數據的增、刪、改、查主要用到了JPA來處理。
由于PetStore涉及到了jsf,那就沒有辦法了,還是先看看JSF
--------------------------------------------------------------------------
JSF是有JCP(JAVA Community Process)團隊研發出來的一套標準,并在2004年3月發表JavaServer Faces1.0成果。
看到一篇內容對初學者目前jsf的了解很重要:注意這篇文章是2006年的內容
JSF1.1 , JSF1.2 , myfaces,oracle ADF,ajax4jsf , facelets, 它們究竟是什么,有什么關系呢?
JSF1.1 、 1.2 都是 JSF 的標準,定義例如接口、規范( JSF 是面向接口編程的),必須通過實現才能被我們所使用,而實現包括有 JSF RI(Reference Implementation) ,還有 myfaces core1.1.4 的實現等。 JSF RI 是 SUN 對 JSF 的實現,相對來說兼容性比較好,也比較穩定(因為 1.1 已經很久沒更新過了,已經轉向 1.2 去了),而 myfaces 更新比較快,功能也比較多一點,初學的推薦 JSF RI1.1 就可以了, 1.2 需要新的 servlet2.5/jsp2.1 以及服務器支持,現在還不穩定。
myfaces ,它是一個大的項目,下面有幾個子項目,分別是 myfaces core, sandbox ,tabago,tomahawk ,(奇怪的名字,好難說,我簡稱它為 TOM ),還有一個新的 ADF Faces (跟 oracle adf 有關,應該是兼容整合 adf 的功能吧)。 Tabago,tom 都是組件庫, tabago 比較好玩的是支持換膚,還有一些支持 ajax 的組件, TOM 則是一個豐富的增強組件庫,大概有三十個之多,例如 TREE , TAB 等等。 Sandbox 是測試用的。
Oracle ADF 是 oracle 為 jsf 做的一個大型的組件庫,以前是收費的,現在開源了,我沒用過,不好說。
Ajax4jsf 是為 jsf 提供 AJAX 支持的一個標簽庫,使用它提供的標簽,就能在原有的 JSF 程序上輕易的加上 AJAX 的功能,而且不用寫任何 Javascript 。
Facelets 這個是很激動人心的一個框架,有了這個框架才把 JSF 的組件化發揮出來,通過模板的方式來組合成我們所需要的組件,而且可以不使用 <h:input> 這樣的標簽庫,而用 <input type=”text” jsfc=”h:input”> 這樣的方式來使用組件,這樣就可以方便的使用 UI 可視化工具去開發我們的 WEB 程序。這個框架我會在以后的文章中詳細的說,以及和 jsp2.0 的模板功能作對比。
--------------------------------------------------------------------------------
JSF的session超時問題會在頁面上拋出如下異常:
javax.faces.application.ViewExpiredException: viewId:/pages/index.faces - View /pages/index.faces could not be restored.
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:185)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
解決方案:
在web.xml中添加如下代碼:
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/pages/SessionRefire.jsp</location>
</error-page>
----------------------------------------------------
注意:所有的JSF標簽一定要包含在<f:view></f:view>這個節點中,不然會報一下問題:
javax.servlet.ServletException: Component javax.faces.component.UIViewRoot@f1fad1 not expected type. Expected: javax.faces.component.UIOutput. Perhaps you're missing a tag?
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
Hibernate本身自帶的連接池算法不成熟,并不適合用于產品系統或者性能測試。出于最佳性能和穩定性考慮你應該使用第三方連接池。
比如使用:C3PO。
C3PO是一個隨Hibernate一同分發的開源JDBC連接池。
使用HTML5構建下一代的Web Form
作者 蔣博 發布于 2009年6月22日 上午4時52分
- Architecture,
- Java
- 主題
- 編程,
- 語言
- 標簽
- W3C,
- 標識語言
HTML5 是由 WHATWG (Web Hypertext Application Technology Working Group) 發起的,最開始的名稱叫做Web Application 1.0,而后這個標準吸納了Web Forms 2.0的標準,并一同被W3C組織所采用,合并成為下一代的HTML5標準。
前言
HTML語言作為如今編程最為廣泛的語言,具有易用、快捷、多瀏覽平臺兼容等特點,但是隨著時代的進步,HTML的標準卻停滯不前,這一次還在不斷開發中的HTML5標準的更新可以說給這門標記語言帶來了新的生命力。本文將著重討論HTML5中的Web Forms 2.0, 即表單的部分。
表單是網頁中常見的控件(集)。小到網站注冊登錄,大到一個企業的數據管理系統,都基本上有表單的身影。表單之所以如此重要,主要是因為它擔負大量的用戶和網頁后臺數據更新交互的任務。Web開發人員,對于網頁表單可以說又愛又恨,愛的是它方便的收集、組織數據的功能,恨的是它的功能很大程度上也就僅此而已。一些在最終網站用戶看起來稀松平常的功能,比如說輸入類型檢查、表單校驗、錯誤提示等等,開發人員無不需要花費大量精力利用 JavaScript和DOM編程來滿足這些天然所需的功能點,而隨著Ajax的流行,出現的一些JavaScript的工具庫,比如Dojo, YUI等都提供了方便的JavaScript Widget或者API來減輕開發人員的負擔。
HTML5的表單新特性
HTML5 Web Forms 2.0是對目前Web表單的全面提升,它在保持了簡便易用的特性的同時,增加了許多內置的控件或者控件屬性來滿足用戶的需求,并且同時減少了開發人員的編程。在我看來,HTML5 主要在以下幾個方面對目前的Web表單做了改進:
- 新的控件類型
- 還在為類型檢查犯愁嗎,還在為那一長串看不太明白的檢驗輸入的正則表達式而苦惱嗎,HTML5提供的一系列新的控件將天然的具備類型檢查的功能。比如說URL輸入框,Email輸入框等。
<input type="url"></input>
<input type="email"></input>
- 當然還有非常重要的日期輸入框,要知道使用JavaScript和CSS來“手工”制作一個日期輸入框還是非?;üΨ虻模愃艱ojo,YUI這樣的類庫也無不在這個widget上面大做文章。
<input type="date"></input>
- 作為我痛苦記憶的一部分,我經常記得我們開發人員要為一個select下拉別表動態的添加非常多的選項,這些選項大多數都是來自數據庫,比如說國家、省市列表等等。這個事情非常繁瑣。HTML5將支持data屬性,為select控件外聯數據源!
<select data="http://domain/getmyoptions"></select>
- 改進的文件上傳控件,你可以使用一個控件上傳多個文件,自行規定上傳文件的類型(accept),你甚至可以設定每個文件最大的大?。╩axlength)。你看出它和一般操作系統提供的文件上傳控件的區別了嗎,反正我覺得基本一致了。在HTML5應用中,文件上傳控件將變得非常強大和易用。
- 重復(repeat)的模型,HTML5提供一套重復機制來幫助我們構建一些重復輸入列表,其中包括一些諸如 add、remove、move-up,move-down的按鈕類型,通過這一套重復的機制,開發人員可以非常方便的實現我們經??吹降木庉嬃斜?,這是一個很常見的模式,我們可以增加一個條目、刪除某個條目、或者移動某個條目等等。
- 內建的表單校驗系統,HTML5為不同類型的輸入控件各自提供了新的屬性,來控制這些控件的輸入行為,比如我們常見的必填項required屬性,以及為數字類型控件提供的max、min等。而在你提交表單的時候,一旦校驗錯誤,瀏覽器將不執行提交操作,而會顯示相應的檢驗錯誤信息。
<input type="text" required></input>
<input type="number" min=10 max=100></input>
- XML Submission,我們一般常見的是form的編碼格式是application/x-www-form-urlencoded。開發人員都很清楚這種格式,數據送到服務器端,可以方便的存取。HTML5將提供一種新的數據格式:XML Submission,即application/x-www-form+xml。簡單的舉例說,服務器端將直接接收到XML形式的表單數據。
<submission>
<field name="name" index="0">Peter</field>
<field name="password" index="0">password</field>
</submission>
實例分析
我將利用HTML5新的表單系統, 做一個簡單的用戶注冊的界面,包括用戶名,密碼,出生日期,保密問題等內容,代碼如下:
<! doctype html>
<html>
<head>
<style>
p label {
width: 180px;
float: left;
text-align: right;
padding-right: 10px
}
table {
margin-left: 80px
}
table td {
border-bottom: 1px solid #CCCCCC
}
input.submit {
margin-left: 80px
}
</style>
</head>
<body>
<form action='/register' enctype="application/x-www-form+xml" method="post">
<p>
<label for='name'>ID(請使用Email注冊)</label>
<input name='name' required type='email'></input>
</p>
<p>
<label for='password'>密碼</label>
<input name='password' required type='password'></input>
</p>
<p>
<label for='birthday'>出生日期</label>
<input type='date' name='birthday' />
</p>
<p>
<label for='gender'>國籍</label>
<select name='country' data='countries.xml'></select>
</p>
<p>
<label for='photo'>個性頭像</label>
<input type='file' name='photo' accept='image/*' />
</p>
<table>
<thead>
<td><button type="add" template="questionId">+</button> 保密問題</td>
<td>答案</td>
<td></td>
</thead>
<tr id="questionId" repeat="template" repeat-start="1" repeat-min="1" repeat-max="3">
<td><input type="text" name="questions[questionId].q"></td>
<td><input type="text" name="questions[questionId].a"></td>
<td><button type="remove">刪除</button></td>
</tr>
</table>
<p>
<input type='submit' value='send' class='submit' />
</p>
</form>
</body>
</html>
由于目前HTML5標準仍然在開發中,不同的瀏覽器對HTML5特性的支持都相當有限。其中Opera在表單方面支持得比較好,本實例在Opera9上運行一切正常,效果圖如下:

這個實例運用了一些HTML5的新的表單元素,比如email類型的輸入框(ID),日期類型的輸入框(出生日期)。并且使用了重復模型來引導用戶填寫保密問題,而在個性頭像的上傳中,通過限制文件類型,方便用戶選擇圖片進行合乎規范的內容上傳。而用戶選擇國籍的下拉選擇輸入框中,采用的是外聯數據源的形式,外聯數據源使用coutries.xml,內容如下:
<select xmlns="http://www.w3.org/1999/xhtml">
<option>China</option>
<option>Japan</option>
<option>Korea</option>
</select>
并且form的enctype是application/x-www-form+xml,也就是HTML5的XML提交。所以一旦form校驗通過,form的內容將會以XML的形式提交。你還會發現,在ID輸入框如果沒有值,或者輸入了非email類型的字符串時,一旦試圖提交表單,就會有提示錯誤的信息出現,而這都是瀏覽器內置的。
結語
HTML5對表單控件的更新,無疑是很振奮人心的。本文描述了一部分表單的新特性,還有一部分新特性同樣很令人期待。相信隨著標準的深入開發以及瀏覽器對HTML5支持程度的進一步提升,設計一個簡單易用的表單的工作,將變得非常輕松。
參考資料
- W3C HTML5 規范: http://www.w3.org/TR/html5/
- HTML5 與 HTML4的差異:http://www.w3.org/TR/html5-diff/
- Opera dev: Improve your forms with HTML5: http://dev.opera.com/articles/view/improve-your-forms-using-html5/
- Comparison of layout engines(HTML5):
http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(HTML_5)
關于作者
蔣博,主要從事Web前端技術的開發工作,在Web開發與性能分析以及敏捷實踐等領域有較豐富的經驗。對HTML5的發展以及各種 JavaScript類庫有比較濃厚的興趣,經常關注社交型的網站發展情況,平常喜歡聽音樂,看一些歷史類書籍。(本文僅代表個人觀點,與公司立場無關。)
給InfoQ中文站投稿或者參與內容翻譯工作,請郵件至editors@cn.infoq.com。也歡迎大家加入到InfoQ中文站用戶討論組中與我們的編輯和其他讀者朋友交流。
看完這本書給我的感覺,比較實在,基本上對spring有個初步的認識。
接下來我會接著看<Spring參考手冊>,這樣更好的理解Spring這個輕量級的框架。
從縱向第三方框架集成方面講
1、 web層的集成
spring對于web層集成外部框架有:Struts、webwork、Tapestry、JSF、Dinamica、VRaptor
2、DAO層的集成
spring對于DAO層集成外部框架有:Hibernate、Ibatis、JDO
事務處理上,Spring可以利用不同的事務管理對象進行事務上的配置,根據不同的數據層環境而定。
Spring的容器事務主要是基于動態AOP來處理。
下面這段xml配置片斷展示了Spring中的事務設定方式:
<beans>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>org.gjt.mm.mysql.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost/sample</value>
</property>
<property name="username">
<value>user</value>
</property>
<property name="password">
<value>mypass</value>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
<bean id="userDAO" class="net.xiaxin.dao.UserDAO">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
<bean id="userDAOProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="userDAO" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="get*">
PROPAGATION_REQUIRED,readOnly
</prop>
</props>
</property>
</bean>
</beans>
------------------------------------------------------------------------------------------------------------------------------------------------------------------
EJB事務處理與Spring事務處理的區別,關鍵兩點:
1、Spring可以將任意Java Class 納入事務管理這里的UserDAO只是我們編寫的一個普通Java Class,其中包含了一些基本的數據應用邏輯。通過Spring,我們即可簡單的實現事務的可配置化。也就是說,我們可以隨意為某個類的某個方法指定事務管理機制。與之對比,如果使用EJB容器提供的事務管理功能,我們不得不按照EJB規范編將UserDAO 進行改造,將其轉換為一個標準的EJB。
2、Spring事務管理并不依賴特定的事務資源。EJB 容器必須依賴于JTA 提供事務支持。而Spring 的事務管理則支持JDBC、JTA 等多種事務資源。這為我們提供了更多的選擇,從而也使得我們的系統部署更加靈活。
模板技術相對傳統JSP技術有以下三個主要的優勢:
1、表現邏輯與業務邏輯的分離
2、將UI和程序分離,即將美工人員和程序員分離
3、如果需要,模板引擎可以脫離web容器單獨運行,為系統可能的移植需求提供了更多的彈性空間
目前spring支持以下模板技術:
1、XSLT
XSLT的性能相對較低,因為在XSLT中,每個節點都是一個java對象,大量對象的存儲對內存占用極大,同時大量對象的頻繁創建和銷毀也對JVM垃圾收集產生了較大的負面影響。
2、Velocity
目前最為成熟的模板技術,它是apache jakarta項目中的一個子項目。
3、FreeMarker
對于web開發而言,FreeMarker在生產效率和學習成本上更具優勢,而velocity的相對優勢在于更多第三方工具的支持和更廣泛的開發和用戶團體。
對于web應用,spring提供了可配置的ApplicatonContext加載機制;加載器目前有兩種加載選擇:ContextLoaderListener和ContextLoaderServlet
加載器目前有兩種選擇:ContextLoaderListener和ContextLoaderServlet。這兩者在功能上完全等同,只是一個是基于Servlet2.3版本中新引入的Listener接口實現,而另一個基于Servlet接口實現。開發中可根據目標Web容器的實際情況進行選擇。
在web.xml中增加:
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
-----------------------------------------------------------------
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
通過以上配置,Web容器會自動加載/WEB-INF/applicationContext.xml初始化
如果需要指定配置文件位置,可通過context-param加以指定
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/myApplicationContext.xml</param-value>
</context-param>
這個文檔的作者是夏昕。先看看這個文檔的內容,在作出評論??!
看了spring初探這一章,給我的感覺就是利用java的反射機制,和hibernate差不多!!
控制反轉 IOC(Inversion of control):由容器控制程序之間的關系,而非傳統實現中,有程序直接操控。
依賴注入DI(Dependency injection):組件之間的依賴關系由
容器在運行期決定,即由容器動態的將某種依賴關系注入到組件中。
依賴注入的特性:依賴注入機制減輕了組件之間的依賴關系,同時也大大地提高了組件的可移植性,這意味組件得到重用的機會將會更多!
注入主要有:接口方式、參數方式、構造方式,其實我覺得參數和構造應該都屬于參數傳值的方式。
什么叫熱部署?
熱部署指的是配置文件修改后自動被容器讀取,無需重新啟動應用服務器。
<beans>
<description>Spring Quick Start</description>
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>messages</value>
</list>
</property>
</bean>
</beans>
這里聲明了一個名為messageSource的Bean(注意對于Message定義,Bean ID必須為messageSource,這是目前Spring的編碼規約),對應類為ResourceBundleMessageSource,目前Spring中提供了兩個MessageSource接口的實現,即
ResourceBundleMessageSource和
ReloadableResourceBundleMessageSource,
后者提供了無需重啟即可重新加載配置信息的特性。
注意:實際上Spring實用了jdk中的ResourceBundle來讀取配置文件
對于屬性文件中的國際化中文問題:可以利用JDK中的轉碼工具native2ascii.exe來進行轉換
從hibernate的概要圖上可以看出hibernate的主要是將對象模型轉換成關系模型的過程。
第二章看完了,感覺框架中涉及的關鍵性概念及作用要記住:
SessionFactory(org.hibernate.SessionFactory)
針對單個數據庫映射關系經過編譯后的內存鏡像,是線程安全的(不可變)。它是生成Session的工廠,本身要用到ConnectionProvider。該對象可以在進程或集群的級別上,為那些事務之間可以重用的數據提供可選得二級緩存。
Session(org.hibernate.Session)
表示應用程序與持久存儲層之間交互操作的一個單線程對象,此對象生存期很短。其隱藏了JDBC連接,也是Transaction的工廠。其會持有一個針對持久化對象的必選(第一級)緩存,在遍歷對象圖或者根據持久化標識查找對象時會用到。
-----------------------------------------------------------------------------------------------------------------
目前好像沒有什么感覺!!
什么瞬態(transient)\什么持久化(persistent)\什么脫管(detached)
把一個對象說的這么理論化,不知為何???
我找來一本《hibernate的參考手冊-翻譯版本》
我訪問http://www.hibernate.org.cn ,既然目前處于域名轉讓???不知何解!可能已經不用了,網上有些人說已經轉向
www.javaeye.com上了。
還有個網站:
http://www.java99.com/
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
例子:
使用JAVA 數據庫(HSQL DB)
運行Hibernate所使用的最小的jar為:
antlr.jar;cglib.jar;asm.jar;asm-attrs.jar;commons-collections.jar;commons-logging.jar;ehcache.jar;hibernate3.jar;jta.jar;dom4j.jar;log4j.jar
其中第三方庫jar需要看自身使用的情況而定。
hibernate是通過反射機制來實例化javaBean,
javaBean中默認構造函數是不帶參數的。
hibernate主要依賴于映射文件將對象模型轉換成關系模型。hibernate的配置文件中的DTD文件放在hibernate3.jar包中。
標識符生成策略:
<hibernate-mapping>
<class name="events.Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="native"/>
</id>
</class>
</hibernate-mapping>
native:根據已配置的數據庫(方言)自動選擇最佳的標識符生成策略。
看完了第一章內容,感覺所講的東西只是傳達一個比較初略的了解。其實第一章內容根本沒有很多必要寫出來。