多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > 互聯(lián)網(wǎng) > J2EE的13個規(guī)范之(一) JNDI

J2EE的13個規(guī)范之(一) JNDI

來源:程序員人生   發(fā)布時間:2014-10-10 08:00:01 閱讀次數(shù):2382次

       最近在學習J2EE,原本以為J2EE也是一種類似于J2SE,c#,vb 那樣的高級語言,沒想到當學了視頻以后,認識到其他他并不是這樣的。

        J2EE是一套全然不同于傳統(tǒng)應(yīng)用開發(fā)的技術(shù)架構(gòu),包含許多組件,主要可簡化且規(guī)范應(yīng)用系統(tǒng)的開發(fā)與部署,進而提高可移植性、安全與再用價值。簡單來說他就是一套規(guī)范!

        J2EE組件和標準的” Java類的不同點在于:它被裝配在一個J2EE應(yīng)用中,具有固定的格式并遵守J2EE規(guī)范,由J2EE服務(wù)器對其進行管理。J2EE規(guī)范是這樣定義J2EE組件的:客戶端應(yīng)用程序和applet是運行在客戶端的組件;Java ServletJava Server Pages (JSP)是運行在服務(wù)器端的Web組件;EnterpriseJava Bean (E JB )組件是運行在服務(wù)器端的業(yè)務(wù)組件等13個組件(規(guī)范)。

        今天我們就來說一下,他的JNDI組件

一、JNDI是什么?

      JNDI--Java 命名和目錄接口(Java Naming and Directory Interface),是一組在Java應(yīng)用中訪問命名服務(wù)和目錄服務(wù)的API。

       命名服務(wù),說白了就是提供一個名稱鍵值對的管理,即Key-Value對,Key代表一個資源的名稱,Value代表資源的真實地址,命名服務(wù)允許大家通過唯一的名稱找到對應(yīng)的對象或資源。這樣程序只需要知道某種資源的名稱,就可以通過JNDI來訪問到它,而不需要知道這個資源真實的物理地址。這有點類似于DNS服務(wù),DNS服務(wù)將域名解析成IP地址,這樣大家只需要在瀏覽器中輸入網(wǎng)站的唯一名稱(即域名)就可以訪問到該網(wǎng)站,而不需要記住這個網(wǎng)站真實的IP地址。

       目錄服務(wù),提供的也是一種公共資源的管理服務(wù)。目錄服務(wù)是一種特殊類型的數(shù)據(jù)庫,它按照一定的數(shù)據(jù)結(jié)構(gòu),比如樹型結(jié)構(gòu),把各種公共資源組織并保存起來。這種特殊數(shù)據(jù)庫與傳統(tǒng)關(guān)系型數(shù)據(jù)庫的區(qū)別在于,它對查詢作了優(yōu)化,其數(shù)據(jù)結(jié)構(gòu)允許大家非常快速的找到想要的資源,即保障了一種快速查找能力,不過這種設(shè)計也犧牲了其他方面的效率,比如它的更新效率就要低得多。

       目錄服務(wù)中管理的也是名稱鍵值對,不過其鍵值是具有層次結(jié)構(gòu)的,像一棵樹,即通過一個名稱或一個帶層次結(jié)構(gòu)的名稱,你可以定位到一顆子樹,而不只是一個屬性。由此可見,目錄服務(wù)將命名服務(wù)的概念進一步引申為提供具有層次結(jié)構(gòu)的信息庫。一個目錄服務(wù)通常擁有一個命名服務(wù),但是一個命名服務(wù)不必具有一個目錄服務(wù)。

        要了解JNDI的作用,我們可以從如果不用JNDI我們怎樣做?用了JNDI后我們又將怎樣做?這個問題來探討。

        沒有JNDI的做法:程序員開發(fā)時,知道要開發(fā)訪問MySQL數(shù)據(jù)庫的應(yīng)用,于是將一個對 MySQL JDBC 驅(qū)動程序類的引用進行了編碼,并通過使用適當?shù)?/span> JDBC URL連接到數(shù)據(jù)庫。

就像以下代碼這樣:

<span style="font-size:14px;">Connection conn=null; try { Class.forName("com.mysql.jdbc.Driver", true, Thread.currentThread().getContextClassLoader()); conn=DriverManager.getConnection("jdbc:mysql://MyDBServer?user=qingfeng&password=mingyue"); /* 使用conn并進行SQL操作 */ ...... conn.close(); } catch(Exception e) { e.printStackTrace(); } finally { if(conn!=null) { try { conn.close(); } catch(SQLException e) {} } } </span>

        這是傳統(tǒng)的做法,也是以前非Java程序員(如DelphiVB等)常見的做法。這種做法一般在小規(guī)模的開發(fā)過程中不會產(chǎn)生問題,只要程序員熟悉Java語言、了解JDBC技術(shù)和MySQL,可以很快開發(fā)出相應(yīng)的應(yīng)用程序。看一下這樣做的話會有那些問題

       1、數(shù)據(jù)庫服務(wù)器名稱MyDBServer 、用戶名和口令都可能需要改變,由此引發(fā)JDBC URL需要修改;

       2、數(shù)據(jù)庫可能改用別的產(chǎn)品,如改用DB2或者Oracle,引發(fā)JDBC驅(qū)動程序包和類名需要修改;

       3、隨著實際使用終端的增加,原配置的連接池參數(shù)可能需要調(diào)整;

      4......

解決辦法:

       程序員應(yīng)該不需要關(guān)心具體的數(shù)據(jù)庫后臺是什么?JDBC驅(qū)動程序是什么?JDBC URL格式是什么?訪問數(shù)據(jù)庫的用戶名和口令是什么?等等這些問題,程序員編寫的程序應(yīng)該沒有對 JDBC驅(qū)動程序的引用,沒有服務(wù)器名稱,沒有用戶名稱或口令 ――甚至沒有數(shù)據(jù)庫池或連接管理。而是把這些問題交給J2EE容器來配置和管理,程序員只需要對這些配置和管理進行引用即可。

由此,就有了JNDI


用了JNDI之后的做法:

        首先,在在J2EE容器中配置JNDI參數(shù),定義一個數(shù)據(jù)源,也就是JDBC引用參數(shù),給這個數(shù)據(jù)源設(shè)置一個名稱;然后,在程序中,通過數(shù)據(jù)源名稱引用數(shù)據(jù)源從而訪問后臺數(shù)據(jù)庫。
具體操作如下(以JBoss為例):
1
、配置數(shù)據(jù)源
        在JBossD:/jboss420GA/docs/examples/jca文件夾下面,有很多不同數(shù)據(jù)庫引用的數(shù)據(jù)源定義模板。將其中的 mysql-ds.xml文件Copy到你使用的服務(wù)器下,如D:/jboss420GA/server/default/deploy。修改 mysql-ds.xml 文件的內(nèi)容,使之能通過JDBC正確訪問你的MySQL數(shù)據(jù)庫,如下:

<span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <jndi-name>MySqlDS</jndi-name> <connection-url>jdbc:mysql://localhost:3306/lw</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>root</user-name> <password>rootpassword</password> <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name> <metadata> <type-mapping>mySQL</type-mapping> </metadata> </local-tx-datasource> </datasources> </span>
這里,定義了一個名為MySqlDS的數(shù)據(jù)源,其參數(shù)包括JDBC的URL,驅(qū)動類名,用戶名及密碼等。

2、 在程序中引用數(shù)據(jù)源:

<span style="font-size:14px;">Connection conn=null; try { Context ctx=new InitialContext(); Object datasourceRef=ctx.lookup("java:MySqlDS"); //引用數(shù)據(jù)源 DataSource ds=(Datasource)datasourceRef; conn=ds.getConnection(); /* 使用conn進行數(shù)據(jù)庫SQL操作 */ ...... c.close(); } catch(Exception e) { e.printStackTrace(); } finally { if(conn!=null) { try { conn.close(); } catch(SQLException e) { } } } </span>
        直接使用JDBC或者通過JNDI引用數(shù)據(jù)源的編程代碼量相差無幾,但是現(xiàn)在的程序可以不用關(guān)心具體JDBC參數(shù)了。在系統(tǒng)部署后,如果數(shù)據(jù)庫的相關(guān)參數(shù)變更,只需要重新配置 mysql-ds.xml 修改其中的JDBC參數(shù),只要保證數(shù)據(jù)源的名稱不變,那么程序源代碼就無需修改。

由此可見,JNDI避免了程序與數(shù)據(jù)庫之間的緊耦合,使應(yīng)用更加易于配置、易于部署。




生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 欧美a色爱欧美综合v | 国产成人精品免费大全 | 日本另类图片 | videosex久久麻豆 | 国产在线啪 | 亚洲欧美日韩小说 | 最近中文字幕无免费 | 亚洲国产成人精品一区二区三区 | 亚洲人成综合网站在线 | 国内精品久久久久久网站 | jiucao在线看片www | 亚洲一区二区三区首页 | 欧美xxxx18性欧美护士 | 国产精品视频永久免费播放 | 羞羞影视 | 自拍偷拍视频网 | 欧美70一80老妇性大片 | 九一精品国产 | 在线观看日韩欧美 | 国产在线乱子伦一区二区 | 日本一二三区在线视频 | 欧美中日韩在线 | 夜夜爽www | 老司机福利在线观看 | 久久久久国产一级毛片高清版 | 国产高清日韩 | 国产色综合一区二区三区 | 中文字幕2021免费看 | 久久久一区二区三区不卡 | 欧美video free xxxxx| 国产日韩精品欧美一区色 | 日韩在线高清视频 | 国产免费一级精品视频 | 欧美在线看片 | 日本一区视频在线观看 | 精品一区二区三区四区在线 | 最近中文字幕国语免费高清6 | 亚洲精品高清久久 | 国产精品亚洲午夜不卡 | 91久久精品一区二区 | 欧美专区日韩 |