欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JNDI,JTA和JMS簡介

 更新時間:2017年09月21日 09:31:51   作者:cuiran  
這篇文章主要介紹了JNDI,JTA和JMS的相關(guān)內(nèi)容,包括中文釋義,概念解釋等,需要的朋友可以了解下。

什么是JNDI

原理:在DataSource中事先建立多個數(shù)據(jù)庫連接,保存在數(shù)據(jù)庫連接池中。當程序訪問數(shù)據(jù)庫時,只用從連接池中取空閑狀態(tài)的數(shù)據(jù)庫連接即可,訪問結(jié)束,銷毀資源,數(shù)據(jù)庫連接重新回到連接池,這與每次去直接訪問數(shù)據(jù)庫相比,會節(jié)省大量時間和資源。

JNDI( Java Naming and DirectoryInterface ),是Java平臺的一個標準擴展,提供了一組接口、類和關(guān)于命名空間的概念。如同其它很多Java技術(shù)一樣,JDNI是provider-based的技術(shù),暴露了一個 API和一個服務供應接口(SPI)。這意味著任何基于名字的技術(shù)都能通過JNDI而提供服務,只要JNDI支持這項技術(shù)。JNDI目前所支持的技術(shù)包括 LDAP、CORBA Common Object Service(COS)名字服務、RMI、NDS、DNS、Windows注冊表等等。很多J2EE技術(shù),包括EJB都依靠JNDI來組織和定位實體??梢园阉斫鉃橐环N將對象和名字捆綁的技術(shù),對象工廠負責生產(chǎn)出對象,這些對象都和唯一的名字綁在一起,外部資源可以通過名字獲得某對象的引用。

在javax.naming的包中提供Context接口,提供了兩個很好用的方法:

<1> void bind( String name , Object object )

將名稱綁定到對象。所有中間上下文和目標上下文(由該名稱最終原子組件以外的其他所有組件指定)都必須已經(jīng)存在。

<2>Object lookup( String name )

檢索指定的對象。如果 name為空,則返回此上下文的一個新實例(該實例表示與此上下文相同的命名上下文,但其環(huán)境可以獨立地進行修改,而且可以并發(fā)訪問)。

運行機制:

1、首先程序代碼獲取初始化的 JNDI 環(huán)境并且調(diào)用 Context.lookup() 方法從 JNDI 服務提供者那里獲一個 DataSource 對象

2、中間層 JNDI 服務提供者返回一個 DataSource 對象給當前的 Java 應用程序這個 DataSource 對象代表了中間層服務上現(xiàn)存的緩沖數(shù)據(jù)源

3、應用程序調(diào)用 DataSource 對象的 getConnection() 方法

4、當 DataSource 對象的 getConnection() 方法被調(diào)用時,中間層服務器將查詢數(shù)據(jù)庫連接緩沖池中有沒有PooledConnection 接口的實例對象。這個 PooledConnection 對象將被用于與數(shù)據(jù)庫建立物理上的數(shù)據(jù)庫連接

5、如果在緩沖池中命中了一個PooledCoonection 對象那么連接緩沖池將簡單地更新內(nèi)部的緩沖連接隊列并將該PooledConnection 對象返回。如果在緩沖池內(nèi)沒有找到現(xiàn)成的PooledConnection 對象,那么 ConnectionPoolDataSource 接口將會被用來產(chǎn)生一個新的PooledConnection 對象并將它返回以便應用程序使用

6。中間層服務器調(diào)用PooledConnection 對象的 getConnection() 方法以便返還一個 java.sql.Connection 對象給當前的 Java 應用程序

7、當中間層服務器調(diào)用PooledConnection 對象的 getConnection() 方法時, JDBC 數(shù)據(jù)庫驅(qū)動程序?qū)?chuàng)建一個 Connection 對象并且把它返回中間層服務器

8、中間層服務器將 Connection 對象返回給應用程序 Java 應用程序,可以認為這個 Connection 對象是一個普通的 JDBC Connection 對象使用它可以和數(shù)據(jù)庫建立。事實上的連接與數(shù)據(jù)庫引擎產(chǎn)生交互操作。

9、當應用程序不需要使用 Connection 對象時,可以調(diào)用 Connection 接口的 close() 方法。請注意這種情況下 close() 方法并沒有關(guān)閉事實上的數(shù)據(jù)庫連接,僅僅是釋放了被應用程序占用的數(shù)據(jù)庫連接,并將它還給數(shù)據(jù)庫連接緩沖池,數(shù)據(jù)庫連接緩沖池會自動將這個數(shù)據(jù)庫連接交給請求隊列中下一個的應用程序使用。

現(xiàn)在,數(shù)據(jù)庫的連接沒有用到連接池幾乎很少很少,每個項目組都可能有自己的數(shù)據(jù)庫連接池組件,各容器提供商也提供了各自的數(shù)據(jù)庫連接池,下面介紹一下tomcat的數(shù)據(jù)庫連接管理。

tomcat6 數(shù)據(jù)源配置(server.xml方式和context.xml方式)

在server.xml下配置你必需重啟服務器才能生效,而context.xml配置保存后tomcat會自動加載無需重啟

在JNDI配配置數(shù)據(jù)源中需注意:項目下需要引入數(shù)據(jù)庫驅(qū)動包,并且TOMCAT下也需要引入,不然會報錯的

1.context.xml方式

Tomcat-6.0.26\conf\context.xml文件當添加以下的配置信息:

<Resource name="jdbc/mysql" auth="Container"type="javax.sql.DataSource" 
    maxActive="100"maxIdle="30" maxWait="60" wait_timeout="18800"timeBetweenEvictionRunsMillis="300000"minEvictableIdleTimeMillis="600000" 
    username="root"password="jdzxdb" driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/sxtele?comautoReconnect=true&failOverReadOnly=false" removeAbandoned="true"removeAbandonedTimeout="60" logAbandoned="true"/> 
<Resource name="jdbc/db2" auth="Container"type="javax.sql.DataSource" 
    maxActive="100"maxIdle="30" maxWait="60" wait_timeout="18800"timeBetweenEvictionRunsMillis="300000"minEvictableIdleTimeMillis="600000" 
    username="lcgluser" password="lcgluser"driverClassName="com.ibm.db2.jcc.DB2Driver" 
    url="jdbc:db2://133.64.46.65:50000/STEDWDB" removeAbandoned="true"removeAbandonedTimeout="60" logAbandoned="true"/> 

 其中:

name 表示指定的jndi名稱

auth 表示認證方式,一般為Container

type 表示數(shù)據(jù)源床型,使用標準的javax.sql.DataSource

maxActive 表示連接池當中最大的數(shù)據(jù)庫連接

maxIdle 表示最大的空閑連接數(shù)

maxWait 當池的數(shù)據(jù)庫連接已經(jīng)被占用的時候,最大等待時間

logAbandoned 表示被丟棄的數(shù)據(jù)庫連接是否做記錄,以便跟蹤

username 表示數(shù)據(jù)庫用戶名

password 表示數(shù)據(jù)庫用戶的密碼

driverClassName 表示JDBC DRIVER

url 表示數(shù)據(jù)庫URL地址

注意,這里你配置的name值要和程序中使用的是一樣的,比如按照這個例子,程序就應該是這樣的,Java代碼:

String gENV = "java:comp/env/"; 
Context ctx = new InitialContext(); 
  DataSource ds = (DataSource)ctx.lookup(gENV+"jdbc/mysql"); 
  Connection conn =ds.getConnection(); 
String gENV = "java:comp/env/";
Context ctx = new InitialContext();
  DataSource ds =(DataSource)ctx.lookup(gENV+"jdbc/db2");
  Connection conn =ds.getConnection();

關(guān)于獲取數(shù)據(jù)源的語法,大體有(javax.sql.DataSource) ctx.lookup("java:comp/env/XXX")(javax.sql.DataSource)ctx.lookup("XXX")兩種寫法,好多人以為這兩種寫法是相同的,以為都是通過JNDI來獲取數(shù)據(jù)源。其實java:comp/env和 JNDI是不同的,java:comp/env 是環(huán)境命名上下文(environmentnaming context(ENC)),是在EJB規(guī)范1.1以后引入的,引入這個是為了解決原來JNDI查找所引起的沖突問題,也是為了提高EJB或者J2EE應用的移植性。ENC是一個引用,引用是用于定位企業(yè)應用程序的外部資源的邏輯名。引用是在應用程序部署描述符文件中定義的。在部署時,引用被綁定到目標可操作環(huán)境中資源的物理位置(JNDI名)。使用ENC是把對其它資源的JNDI查找的硬編碼解脫出來,通過配置這個引用可以在不修改代碼的情況下,將引用指向不同的EJB(JNDI)。

什么是JTA

Java Transaction API(Java事務API)(JTA)Java Transaction API(Application Programming Interface)

什么是JTA Transaction?它有怎樣的特點呢?JTA Transaction是指由J2EE Transaction manager去管理的事務。其最大的特點是調(diào)用UserTransaction接口的begin,commit和rollback方法來完成事務范圍的 界定,事務的提交和回滾。JTATransaction可以實現(xiàn)同一事務對應不同的數(shù)據(jù)庫,但是它仍然無法實現(xiàn)事務的嵌套。

分布式事務的規(guī)范由OMG的OTS所描述。

JTA是只是一組java接口用于描述,J2ee框架中事務管理器與應用程序,資源管理器,以及應用服務器之間的事務通訊。

它主要包括高層接口即面向應用程序的接口;XAResource接口即面向資源的接口;以及事務管理器的接口。值得注意的是JTA只提供了接口,沒有具體的實現(xiàn)。

JTS是服務OTS的JTA的實現(xiàn)。簡單的說JTS實現(xiàn)了JTA接口,并且符合OTS的規(guī)范。

資源管理器只要其提供給事務管理器的接口符合XA接口規(guī)范,就可以被事務管理器處理。 所以,JTA可以處理任何提供符合XA接口的資源。包括:數(shù)據(jù)庫,JMS,商業(yè)對象等等 

“Java 事務 API”(JTA)啟用兩階段提交功能。當配置WebSphere Application Server 以訪問數(shù)據(jù)庫時,可選擇具有 JTA 能力的驅(qū)動程序。如果需要兩階段提交功能,則必須使用啟用 JTA 的驅(qū)動程序。

只要您在事務中調(diào)用了多個數(shù)據(jù)庫連接,就需要 JTA。只要您在事務中調(diào)用了多個數(shù)據(jù)庫服務器,就需要兩階段提交。這些連接可以是相同的物理數(shù)據(jù)庫服務器或多個數(shù)據(jù)庫服務器。例如:

[list=1][*]實體企業(yè) BeanEntity1 在應用程序服務器 AppServer1 中部署。[*]實體企業(yè) Bean Entity2 在應用程序服務器AppServer1 中部署。[*]會話企業(yè) Bean Session1 在應用程序服務器 AppServer1 中部署。[/list]如果Session1 對同一事務內(nèi)的 Entity1 和 Entity2 調(diào)用了方法而這兩個企業(yè) Bean 正在使用不同的物理數(shù)據(jù)庫連接,則必須對 Entity1 和 Entity2 使用的數(shù)據(jù)源啟用 JTA。當從相同的數(shù)據(jù)源對象獲取那些連接時,這也是成立的。這需要具有 JTA 能力的驅(qū)動程序以提交事務。
當事務涉及到多個進程時,JTA 也是必需的。例如,一個事務可能會涉及在多個應用程序服務器中部署的企業(yè) Bean。
[list=1][*]實體企業(yè) BeanEntity1 在應用程序服務器 AppServer1 中部署。[*]實體企業(yè) Bean Entity2 在應用程序服務器AppServer2 中部署。[*]會話企業(yè) Bean Session1 在應用程序服務器 AppServer1 中部署。[/list]如果Session1 對同一事務(此事務構(gòu)成一個分布式事務)內(nèi)的 Entity1 和 Entity2 調(diào)用了方法,則必須對 Entity1 和 Entity2 使用的數(shù)據(jù)源啟用 JTA。
性能實現(xiàn)JTA 啟用的連接與非 JTA 啟用的連接執(zhí)行情況不同?;诖嗽?,如果您的應用程序不需要 JTA,則最好使用非 JTA 啟用的驅(qū)動程序。

其它信息有關(guān) WebSphere Application Server 如何支持 JTA 的信息,參見 WebSphere Application Server 和 DB2UDB iSeries 版的事務處理及其子主題。

什么是JMS

jms即Java消息服務(JavaMessage Service)應用程序接口是一個Java平臺中關(guān)于面向消息中間件(MOM)的API,用于在兩個應用程序之間,或分布式系統(tǒng)中發(fā)送消息,進行異步通信。Java消息服務是一個與具體平臺無關(guān)的API,絕大多數(shù)MOM提供商都對JMS提供支持。jms同時也可以指Journal of Marketing Science,《營銷科學學報》的簡稱。此外,佳木斯的拼音縮寫也是jms。

傳遞方式

JMS有兩種傳遞消息的方式。標記為NON_PERSISTENT的消息最多投遞一次,而標記為PERSISTENT的消息將使用暫存后再轉(zhuǎn)送的機理投遞。如果一個JMS服務離線,那么持久性消息不會丟失但是得等到這個服務恢復聯(lián)機時才會被傳遞。所以默認的消息傳遞方式是非持久性的。即使使用非持久性消息可能降低內(nèi)務和需要的存儲器,并且這種傳遞方式只有當你不需要接收所有的消息時才使用。

雖然JMS規(guī)范并不需要JMS供應商實現(xiàn)消息的優(yōu)先級路線,但是它需要遞送加快的消息優(yōu)先于普通級別的消息。JMS定義了從0到9的優(yōu)先級路線級別,0是最低的優(yōu)先級而9則是最高的。更特殊的是0到4是正常優(yōu)先級的變化幅度,而5到9是加快的優(yōu)先級的變化幅度。舉例來說: topicPublisher.publish (message, DeliveryMode.PERSISTENT, 8, 10000); //Pub-Sub 或 queueSender.send(message,DeliveryMode.PERSISTENT, 8, 10000);//P2P  這個代碼片斷,有兩種消息模型,映射遞送方式是持久的,優(yōu)先級為加快型,生存周期是10000 (以毫秒度量)。如果生存周期設置為零,這則消息將永遠不會過期。當消息需要時間限制否則將使其無效時,設置生存周期是有用的。

總結(jié)

本文關(guān)于JNDI,JTA和JMS簡介就到這里,希望對大家有所幫助。

相關(guān)文章

  • LongAdder原理及創(chuàng)建使用示例詳解

    LongAdder原理及創(chuàng)建使用示例詳解

    這篇文章主要為大家介紹了LongAdder原理及創(chuàng)建使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • SpringBoot配置Apollo代碼實例

    SpringBoot配置Apollo代碼實例

    這篇文章主要介紹了SpringBoot配置Apollo代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java如何獲取數(shù)組和字符串的長度(length還是length())

    Java如何獲取數(shù)組和字符串的長度(length還是length())

    這篇文章主要介紹了Java如何獲取數(shù)組和字符串的長度(length還是length()),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Java設計模式之裝飾器模式

    Java設計模式之裝飾器模式

    這篇文章介紹了Java設計模式之裝飾器模式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • Java.lang.NullPointerException的錯誤解決

    Java.lang.NullPointerException的錯誤解決

    Java中NullPointerException是一種常見的運行時異常,通常發(fā)生在嘗試調(diào)用null對象的方法或訪問其屬性時,具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • mybatis一對多查詢功能

    mybatis一對多查詢功能

    這篇文章主要介紹了mybatis一對多查詢功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • 數(shù)組重排序(如何將所有奇數(shù)都放在所有偶數(shù)前面)的深入分析

    數(shù)組重排序(如何將所有奇數(shù)都放在所有偶數(shù)前面)的深入分析

    本篇文章是對數(shù)組重排序(如何將所有奇數(shù)都放在所有偶數(shù)前面)的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • 支票金額大寫轉(zhuǎn)換示例(金額大寫轉(zhuǎn)換器)

    支票金額大寫轉(zhuǎn)換示例(金額大寫轉(zhuǎn)換器)

    這篇文章主要介紹了支票金額大寫轉(zhuǎn)換示例(金額大寫轉(zhuǎn)換器),需要的朋友可以參考下
    2014-02-02
  • spring?boot寫java?web和接口

    spring?boot寫java?web和接口

    這篇文章主要介紹了spring?boot寫java?web和接口,Spring?Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程,該框架使用了特定的方式來進行配置,從而使開發(fā)人員不再需要定義樣板化的配置,下面詳細內(nèi)容需要的小伙伴可以參考一下
    2022-01-01
  • Java如何向Word模板中插入Base64圖片和數(shù)據(jù)信息

    Java如何向Word模板中插入Base64圖片和數(shù)據(jù)信息

    這篇文章主要介紹了Java如何向Word模板中插入Base64圖片和數(shù)據(jù)信息問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論