日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

01

 yespon 2016-09-11

在S2SH開發(fā)中會使用的Spring來注入數(shù)據(jù)源,在本地開發(fā)時我們使用<bean>注入數(shù)據(jù)源

Xml代碼  收藏代碼
  1. <bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  2.     <property name="driverClassName" value="${jdbc.driverClassName}" />  
  3.     <property name="url" value="${jdbc.url}" />  
  4.     <property name="username" value="${jdbc.username}" />  
  5.     <property name="password" value="${jdbc.password}" />  
  6.     <property name="maxActive" value="${jdbc.maxActive}" />  
  7. </bean>  

 

上面的配置文件取自Spring中,有了dataSourceSpied就可以將這個數(shù)據(jù)源引入到hibernate的sessionFactory

Xml代碼  收藏代碼
  1. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
  2.     <!-- 配置sessionFactory中要用的數(shù)據(jù)源 -->  
  3.     <property name="dataSource" ref="dataSourceSpied" />  
  4.     ...  
  5. </bean>  

 

但是在生產上,或者測試環(huán)境數(shù)據(jù)庫的鏈接、用戶名、密碼都是很重要的信息,不能直接暴露在外面。所以在生成、測試環(huán)境我們會使用JNDI這種服務來得到數(shù)據(jù)庫鏈接

Xml代碼  收藏代碼
  1. <jee:jndi-lookup id="dataSourceSpied" jndi-name="dataSourceDBaihis" />  

然后再web服務器上創(chuàng)建數(shù)據(jù)源。我們使用weblogic11這種web服務器,在上面創(chuàng)建數(shù)據(jù)源,數(shù)據(jù)源的名字叫做“dataSourceDBaihis”這樣在Spring配置文件中使用:

Xml代碼  收藏代碼
  1. <jee:jndi-lookup id="dataSourceSpied" jndi-name="dataSourceDBaihis" />  

就能得到數(shù)據(jù)源。

那么什么叫做JNDI呢?

JNDI:Java Naming and Directory Interface,Java命名和目錄接口。

是一種命名服務的抽象機制,用通俗的話講就是:我知道在網絡上有一個對象,并且知道這個對象的名字和網絡地址,那么我可以通過JNDI來獲得這個網絡上的對象。

非通俗解釋:

JNDI的目的是用來查找J2EE服務器的注冊資源。只要該對象在命名服務器上注冊過,且你知道命名服務器的地址和該對象在命名服務器上注冊的JNDI名。這樣你就可以在無需知道對象位置的情況下獲取和使用對象。

拿上面介紹的數(shù)據(jù)源來說明:

項目中沒有正在實例化數(shù)據(jù)源,只是通過jndi-lookup呼叫了一個數(shù)據(jù)。我知道數(shù)據(jù)源的名字,因為項目部署在weblogic上,所以項目自然知道這個數(shù)據(jù)源的地址。所以項目知道了數(shù)據(jù)源對象的地址和數(shù)據(jù)源的名稱,這樣就可以通過JNDI獲得這個數(shù)據(jù),并注入到hibernate中。

 

Java對JNDI只提供接口,使用JNDI只需要用到JNDI接口而不必關心具體實現(xiàn)。這就類似與Java的JDBC,Java也只是提供了JDBC的接口,各個數(shù)據(jù)庫廠家提供接口的實現(xiàn)。開發(fā)過程中程序員不用關心廠家是如何實現(xiàn)的,只需要面向接口編程即可。

以上完全是停留在概念上理解什么是JNDI,下節(jié)將要介紹兩個簡單的例子,這樣我們可以更加清晰的認識到JNDI是如何獲得遠程對象的。先在這里做個小鋪墊,因為Java只提供了JNDI的接口,所以在寫demo過程中要用到廠家提供的實現(xiàn)。我在這里列舉了各個廠家提供的鏈接和工廠類:

Java代碼  收藏代碼
  1. //jboss:  
  2. Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"  
  3. Context.URL_PKG_PREFIXES, "org.jboss.naming"  
  4. Context.PROVIDER_URL, "localhost:1099"  
  5.   
  6. //weblogic:  
  7. Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"  
  8. Context.PROVIDER_URL, "t3://localhost:7001"  
  9.   
  10. //apusic(金蝶):  
  11. Context.INITIAL_CONTEXT_FACTORY, "com.apusic.jndi.InitialContextFactory"  
  12. Context.PROVIDER_URL, "rmi://localhost:6888"  
  13.   
  14. //WebSphere:  
  15. Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"  
  16. Context.PROVIDER_URL, "iiop://localhost:900"  
  17.   
  18.   
  19. //J2EE  SDK(J2EE  RI):  
  20. Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory"  
  21. Context.PROVIDER_URL, "iiop://127.0.0.1:1050"  
  22.   
  23. //SilverStream:  
  24. Context.INITIAL_CONTEXT_FACTORY, "com.sssw.rt.jndi.AgInitCtxFactory"  
  25. Context.PROVIDER_URL, "sssw://localhost:80"  
  26.   
  27. //OC4J:  
  28. Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.rmi.RMIInitialContextFactory"  
  29. Context.PROVIDER_URL, "ormi://127.0.0.1/"  
  30.   
  31. //WAS5:  
  32. Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"  
  33. Context.PROVIDER_URL, "iiop://localhost:2809"  

 解釋一下上述代碼:

Context.INITIAL_CONTEXT_FACTORY:指定到目錄服務的連接工廠
Context.PROVIDER_URL:目錄服務提供者URL

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多