<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    與Java相伴的日子
    相識,相知,相戀,到相守......我的日子因你的到來而充實,我的日子因你的存在而多姿!
    posts - 4,comments - 31,trackbacks - 0
    ??????? J2EE 即Java2平臺企業版,它提供了基于組件的方式來設計、開發、組裝和部署企業應用。J2EE使用多層分布式的應用模型,這個多層通常通過三層或四層來實現:

    ?????????1、客戶層,運行在客戶計算機上的組件。
    ???????? 2、Web 層,運行在J2EE服務器上的組件。
    ?????????3、業務層,同樣是運行在J2EE服務器上的組件。
    ?????????4、企業信息系統層(EIS),是指運行在EIS服務器上的軟件系統。
    ??????
    ?????????以上層次一般也指三層應用,因分布在三個不同位置:客戶計算機、J2EE服務器及后臺的數據庫或過去遺留下來的系統。請看圖例:?????????????????????????????????

    ?????????????????????????

    ??????????

    ?????????????????????
    ?????????J2EE組件

    ?????????J2EE應用程序是由組件構成的。J2EE組件是一個封裝了功能的軟件單元,能夠與相關的一些類和文件一起組成J2EE應用程序。
    ?????????1、應用程序客戶端和Applet是指運行在客戶計算機上的組件。
    ?????????2、基于Java Servlet和JSP技術的組件叫Web組件,它們運行在服務器上。
    ?????????3、企業JavaBean(EJB)組件叫業務組件,同樣運行在服務器上。

    ??????J2EE客戶端

    ?????????J2EE客戶端可以是一個Web組件或者是一個應用程序客戶端。
    ?????????1、Web客戶端??
    ?????????包括兩部分,首先是那些動態Web頁面(HTML、XML等),這些組件運行在Web層;另一個是Web瀏覽器,由客戶機上的瀏覽器從服務器接收并且解析和顯示Web頁面。
    ?????????2、小應用程序(Applet)?
    ?????????需要運行在客戶端安裝了Java虛擬機的Web瀏覽器上。
    ?????????3、應用程序客戶端
    ?????????J2EE應用程序客戶端運行在客戶機上,能提供強大而靈活易用的用戶界面,如使用Swing或AWT創建的圖形化的用戶界面(GUI)。應用程序可直接訪問運行在業務層的企業Bean,如果需求允許,也可以打開HTTP連接來建立與運行在Web層上的Servlet之間的通訊。
    ?????????4、JavaBean組件架構
    ?????????在服務器和客戶端兩層中也可能包括了基于JavaBean的組件架構,通過JavaBean來實現數據的流動,可以是在應用程序客戶或Applet與運行在J2EE服務器上的組件之間,或者是在J2EE服務器和后臺數據庫之間。(不過JavaBean組件并沒有包含在J2EE規范里)
    ?????????5、J2EE服務的通訊
    ?????????客戶層與J2EE服務器上運行的業務層之間的通訊可以是直接的,也可以通過運行在Web層中的Servlet和JSP來實現,在這種情況下,客戶端運行在瀏覽器中。

    ?????????Web組件

    ?????????J2EE的Web組件可以是Servlet或JSP頁面。在應用程序組裝過程中,靜態HTML頁面和Applet也可以一起打包成Web組件,但這并不是J2EE規范所認可的Web組件。

    ?????????業務組件

    ?????????業務代碼是指那些由位于業務層的企業Bean(EJB)執行的邏輯,它們能夠解決或滿足特定的商業領域的一些需求。有三種不同類型的企業Bean:會話Bean、實體Bean和消息驅動Bean。會話Bean代表客戶一次短暫的會話過程,當客戶執行完成后,會話Bean以及它所包含的數據也隨之消失。實體Bean代表的是持久的數據,即存儲在數據庫表中的一行記錄,即使客戶終止或者服務器關閉,在J2EE底層的服務會確保實體Bean的數據被保存下來。

    ?????????企業信息系統層

    ?????????企業信息系統層處理企業信息系統的軟件,包括企業組織結構系統,例如企業資源計劃(ERP)、大型的事務處理、數據庫系統及其他歷史上遺留下來的信息系統。

    ?????????J2EE的主要技術
    ?????????
    ?????????JDBC(Java Database Connectivity): JDBC API?為訪問數據庫提供一種統一的方式,其接口包括在java.sql和javax.sql兩個包中。
    ?????????JNDI(Java Name and Directory Interface):Java名稱和目錄服務,包含在javax.naming 及其子包中。它為應用程序提供標準的目錄操作的方法 ,如獲得對象的關聯屬性,根據它們的屬性搜尋對象等。使用JNDI,一個J2EE應用程序可以存儲和動態獲取任何類型的命名Java對象。JNSI分為兩種:應用程序編程接口(API)和服務供應商接口(SPI)。
    ?????????EJB(Enterprise JavaBean):參見上文。
    ?????????RMI(Remote Method Invoke):即遠程方法調用,它使用了連續序列的方式在客戶端和服務器端傳遞數據,將面向對象編程模型擴展到了客戶機/服務器系統,使開發者可以用本地對象調用的語法進行遠程調用。
    ?????????JSP(Java Server Pages):Java服務器頁,可以在HTML代碼中嵌入部分Java代碼,這種文件由服務器編譯成Servlet并執行,然后將產生的結果作為一個HTML文件傳給瀏覽器。
    ?????????Servlet:Java Servlet實質上是一種小型的,與平臺無關的Java類,它由容器管理并被編譯成平臺無關的字節代碼,可以動態地加載到一個Web服務器上,并由該Web服務器運行。
    ?????????JMS(Java Message Service):Java 消息服務,是用于和企業消息傳遞系統相互通信的應用程序接口。企業消息傳遞系統又稱為面向消息的中間件(Message Oriented Middle Ware, MOM),它使用松耦合的、非常靈活的方式來集成應用程序,在存儲和轉發的基礎上支持應用程序間數據的異步傳遞;
    每個應用程序都只與作為中介的MOM通信。
    ?????????JTA(Java Transaction API):指定事務管理與分布式事務中涉及的其他系統之間的各種高級接口。
    ?????????JavaMail:用于存取郵件服務器的API,提供了一套用于郵件服務的抽象類。
    ?????????JAXP(Java API for XML Processing):Java XML 處理API,支持使用DOM、SAX和XSLT對XML文檔進行處理。
    ?????????J2EE Connector Architecture:J2EE工具提供商提供的J2EE連接體系結構,通過它可以建立支持訪問企業信息系統的資源適配器。??????

    ????????歸納幾個概念:

    ?????????EJB

    ?????????即Enterprise JavaBean,一種組件架構,用于開發和部署面向對象的、分布式的、企業級的應用程序。所開發的應用程序使用EJB架構來實現可擴展性及管理事務和安全。
    ?????????EJB包括會話Bean(session bean)、實體Bean(entity bean)和消息驅動Bean(message-driven bean)。其中會話Bean分為無狀態會話Bean(stateless session bean)和有狀態會話Bean(stateful session bean)。而實體Bean又分為Bean管理實體Bean和容器管理實體Bean。由于這種Bean對應于數據庫中的記錄,所以數據庫記錄的任何改變也被同步到組件池中的相關Bean中,這個過程叫做持久性(persistenced),這是實體Bean最重要的一個特征。根據持久性操作方式的不同分為:容器管理持久性(Container-Managed Persistence,CMP)和Bean管理持久性(Bean-Managed Persistence,BMP)。

    ?????????容器

    ?????????即container,一個實體,它管理著組件的生命周期、安全、部署和運行時服務。每個類型的容器都只提供與相應類型的組件相關的服務,如EJB、Web、JSP、Applet和應用程序客戶端。其中,EJB容器和Web容器都運行在J2EE服務器中。

    ?????????J2EE

    ?????????即Java 2 Platform Enterprise Edition,Java 2 平臺企業版。是開發和部署企業應用程序的一種平臺或環境。它由一系列服務、應用程序編程接口(API)、提供多層開發的功能性的協議以及基于Web的應用程序組成。

    ?????????


    ?



    ?

    posted @ 2006-04-16 01:28 南一郎 閱讀(2947) | 評論 (0)編輯 收藏
         摘要: 以下是我用Swing 組件編寫的記事本,功能是模仿微軟的,使用了觀感,自我覺得界面比Win的記事本更為好看(臭屁一下吧)。除了沒有做字體選擇之外,其他功能基本都有了吧。 /**?**/ /** ?*Author: Zhang?Zhijian? ?*Mail: q...  閱讀全文
    posted @ 2006-04-15 01:06 南一郎 閱讀(3213) | 評論 (14)編輯 收藏
         摘要: 我做過的一個項目,需要實現在線實時生成 Excel文件供客戶端下載的需求,最初考慮的是先在服務器端生成真實的文件,然后在客戶端下載該文件。后來發現這樣做不但性能不夠好、速度較慢,而且還要占用服務器空間。所以采取了在服務器端生成文件輸出流(ServletOutputStream),通過HttpServletResponse對象設置相應的響應頭,然后將此輸出流傳往客戶端的方法實現。在實現過程中,用到了...  閱讀全文
    posted @ 2005-12-30 10:08 南一郎 閱讀(12281) | 評論 (16)編輯 收藏

    ?

    ??????? 我的一個項目使用了Hibernate3操作Oracle9i數據庫,遇到一個很奇怪的問題,即在按某些使用了聚合函數的值的升序排序后,翻頁到一定頁數(通常是3或5)以后,顯示的內容不會變化,即出現不是期望的查詢結果.
    ??????? 剛開始仔細排查,找不出原因.后來通過查Hibernate 包中的Oracle9Dialect及OracleDialect的源碼,將Dialect換成 OracleDialect后問題解決.
    ?????? 但是,問題雖解決了,根源何在呢?為什么Oracle9卻要用到OracleDialect(源碼注解中說這是兼容Oracle8i)的才能解決問題呢?!
    ???? ?查看源碼,發現兩者取得分頁查詢字符串的方式是有點區別的(在 getlimitString()方法中).

    ?? ?在Oracle9Dialect中:

    ?? public ?String?getLimitString(String?sql,? boolean ?hasOffset)? {
    ??
    ??sql?
    = ?sql.trim();
    ??
    boolean ?isForUpdate? = ? false ;
    ??
    if ?(?sql.toLowerCase().endsWith( " ?for?update " )?)? {
    ???sql?
    = ?sql.substring(? 0 ,?sql.length() - 11 ?);
    ???isForUpdate?
    = ? true ;
    ??}

    ??
    ??StringBuffer?pagingSelect?
    = ? new ?StringBuffer(?sql.length() + 100 ?);
    ??
    if ?(hasOffset)? {
    ???pagingSelect.append(
    " select?*?from?(?select?row_.*,?rownum?rownum_?from?(? " );
    ??}

    ??
    else ? {
    ???pagingSelect.append(
    " select?*?from?(? " );
    ??}

    ??pagingSelect.append(sql);
    ??
    if ?(hasOffset)? {
    ???pagingSelect.append(
    " ?)?row_?where?rownum?<=??)?where?rownum_?>?? " );
    ??}

    ??
    else ? {
    ???pagingSelect.append(
    " ?)?where?rownum?<=?? " );
    ??}


    ??
    if ?(isForUpdate)?pagingSelect.append( " ?for?update " );
    ??
    ??
    return ?pagingSelect.toString();
    ?}



    ??????? 在OracleDialect中:

    public ?String?getLimitString(String?sql,? boolean ?hasOffset)? {

    ??sql?
    = ?sql.trim();
    ??
    boolean ?isForUpdate? = ? false ;
    ??
    if ?(?sql.toLowerCase().endsWith( " ?for?update " )?)? {
    ???sql?
    = ?sql.substring(? 0 ,?sql.length() - 11 ?);
    ???isForUpdate?
    = ? true ;
    ??}

    ??
    ??StringBuffer?pagingSelect?
    = ? new ?StringBuffer(?sql.length() + 100 ?);
    ??
    if ?(hasOffset)? {
    ???pagingSelect.append(
    " select?*?from?(?select?row_.*,?rownum?rownum_?from?(? " );
    ??}

    ??
    else ? {
    ???pagingSelect.append(
    " select?*?from?(? " );
    ??}

    ??pagingSelect.append(sql);
    ??
    if ?(hasOffset)? {
    ???pagingSelect.append(
    " ?)?row_?)?where?rownum_?<=???and?rownum_?>?? " );
    ??}

    ??
    else ? {
    ???pagingSelect.append(
    " ?)?where?rownum?<=?? " );
    ??}


    ??
    if ?(isForUpdate)?pagingSelect.append( " ?for?update " );
    ??
    ??
    return ?pagingSelect.toString();
    ?}



    ??????? 兩者的區別主要在于,前者:
    row_ where rownum <= ?) where rownum_ > ?
    后者:
    where rownum_ <= ? and rownum_ > ?

    我模擬了我的出問題的查詢,使用前者問題重現,使用后者不出問題.
    另外是,只在升序排序時才出問題,降序則不會.

    我的語句分別如下:
    *************************************************************************
    第一種:

    select ? * ? from ?(

    ?
    select ?rownum?row_num?,t. * ?? from (
    ?
    select ? Sum (b.disp_Count)?,? Sum (b.click_Count)?,?
    ???
    Sum (b.total_Price)?,? Sum (b.return_Cost)?,?
    ???
    avg (b.rank)??,?b.sta_Date???,?b.keyword_Name??,?
    ???b.union_Name??
    ???
    from ?Bid_Report?b??
    ????????
    where ??(b.sta_Date? = ' 20051129 ' )??
    ??????????
    group ? by ??b.sta_Date,??b.keyword_Name,??b.union_Name?
    ??????????
    order ? by ?? Sum (b.click_Count),?b.sta_Date?
    ????????)?t??
    where ?rownum <= 60
    ??)?
    where ?row_num? > ? 40


    (在Hibernate3中,Oracle9Dialect的getLimitString()方法采取類似實現方式)

    第二種:

    select ? * ? from ?(

    ?
    select ?rownum?row_num?,t. * ?? from (
    ?
    select ? Sum (b.disp_Count)?,? Sum (b.click_Count)?,?
    ???
    Sum (b.total_Price)?,? Sum (b.return_Cost)?,?
    ???
    avg (b.rank)??,?b.sta_Date???,?b.keyword_Name??,?
    ???b.union_Name??
    ???
    from ?Bid_Report?b??
    ????????
    where ??(b.sta_Date? = ' 20051129 ' )??
    ??????????
    group ? by ??b.sta_Date,??b.keyword_Name,??b.union_Name?
    ??????????
    order ? by ?? Sum (b.click_Count),?b.sta_Date??
    ????????)?t??
    ??)?
    where ?row_num? <= 60 ? and ?row_num > 40

    (在Hibernate3中,OracleDialect的getLimitString()方法采取類似實現方式)

    **********************************************************************

    現在,問題是:為什么采取后者就可以解決問題了呢?這是不是Oracle9Dialect的一個bug呢?!
    哪位高手能給我詳析,感激不盡!!!!

    posted @ 2005-12-30 09:41 南一郎 閱讀(1351) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 国产精品亚洲小说专区| 亚洲av无码专区在线播放| 成人免费无码大片A毛片抽搐色欲| 99国产精品视频免费观看| 无码免费一区二区三区免费播放| 免费观看男人吊女人视频| 久久国产精品免费专区| 久久久高清日本道免费观看| 久久免费看少妇高潮V片特黄| 四虎成人精品永久免费AV| 久久国产精品免费专区| 亚洲成人免费网站| 免费精品国产日韩热久久| 最近中文字幕无吗高清免费视频| 成人毛片18岁女人毛片免费看| 成年人免费网站在线观看| 午夜视频免费成人| 免费国产美女爽到喷出水来视频| 免费A级毛片在线播放不收费| 亚洲片国产一区一级在线观看 | 人妖系列免费网站观看| 黄视频在线观看免费| APP在线免费观看视频| 免费国产污网站在线观看15| 18禁网站免费无遮挡无码中文| 青青视频观看免费99| 免费高清资源黄网站在线观看| 免费A级毛片无码久久版| av在线亚洲欧洲日产一区二区| 国产精品国产亚洲精品看不卡| 亚洲高清视频免费| 国产人成亚洲第一网站在线播放| 国产亚洲午夜精品| 99在线热播精品免费99热| 美女内射无套日韩免费播放 | 女人裸身j部免费视频无遮挡| 日韩a级无码免费视频| 久久国产免费福利永久| 国产乱人免费视频| 亚洲AV无码国产精品色午友在线 | 久久99国产亚洲高清观看首页|