JNDI 配置:JBoss + MySQL

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   io   使用   java   strong   

一、JNDI 名詞解釋

    JNDI 是Java 命名和目錄介面(Java Naming and Directory Interface,JNDI)的簡稱.從一開始就一直是 Java 2 平台企業版(JEE)的核心技術之一。在JMS,JMail,JDBC,EJB等技術中,就大量應用的這種技術。

命名服務:它提供了為給定的資料集建立一個標準名字的能力。它允許把名稱同Java對象或資源關聯起來,而不必指出對象或資源的物理ID。基本的名字操作包含在Context介面中。

目錄服務:目錄服務是一種特殊類型的資料庫,與SQL Server、Access、Oracle等關聯式資料庫管理系統相反,構造目錄服務的目的是為了處理基於行為的事務,並且使用一種關係資訊模型。基本的目錄服務操作包含在DirContext介面中。

JNDI 的架構與實現  JNDI 的服務提供者

    一個服務提供者就是一組Java類的集合,它支援開發人員同目錄服務進行通訊,其方式類似於JDBC驅動程式與資料庫之間的通訊方式。能夠用於JNDI的服務提供者必須實現Context介面或Context的擴充介面Directory- Context。

    在使用JNDI時,讀者只需要瞭解JNDI,而服務提供者才關注實際的網路通訊協定、編碼/解碼值等細節。

    當下載SDK軟體開發包時,同時就下載了Sun公司的一些現有的服務提供者。這些服務提供者包括LDAP、NIS、COS(CORBA物件服務)、RMI註冊及檔案系統的提供者。如:hashtableObj.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.ldapCtx- Fatory")就是表示使用Sun LDAP服務提供者。當然如果要使用IBM服務提供者時就可以用com.ibm.jndi.LDAPCtxFatory來代替com.sun.jndi.ldap.ldapCtxFatory。

JNDI 的包

JNDI 包含5個包

    ·    javax.naming:主要用於命名操作,它包含了命名服務的類和介面,該包定義了Context介面和InitialContext類;

    ·    javax.naming.directory:主要用於目錄操作,它定義了DirContext介面和InitialDir- Context類;

    ·    javax.naming.event:在命名目錄伺服器中請求事件通知;

    ·    javax.naming.ldap:提供LDAP支援;

    ·    javax.naming.spi:允許動態插入不同實現,為不同命名目錄服務供應商的開發人員提供開發和實現的途徑,以便應用程式通過JNDI可以訪問相關服務。

常用的 JNDI 操作

常用的JNDI操作如下:

 void bind(String sName,Object object),綁定:把名稱同對象關聯的過程。 void rebind(String sName,Object object),重新綁定:用來把對象同一個已經存在的名稱重新綁定。一般使用rebind()而不使用bind(),因為當有重名的時候rebind()不會出現異常,而bind()會報異常。 void unbind(String sName),釋放:用來把對象從目錄中釋放出來。 void lookup(String sName,Object object),尋找:返回目錄總的一個對象。 void rename(String sOldName,String sNewName),重新命名:用來修改對象名稱綁定的名稱。 NamingEnumeration listBindings(String sName),清單:返回綁定在特定上下文中指定屬性名稱對象的清單列表,它返回名字、類和對象本身,它用於那些需要對

具體使用方式如下:

//得到初始目錄環境的一個引用Context cntxt = new InitialContext();//返回綁定在特定上下文中指定屬性名稱對象的清單列表NamingEnumeration namEnumList = ctxt.listBinding("cntxtName");//迴圈列出所有名字、類和對象while ( namEnumList.hasMore() )  {    Binding bnd = (Binding) namEnumList.next();    String sObjName = bnd.getName();    String sClassName = bnd.getClassName();    //得到對象    SomeObject objLocal = (SomeObject) bnd.getObject();}

NamingEnumeration list(String sName)與listBindings(String sName)相似,只是它只返回一系列名字/類映射,它主要是用於上下文瀏覽應用。

 二、JNDI 配置

 配置 JNDI 資源

複製 JBoss 文檔的資料庫引用的資料來源定義模板到 JBoss 伺服器。 $DOC_HOME/docs/examples/jca/mysql-ds.xml ---> $Server_HOME/server/default/deploy.

修改 mysql-ds.xml 檔案的內容,使之能通過JDBC正確訪問你的MySQL資料庫,如下:

<?xml version="1.0" encoding="UTF-8"?><datasources><local-tx-datasource>    <jndi-name>MySqlDS</jndi-name>    <connection-url>jdbc:mysql://localhost:3306/demo</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>

配置 JNDI 資源引用

為了讓 JNDI 解析 java:comp/env/jdbc/mydatasource 引用,必須把 <resource-ref> 標籤插入 web.xml 檔案(Web 應用程式的部署描述符)

<resource-ref>: 資源引用,一般聲明管理資源,如資料庫驅動程式、JavaMail 會話、自訂類工廠等。
<resource-env-ref>: 資源環境引用,在Servlet 2.4裡用來簡化設定不需認證資訊的資源環境,一般聲明與資源相關的被管理對象,如環境參數、resource-ref變數。

<resource-ref>   <res-ref-name>jdbc/mydatasource</res-ref-name>   <jndi-name>java:MySqlDS</jndi-name>  // 指向真實的 JNDI name   <res-type>javax.sql.DataSource</res-type>   <res-auth>Container</res-auth></resource-ref>

<resource-ref> 入口告訴 servlet 容器,部署人員要在 組件命名內容(component naming context) 中設定一個叫做 jdbc/mydatasource的資源。組件命名內容由首碼 java:comp/env/ 表示,所以完整本地資源名稱是: java:comp/env/jdbc/mydatasource.

使用 JNDI 得到資料來源

Connection conn=null;try {  Context ctx=new InitialContext();  Object datasourceRef=ctx.lookup("java:comp/env/jdbc/mydatasource");  DataSource ds=(Datasource)datasourceRef;  Connection c=ds.getConnection();  /* use the connection */  c.close();} catch(Exception e) {  e.printStackTrace();} finally {  if(conn!=null) {    try {      conn.close();    } catch(SQLException e) { }  }}

 

外部資源連結:

JNDI 在 J2EE 中的角色

詳解JNDI的lookup資源引用java:/comp/env  

tomcat下jndi的三種配置方式

Apache Tomcat 5.5 Servlet/JSP 容器

resource-ref和resource-env-ref

JNDI 配置:JBoss + MySQL

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.