日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于Jboss/Tomcat/Jetty的JNDI定义123

發布時間:2025/3/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于Jboss/Tomcat/Jetty的JNDI定义123 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????? 貌似有段時間沒來這里忽悠了,今天抽空接著忽悠下這三個服務器配置JNDI時的一些異同點并提點自己的建議。

  • Jboss 4

????? Jboss中配置JNDI最常見的就是在配置數據源的時候,在server/default/deploy目錄下方一個xxx-ds.xml文件,內容如下:

<?xml version="1.0" encoding="UTF-8"?> <datasources>   <local-tx-datasource>       <jndi-name>jdbc/DataSource</jndi-name>       <connection-url>jdbc:jtds:sqlserver://localhost:1433/fnx</connection-url>       <driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>       <user-name>sa</user-name>       <password>1234</password>      <metadata>      <type-mapping>MS SQLSERVER2000</type-mapping>      </metadata>      </local-tx-datasource> </datasources> ?

這樣我們啟動服務器后,在web應用中就可以通過如下代碼就可以直接訪問到數據源:

Context ctx = new InitialContext(); Object o=ctx.lookup("java:jdbc/DataSource");

然而這里的java:jdbc/DataSource是一個全局資源名稱,Jboss自動將資源加入全局資源,我們經常在應用中看到的java:comp/env/jdbc/DataSource 又是怎么回事?這其實是應用

的私有環境引用名,如果要使用這個引用名稱,需要做兩件事情(必須做),1、在應用的WEB-INF目錄下創建jboss-web.xml,并設置全局到局部引用名得映射

<jboss-web> <resource-ref> <res-ref-name>jdbc/DataSource</res-ref-name> <res-type>javax.sql.DataSource</res-type> <jndi-name>java:/jdbc/DataSource</jndi-name> </resource-ref> <context-root>/</context-root> </jboss-web>

2、在web.xml中設置

<web-app> <display-name>Archetype Created Web Application</display-name> <resource-ref> <description>dataSource</description> <res-ref-name>jdbc/DataSource</res-ref-name> <res-type>javax.sql.DataSource </res-type> <res-auth>Container</res-auth> </resource-ref> </web-app>

這樣就可以在web應用中使用 java:comp/env/jdbc/DataSource 私有名了。

  • Tomcat 6

?tomcat中配置JNDI有三個地方:

?1、在服務器的Server元素下配置全局的JNDI<GlobalNamingResources>

?2、在host元素的<DefaultContext>中配置,配置后對該host下所有的context應用都有效

?3、在context元素下配置,這里配置的只對該應用有效。

?

需要注意的是,第一種方式配置的全局JNDI,需要在context中使用<ResourceLink>元素轉換成局部名才可以使用,功能跟jboss-web.xml中的轉換類似。另外,tomcat 中配置的資源不需要在web.xml中進行聲明,也可以通過java:comp/env形式進行訪問,這一點跟Jboss/jetty有區別。

? 上面三個地方可以配置的資源元素是Resource/Environment,ResourceParams是配合Resource使用,而ResourceLink是為了連接轉換全局資源。

舉個簡單例子,在context元素下的配置:(其他的各位自己去看元素如何使用)

<Resource name="mybase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" />

這樣就可以直接在web中使用 java:comp/env/mybase 來查詢到資源了。不過還是建議在web.xml中聲明一下。

  • Jetty 7

Jetty的JNDI配置也分3個范圍

?1、基于JVM全局的,也就是同一個JVM下不同的Server都可以訪問

?2、基于Server的,只能在該server下可以訪問

?3、基于應用context上下文的,只能在該context下能夠訪問

配置方式見我上面一篇《JNDI和在JETTY中的運用》

不過這里要注意的是,采用java:comp/env方式訪問時,一定要在web.xml中聲明資源(除了配置的EnvEntry元素除外,他自動會加入到私有資源),否則你是拿不到資源的。

?

?

  • 總結

可以看到,每個服務器都有他自己的JNDI配置方式和全局訪問方式,如果我們直接采用全局訪問方式,第一對于一些只對某些應用有關的資源配置可能訪問不到,例如JETTY,第二每個

應用服務器的全局訪問方式可能不太一致。因此一般建議在應用程序中采用私有方式(java:comp/env)訪問資源,并且無論如何都在web.xml中進行申明。這是一個良好的習慣。

?

?

? 另外:說到私有環境ENC(java:comp/env),他是如何變成私有的?其實私有是對每個應用上下文來說的,一般每個應用上下文都會用自己的classloader來加載應用,因此利用classloader便可以完成。具體方式是: 用每個應用自己的上下文 cloassloader 來初始化一個 JNDI context . 并以 classoader key 保存起來,以后應用檢索時需要使用的應用自己上下文的 classloader來查找這個JNDI 資源即可 ,由于其他應用使用不同的classloader實例,也就不能相互共享了,這就是每個應用私有了。另外如果資源命名時采用: java:resourceName, 或者 prefix:resourceName 的方式,雖然我們可以通過 java:resourceName, 或者 prefix:resourceName 的方式直接訪問,但也注定了這不是私有資源,所有應用都可以訪問,需要放到 ENC 下才是私有資源。綁定在 ENC 下訪問: java:comp/env/prefix:resourceName

?

?






轉載于:https://www.cnblogs.com/lovingprince/archive/2011/06/30/2166237.html

總結

以上是生活随笔為你收集整理的关于Jboss/Tomcat/Jetty的JNDI定义123的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。