国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

把您從麻煩中解脫的JNDI在J2EE中的角色

2019-11-18 12:28:03
字體:
供稿:網(wǎng)友

  把握 J2EE 是件令人生畏的事,因為它包含的技術(shù)和縮略語在不斷地增長。java 命名和目錄接口(Java Naming and Directory Interface,JNDI)從一開始就一直是 Java 2 平臺企業(yè)版(JEE)的核心,但是 J2EE 開發(fā)新手經(jīng)常用不好它。本文將消除 JNDI 在 J2EE 應(yīng)用程序中所扮演角色的神秘性,并展示它如何幫助應(yīng)用程序從部署細節(jié)中解脫出來。
  
  雖然 J2EE 平臺提高了普通企業(yè)開發(fā)人員的生活水平,但是這種提高是以不得不學(xué)習(xí)許多規(guī)范和技術(shù)為代價的,這些規(guī)范和技術(shù)則是 J2EE 為了成為無所不包的分布式計算平臺而整合進來的。Dolly Developer 是眾多開發(fā)人員中的一員,她已經(jīng)發(fā)現(xiàn)了一個特性,該特性有助于緩解隨企業(yè)級應(yīng)用程序部署而帶來的負擔,這個特性就是 JNDI,即 Java 命名與目錄接口(Java Naming and Directory Interface)。讓我們來看看 Dolly 在沒有 JNDI 的時候是怎么做的,以及她是如何正確地應(yīng)用 JNDI 來改善其狀況的。
  
  所有人都非常熟悉的旅程
  Dolly Developer 正在編寫使用 JDBC 數(shù)據(jù)源的 Web 應(yīng)用程序。她知道自己正在使用 MySQL,所以她將一個對 MySQL JDBC 驅(qū)動程序類的引用進行了編碼,并通過使用適當?shù)?JDBC URL 連接到其 Web 應(yīng)用程序中的數(shù)據(jù)庫。她熟悉到數(shù)據(jù)庫連接池的重要性,所以她包含了一個連接池包,并把它配置成最多使用 64 個連接;她知道數(shù)據(jù)庫服務(wù)器已經(jīng)被設(shè)置成最多答應(yīng) 128 臺客戶機進行連接。
  
  Dolly 在走向災(zāi)難
  在開發(fā)階段,每件事都進行得很順利。但是,在部署的時候,開始失控。Dolly 的網(wǎng)絡(luò)治理員告訴她,她不能從她的桌面機訪問生產(chǎn)服務(wù)器或登臺服務(wù)器(staging server),所以她不得不為每個部署階段開發(fā)不同的代碼版本。因為這種情況,她需要一個新的 JDBC URL,所以還要為測試、階段和生產(chǎn)進行獨立的部署。(一聽到要在每個環(huán)境中建立單獨部署,熟悉配置治理的人會戰(zhàn)戰(zhàn)兢兢的,但是既然這是種非常普遍的情況,所以他們也只好硬著頭皮上了。)
  
  就在 Dolly 認為通過不同的 URL 建立彼此獨立的部署已經(jīng)解決了自己的配置問題時,她發(fā)現(xiàn)她的數(shù)據(jù)庫治理員不想在生產(chǎn)環(huán)境中運行 MySQL 實例。他說,MySQL 用作開發(fā)還可以,但是對于任務(wù)要害型數(shù)據(jù)而言,業(yè)務(wù)標準是 DB2?。現(xiàn)在她的構(gòu)建不僅在數(shù)據(jù)庫 URL 方面有所不同,而且還需要不同的驅(qū)動程序。
  
  事情越變越糟。她的應(yīng)用程序非常有用,并且變得非常要害,以致于它從應(yīng)用服務(wù)器那里得到了故障恢復(fù)的能力,并被復(fù)制到 4 個服務(wù)器集群。但是數(shù)據(jù)庫治理員提出了抗議,因為她的應(yīng)用程序的每個實例都要使用 64 個連接,而數(shù)據(jù)庫服務(wù)器總共只有 200 個可用連接 —— 全部都被 Dolly 的應(yīng)用程序占用了。更麻煩的是,DBA 已經(jīng)確定 Dolly 的應(yīng)用程序只需要 32 個連接,而且天天只有一個小時在使用。
  
  隨著她的應(yīng)用程序規(guī)模擴大,應(yīng)用程序碰到了數(shù)據(jù)庫級的爭用問題,而她的惟一選擇就是改變集群的連接數(shù)量,而且還要做好預(yù)備,在集群數(shù)量增長或者應(yīng)用程序復(fù)制到另一個集群時再重復(fù)一次這樣的操作。看來她已經(jīng)決定了如何配置應(yīng)用程序,應(yīng)用程序的配置最好是留給系統(tǒng)治理員和數(shù)據(jù)庫治理員來做。
  
  J2EE 的角色
  假如 Dolly 在開發(fā)應(yīng)用程序時了解 J2EE 所扮演的角色,那么她就可能避免遭遇這種困境。J2EE 規(guī)范把職責委托給多個開發(fā)角色:組件提供者(Component PRovider)、應(yīng)用程序組裝者(application Assembler)、部署人員(Deployer)和系統(tǒng)治理員(System Administrator)。(在許多公司中,組件提供者和組件組裝者的角色是融合在一起的,部署人員和系統(tǒng)治理員的角色是融合在一起的。)在真正了解 J2EE 中的 JNDI 角色之前,把握 J2EE 角色的作用非常重要。
  
  組件提供者
  這個角色負責創(chuàng)建 J2EE 組件,J2EE 組件可以是 Web 應(yīng)用程序、企業(yè)級 JavaBean(EJB)組件,或者是應(yīng)用程序客戶機(例如基于 Swing 的 GUI 客戶機應(yīng)用程序)。組件提供者包括:Html 設(shè)計師、文檔編程人員以及其他開發(fā)人員角色。大多數(shù) J2EE 開發(fā)人員在組件提供者這一角色上耗費了相當多的時間。
  
  應(yīng)用程序組裝者
  這個角色將多個 J2EE 模塊捆綁成一個彼此結(jié)合的、可以部署的整體:企業(yè)歸檔(EAR)文件。應(yīng)用程序組裝者要選擇組件,分清它們之間的交互方式,配置它們的安全性和事務(wù)屬性,并把應(yīng)用程序打包到 EAR 文件中。許多 IDE,例如 WebSphere? Studio、IDEA、JBuilder、WebLogic Workshop 和其他 IDE,都可以幫助應(yīng)用程序組裝者以交互方式配置 EAR 文件。
  
  部署人員(Deployer)
  這個角色負責部署,這意味著將 EAR 安裝到 J2EE 容器(應(yīng)用服務(wù)器)中,然后配置資源(例如數(shù)據(jù)庫連接池),把應(yīng)用程序需要的資源綁定到應(yīng)用服務(wù)器中的特定資源上,并啟動應(yīng)用程序。
  
  系統(tǒng)治理員(System Administrator)
  
  這個角色負責保證容器需要的資源可用于容器。
  
  角色實戰(zhàn)
  假設(shè)有一個企業(yè)應(yīng)用程序,該應(yīng)用程序包含一個 Web 應(yīng)用程序,還有一個負責業(yè)務(wù)邏輯和持久性的 EJB 組件。開發(fā)這個應(yīng)用程序的組件供給商可能有許多,但是在許多情況下,可以由一個人來承擔全部職責。組件可以包含數(shù)據(jù)傳輸對象(一個 JAR 文件)、EJB 接口(另一個 JAR 文件)、EJB 實現(xiàn)本身(另一個 JAR 文件),以及用戶界面組件 —— servlet、jsp、HTML 頁面和其他靜態(tài) Web 內(nèi)容。用戶界面組件被進一步打包成 Web 應(yīng)用程序,其中包含 servlet 類、JSP 文件、靜態(tài)內(nèi)容,以及其他必需組件的 JAR(包括 EJB 接口)。
  
  這聽起來似乎用到的組件太多了,幾乎超出了人的想像范圍,尤其是在考慮構(gòu)建一個典型的 Web 應(yīng)用程序需要使用多少個 JAR 文件的時候。但是,重要的是熟悉到在這里必須小心地治理依靠性。接口和傳輸對象是 Web 應(yīng)用程序和 EJB 實現(xiàn)可以依靠的對象,但是依靠性的方向應(yīng)該是相同的;還要避免產(chǎn)生循環(huán)依靠。J2EE 組件(例如 WAR 文件和 EJB JAR 文件)必須在它們的部署單元之外聲明它們在資源上的依靠性。
  
  應(yīng)用程序組裝者負責把 Web 應(yīng)用程序中的依靠內(nèi)容包含進來,并把它們整體打包成單個企業(yè)應(yīng)用程序。工具在這里幫助很大。IDE 可以協(xié)助創(chuàng)建反映模塊和 JAR 依靠性的項目結(jié)構(gòu),還答應(yīng)您隨意指定包含或排除的模塊。
  
  部署人員負責確保部署環(huán)境中存在組件所需的資源,并將組件綁定到平臺的可用資源上。例如,Web 應(yīng)用程序中的外部 EJB 引用(部署描述符中的 ejb-ref)就是在此時被綁定到實際部署的 EJB 組件 —— 而且是立即綁定。
  
  外部資源的后綁定
  任何不平凡(nontrivial)的 J2EE 應(yīng)用程序都需要訪問描述它期望使用環(huán)境的信息。這意味著開發(fā)和測試組件時,為了臨時測試代碼,開發(fā)人員要承擔一些部署方面的職責。重要的是要理解:這么做的時候,您就走出了開發(fā)人員的領(lǐng)域。否則,可以試著依靠 JDBC 驅(qū)動程序,或 URL、JMS 隊列名稱,或者其他具有無意識的、偶然可能是災(zāi)難性暗示的機器資源。
  
  JNDI 前來援助
  Dolly 的問題的解決方案是從她的應(yīng)用程序中清除所有對數(shù)據(jù)存儲的直接引用。沒有對 JDBC 驅(qū)動程序的引用,沒有服務(wù)器名稱,沒有用戶名稱或口令 —— 甚至沒有數(shù)據(jù)庫池或連接治理。Dolly 需要編寫代碼來忽略將要訪問的特定外部資源,只需要知道其他人會提供使用這些外部資源所需的鏈接即可。這答應(yīng)部署人員(任何處在這個角色的人)把數(shù)據(jù)庫連接分配給 Dolly 的應(yīng)用程序。Dolly 沒有必要參與其中。(從數(shù)據(jù)庫安全性到遵守 Sarbanes-Oxley 法案,她都沒有參與進來,她這樣做也有充足的業(yè)務(wù)理由。)
  
  許多開發(fā)人員知道:代碼和外部資源之間的緊密耦合是潛在的問題,但是在實踐中卻經(jīng)常忘記角色的劃分。在小型開發(fā)工作中(指的是團隊規(guī)模或部署規(guī)模),即使忽視角色劃分也能獲得成功。(究竟,假如應(yīng)用程序只是個人的應(yīng)用程序,而且您不預(yù)備依靠它,那么把應(yīng)用程序鎖定在特定的 PostgreSQL 實例上也挺好的。)
  
  J2EE 規(guī)范要求所有 J2EE 容器都要提供 JNDI 規(guī)范的實現(xiàn)。JNDI 在 J2EE 中的角色就是“交換機” —— J2EE 組件在運行時間接地查找其他組件、資源或服務(wù)的通用機制。在多數(shù)情況下,提供 JNDI 供給者的容器可以充當有限的數(shù)據(jù)存儲,這樣治理員就可以設(shè)置應(yīng)用程序的執(zhí)行屬性,并讓其他應(yīng)用程序引用這些屬性(Java 治理擴展(Java Management Extensions,JMX)也可以用作這個目的)。
  
  JNDI 在 J2EE 應(yīng)用程序中的主要角色就是提供間接層,這樣組件就可以發(fā)現(xiàn)所需要的資源,而不用了解這些間接性。
  
  Dolly 的情況更糟了
  現(xiàn)在我們重新來看一下 Dolly 的情況。在其簡單的 Web 應(yīng)用程序中,她直接從應(yīng)用程序代碼中使用了一個 JDBC 連接。參見清單 1,我們可以看出,Dolly 顯式地把 JDBC 驅(qū)動程序、數(shù)據(jù)庫 URL 以及她的用戶名和口令編碼到了 servlet 中:
  
  清單 1. 典型(但是不好)的 JDBC 用法:
  
  Connection conn=null;
  try {
   Class.forName("com.mysql.jdbc.Driver",
          true, Thread.currentThread().getContextClassLoader());
   conn=DriverManager.getConnection("jdbc:mysql://dbserver?user=dolly&passWord=dagger");
   /* use the connection here */
   c.close();
  }
  catch(Exception e) {
   e.printStackTrace();
  }
  finally {
   if(conn!=null) {
    try {
     conn.close();
    } catch(SQLException e) {}
   }
  }
  假如不用這種方式指定配置信息,Dolly(以及她的同伴們)使用 JNDI 來查找 J

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 綦江县| 渝北区| 石楼县| 兴宁市| 青神县| 虎林市| 策勒县| 九台市| 米易县| 栾城县| 盖州市| 绍兴市| 龙泉市| 鹤山市| 博兴县| 仙桃市| 常州市| 丰宁| 武威市| 金川县| 南安市| 阿拉善右旗| 南阳市| 台中市| 竹溪县| 将乐县| 隆安县| 太白县| 天祝| 景宁| 涿州市| 大连市| 遵义市| 昌邑市| 临清市| 巴彦县| 龙陵县| 武平县| 通城县| 封开县| 南丹县|