`
chainhou
  • 浏览: 174894 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

resource-ref与resource-env-ref的区别

阅读更多

最近工作中处理一个对于资源引用的问题,主要问题是在resource-ref引用资源可以成功,换成resource-env-ref引用资源就会导致Naming Not Found 。。。 于是就开始Google 这两者的不同,到底是什么原因导致问题出现呢?跟了几遍代码,发现是在处理过程中对于resource-env-ref的定义是

 

Element 

Required 

Description 

resource-env-ref-name

only one 

Specifies the res-ref-name in the corresponding Java EE deployment descriptor fileresource-env-ref entry.

jndi-name

only one 

Specifies the absolute jndi-name of a resource.

 

 

但在Runtime Descriptor(sun-web.xml)中写成了res-env-ref-name,相应的这个标签是没有定义的,所以保存在服务器的动态属性中的是以res-env-ref-name为key来保存,

 

Dynamic Attribute

 

  Property name = JndiName value = myjndi

 

  Property name = res-env-ref-name value = aaa

<==End]

 

而不是定义的RESENVREFNAME,所以调用其相应的get方法会返回空,导致相应的关联没有创建。

问题分析完了,通过更正相应配置文件中的属性名来解决。

但是这两者之间的区别到底是什么呢,还是不清楚。于是又Google了几次,大概明白了。

 

区别主要是:

 

- Resource reference, which is typically to an object factory for resources such as a JDBC DataSource, a JavaMail Session, or custom object factories configured into Tomcat. -

 

Resource environment reference, a new variation of resource-ref added in Servlet 2.4 that is simpler to configure for resources that do not require authentication information.

resource-ref 连接工厂管理对象:表示连接工厂的资源。该连接通常在驱动程序和池提供的容器管理的实施。目前,有5个标准的Java EE运行时连接工厂:

 

Resource Manager Connection Factory Type JNDI Contextpfad
JDBC javax.sql.DataSource java:comp/env/jdbc/[pfad]
JMS javax.jms.TopicConnectionFactory, javax.jms.QueueConnectionFactory java:comp/env/jms/[pfad]
JavaMail javax.mail.Session java:comp/env/mail/[pfad]
URL java.net.URL java:comp/env/url/[pfad]
JAXR ResourceAdapter javax.xml.registry.ConnectionFactory java:comp/env/eis/JAXR/[pfad]
JCA Outbound Resource Adapter a.b.c.MyConnectionFactory

java:comp/env/eis/[pfad]

 

 

 

 

 

 

web.xml样例:

<resource-ref>
  <res-ref-name>jdbc/petShopDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

 

应用服务器Runtime Descriptor样例:
<resource-ref>
        <res-ref-name>jdbc/DefaultDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <jndi-name>java:/DefaultDS</jndi-name>
    </resource-ref>
    <resource-ref>
        <res-ref-name>mail/DefaultMail</res-ref-name>
        <res-type>javax.mail.Session</res-type>
        <jndi-name>java:/Mail</jndi-name>
    </resource-ref>

  这两个文件中的res-ref-name要一致

 

 

resource-env-ref 目标管理的对象:这些资源是直接寻址(无状态)。每个容器必须JMS队列和JMS主题作为管理对象提供的,默认情况下,他们下​​javacomp / env/ JMS提供。完成在Deploymentdescriptor声明resource-env-ref元素

web.xml中的内容把上面的resource-ref换成resource-env-ref即可,

<resource-env-ref>
  <resource-env-ref-name>jms/pets/stockQueue</resource-env-ref-name>
  <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
</resource-env-ref>

 

应用服务器描述文件:
<resource-env-ref>
        <resource-env-ref-name>jms/StockInfo</resource-env-ref-name>
        <jndi-name>queue/StockInfoQueue</jndi-name>
    </resource-env-ref>

 

以上是两者的区别与样例。

在StackOverFlow中对于每种资源应该使用哪种引用还有个列表:

Java Type                                              Equivalent Resource type

java.lang.String                                              env-entry
java.lang.Character                                           env-entry
java.lang.Integer                                             env-entry
java.lang.Boolean                                             env-entry
java.lang.Double                                              env-entry
java.lang.Byte                                                env-entry
java.lang.Short                                               env-entry
java.lang.Long                                                env-entry
java.lang.Float                                               env-entry
javax.xml.rpc.Service                                         service-ref
javax.xml.ws.Service                                          service-ref
javax.jws.WebService                                          service-ref
javax.sql.DataSource                                          resource-ref
javax.jms.ConnectionFactory                                   resource-ref
javax.jms.QueueConnectionFactory                              resource-ref
javax.jms.TopicConnectionFactory                              resource-ref
javax.mail.Session                                            resource-ref
java.net.URL                                                  resource-ref
javax.resource.cci.ConnectionFactory                          resource-ref
org.omg.CORBA_2_3.ORB                                         resource-ref
any other connection factory defined by a resource adapter    resource-ref
javax.jms.Queue                                               message-destination-ref
javax.jms.Topic                                               message-destination-ref
javax.resource.cci.InteractionSpec                            resource-env-ref
javax.transaction.UserTransaction                             resource-env-ref
Everything else                                               resource-env-ref

 

 以下是参考的几篇文件,都很不错:

http://stackoverflow.com/questions/7254277/jee6-what-can-be-injected-with-resource

https://access.redhat.com/knowledge/docs/en-US/JBoss_Enterprise_Web_Platform/5/html/Administration_And_Configuration_Guide/Naming_on_JBoss-J2EE_and_JNDI___The_Application_Component_Environment.html

http://www.prozesse-und-systeme.de/jndiResourcen.html

http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html

 

 

分享到:
评论

相关推荐

    web.xml配置详解

    ELEMENT resource-env-ref (resource-env-ref-name, resource-env-ref-type) &gt;。 resource-ref 元素用于定义资源引用,&lt;!ELEMENT resource-ref (res-ref-name, res-type, res-auth) &gt;。security-constraint 元素...

    tomcat6.0连接通过JNDI连接mysql实例

    &lt;resource-env-ref-type&gt;javax.sql.DataSource&lt;/resource-env-ref-type&gt; &lt;/resource-env-ref&gt; ``` 同时,我们还需要在 `WEB-INF/web.xml` 文件中添加资源引用,例如: ```xml &lt;resource-ref&gt; &lt;description&gt;DB ...

    JAVAWEB-16:JDBC编程进阶(自定义数据源+开源数据源:DBCP、C3P0)

    &lt;resource-env-ref-type&gt;javax.sql.DataSource&lt;/resource-env-ref-type&gt; &lt;/resource-env-ref&gt; ``` 然后在应用代码中,可以通过以下方式获取数据源: ```java InitialContext ic = new InitialContext(); ...

    web.xml详解(web-app_2_3.dtd)

    &lt;resource-env-ref-type&gt;javax.sql.DataSource&lt;/resource-env-ref-type&gt; &lt;/resource-env-ref&gt; ``` #### 17. `resource-ref`元素 `resource-ref`元素用于引用外部资源,如数据库连接池或消息队列。DTD定义如下: ...

    在Servlet中连接数据库的Java代码

    &lt;resource-env-ref-type&gt;javax.sql.DataSource&lt;/resource-env-ref-type&gt; &lt;/resource-env-ref&gt; ``` 然后在Servlet中通过`Context`查找并使用这个数据源: ```java Context initCtx = new InitialContext(); Context ...

    web.xml详解(txt)

    &lt;resource-env-ref-type&gt;javax.sql.DataSource&lt;/resource-env-ref-type&gt; &lt;/resource-env-ref&gt; ``` ##### 2.16 `&lt;resource-ref&gt;` - **定义**:引用一个外部资源。 - **用途**:如数据库连接池等。 - **属性**: ...

    Web.xml常用元素

    &lt;resource-env-ref-type&gt;javax.sql.DataSource&lt;/resource-env-ref-type&gt; &lt;/resource-env-ref&gt; ``` #### &lt;resource-ref&gt; - **作用**:声明一个外部资源的引用,通常用于数据库连接池或邮件会话。 - **示例**: ...

    MS-SqlServer2012版本的JDBC包和JAVAWeb连接配置文件(例子)

    &lt;resource-env-ref-type&gt;javax.sql.DataSource&lt;/resource-env-ref-type&gt; &lt;/resource-env-ref&gt; &lt;context-param&gt; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt; &lt;param-value&gt;/WEB-INF/spring/appServlet/...

    Web.xml配置详解精华

    - `resource-env-ref`: 声明与资源相关的管理对象。 - `resource-ref`: 声明外部资源。 - `security-constraint`: 指定需要保护的URL路径。 - `login-config`: 配置认证机制,用于用户登录验证。 - `security-role`:...

    Apusic服务器解决数据源的资源引用

    在这个文件中,使用`resource-ref`元素将资源引用名称与数据源的JNDI名称关联起来。 ```xml &lt;resource-ref&gt; &lt;res-ref-name&gt;jdbc/DataSource&lt;/res-ref-name&gt; &lt;jndi-name&gt;jdbc/real&lt;/jndi-name&gt; &lt;/resource-ref&gt; ...

    web.xml详细说明

    &lt;resource-env-ref-name&gt;jdbc/myDataSource&lt;/resource-env-ref-name&gt; &lt;/resource-env-ref&gt; ``` 15. **`&lt;resource-ref&gt;`** - **作用**:声明外部资源的引用。 - **示例**: ```xml &lt;resource-ref&gt; ...

    c3p0连接池,ojdbc14工具包jar

    &lt;resource-env-ref-type&gt;javax.sql.DataSource&lt;/resource-env-ref-type&gt; &lt;/resource-env-ref&gt; ``` 然后在`context.xml`或`server.xml`中定义具体的DataSource配置,包括数据库URL、用户名、密码以及c3p0的配置参数...

    web.xml文件详解

    - 示例:`&lt;resource-env-ref&gt;&lt;resource-env-ref-name&gt;jdbc/myDataSource&lt;/resource-env-ref-name&gt;&lt;resource-env-ref-type&gt;javax.sql.DataSource&lt;/resource-env-ref-type&gt;&lt;/resource-env-ref&gt;`。 16. **resource-...

    servlet结合jsp操作数据库示例

    &lt;resource-env-ref-type&gt;javax.sql.DataSource&lt;/resource-env-ref-type&gt; &lt;/resource-env-ref&gt; ``` 接着,在Tomcat的`conf/server.xml`文件中,添加一个`Resource`元素,指定数据库连接的详细信息: ```xml ... ...

    XML配置详解

    - **`&lt;resource-env-ref&gt;`**:声明与资源相关的管理对象。 - **`&lt;resource-ref&gt;`**:声明外部资源的引用,这些资源由资源工厂提供。 - **示例**: ```xml &lt;resource-ref&gt; &lt;description&gt;Resource Reference for DB...

    javaweb中怎样实现登录功能-项目资源包

    &lt;resource-env-ref-type&gt;javax.sql.DataSource&lt;/resource-env-ref-type&gt; &lt;/resource-env-ref&gt; ``` 在服务器配置中(如Tomcat的context.xml),添加对应的DataSource定义: ```xml &lt;Resource name="jdbc/...

    J2EE中关于web.xml文件的配置

    15. `&lt;resource-env-ref&gt;`:resource-env-ref 元素用于声明与资源相关的一个管理对象。 16. `&lt;resource-ref&gt;`:resource-ref 元素用于声明一个资源工厂使用的外部资源。 17. `&lt;security-constraint&gt;`:security-...

    最详细的servlet配置文件说明书

    &lt;resource-env-ref-name&gt;jdbc/MyDataSource&lt;/resource-env-ref-name&gt; &lt;/resource-env-ref&gt; ``` **用途**: 引用已部署的资源。 ##### 16. `&lt;resource-ref&gt;` 标签 **定义**: 声明一个资源工厂使用的外部资源。 **...

    WEB-INF中的web.xml中之前增加以下配置:

    在web.xml文件中,添加了resource-ref配置:&lt;resource-ref&gt; &lt;description&gt;SQL Server Datasource&lt;/description&gt; &lt;res-ref-name&gt;jdbc/DBUtil&lt;/res-ref-name&gt; &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt; &lt;res-auth&gt;...

Global site tag (gtag.js) - Google Analytics