亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 12:28:03
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产乱码久久久久久蜜臀| 91亚洲精品在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲精品之草原avav久久| 91经典在线视频| 日韩成人激情影院| 亚洲欧美变态国产另类| 亚洲尤物视频网| 欧美中文在线字幕| 欧美午夜激情视频| 日韩国产高清视频在线| 亚洲伊人久久综合| 97国产精品视频人人做人人爱| 亚洲黄色成人网| 日本久久精品视频| 国产精品爱啪在线线免费观看| 国产精品久久77777| 国产精品久久77777| 亚洲天堂av在线免费| …久久精品99久久香蕉国产| 国产精品高潮呻吟久久av野狼| 国产精品亚洲视频在线观看| 国产精品日日做人人爱| 欧美亚洲另类制服自拍| 亚洲色图偷窥自拍| 萌白酱国产一区二区| 国产va免费精品高清在线| 久久久国产精品亚洲一区| 中文字幕综合一区| 亚洲人成77777在线观看网| 久久精品国产欧美亚洲人人爽| 欧美日韩亚洲一区二区三区| 国产精品影院在线观看| 亚洲视频在线看| 久久网福利资源网站| 日韩视频在线免费| 日韩免费av一区二区| 成人免费看片视频| 亚洲综合精品伊人久久| 国产精品久久久久久av福利软件| 国产精品第100页| 欧美激情一二区| 日韩美女av在线免费观看| 欧美国产第二页| 这里只有视频精品| 91久久久久久久久| 久久久久久午夜| 91超碰中文字幕久久精品| 欧美一区二区色| 久青草国产97香蕉在线视频| 视频直播国产精品| 欧美中文字幕第一页| 欧美精品电影免费在线观看| 亚洲国产精品va在看黑人| 91久久综合亚洲鲁鲁五月天| 亚洲二区在线播放视频| 国产视频精品免费播放| 91精品国产高清久久久久久91| 精品亚洲精品福利线在观看| 91亚洲精品久久久| 精品视频在线播放免| 日韩av电影免费观看高清| 国产精品视频白浆免费视频| 国产视频在线一区二区| 亚洲一区中文字幕在线观看| 国产日本欧美一区| 亚洲www在线观看| 亚洲国产欧美一区| 日韩av网址在线| 欧美韩国理论所午夜片917电影| 国产精品高清网站| 国产日韩在线看| 亚洲日本中文字幕| 欧美午夜视频在线观看| 久久成人人人人精品欧| 国产精品电影久久久久电影网| 91美女片黄在线观看游戏| 日韩电视剧免费观看网站| 夜夜嗨av一区二区三区免费区| 久久久国产视频| 欧美日韩在线视频一区| 久久免费福利视频| 亚洲国产黄色片| 国产精品久久久久久久久久ktv| 日韩高清免费观看| 亚洲性线免费观看视频成熟| 在线观看欧美日韩| 欧美亚洲视频在线观看| 国产精品免费福利| 久久久久久久激情视频| 日韩国产中文字幕| 一二美女精品欧洲| 国产日韩欧美日韩大片| 亚洲激情第一页| 精品国产一区二区在线| 亚洲无av在线中文字幕| 欧美老肥婆性猛交视频| 亚洲在线视频观看| 日本一区二区三区在线播放| 成人春色激情网| 欧美精品电影免费在线观看| 欧美综合一区第一页| 欧美成年人在线观看| 国模精品视频一区二区三区| 亚洲乱码一区av黑人高潮| 欧美性xxxxxxxxx| 国产一区二区三区18| 91成人天堂久久成人| 美女视频久久黄| 久久人人爽亚洲精品天堂| 自拍偷拍免费精品| 国产精品99久久99久久久二8| 在线日韩精品视频| 国产精品久久av| 国产亚洲激情视频在线| 亚洲精品www久久久久久广东| 中国人与牲禽动交精品| 在线播放精品一区二区三区| 国产成人短视频| 日韩中文字幕视频在线观看| 成人黄色大片在线免费观看| 欧美激情一区二区三区久久久| 日韩中文第一页| 久久久久久久久久久久久久久久久久av| 91中文字幕在线观看| 日本电影亚洲天堂| 久久久免费在线观看| 国产成人久久精品| 国产成人精品一区二区在线| 国产伦精品免费视频| 精品久久香蕉国产线看观看亚洲| 日日狠狠久久偷偷四色综合免费| 亚洲第一网站男人都懂| 九九热99久久久国产盗摄| 久久精品99久久久久久久久| 欧美又大又硬又粗bbbbb| 亚洲成人精品久久久| 97热精品视频官网| 国产精品都在这里| 欧美激情性做爰免费视频| 亚洲激情久久久| 亚洲老板91色精品久久| 亚洲精品午夜精品| 7777精品久久久久久| 日韩h在线观看| 欧美一级片免费在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 97精品国产aⅴ7777| 91在线视频一区| xxxxxxxxx欧美| xxxx性欧美| 国产精品吊钟奶在线| 日韩视频免费观看| 亚洲一区二区精品| 国产精品久久久久久中文字| 亚洲自拍小视频免费观看| 不用播放器成人网| 国产午夜精品全部视频播放| 成人网中文字幕| 亚洲福利在线观看| 日韩电影免费观看在线观看| 欧美大片免费看| 91亚洲精华国产精华| 国产a∨精品一区二区三区不卡|