【问题标题】:What are steps followed in the look-up? what is looked first web.xml or context.xml?查找中遵循的步骤是什么?什么是第一个 web.xml 或 context.xml?
【发布时间】:2012-07-19 04:18:46
【问题描述】:

如何查找:

Context envContext = (Context)initContext.lookup("java:comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/MyDatasource");

继续?

我的意思是说 name MyDataSource 是如何搜索的,最后返回了什么?

添加了两个条目以连接到数据库。 WEB-INF/web.xml 中的一个是:

<resource-ref>
<description>my connection</description>
<res-ref-name>jdbc/MyDatasource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>

另一个添加在META-INF/context.xml 中是:

<Resource name="jdbc/MyDatasource" auth="Container" type="javax.sql.DataSource"
 driverClassName="org.apache.derby.jdbc.ClientDriver"
 url="jdbc:derby://localhost:1527/My Database;create=true"
 username="me" password="me"
 maxActive="20" maxIdle="10" maxWait="-1" />

这 2 个条目如何帮助查找?

先看什么:web.xmlcontext.xml

请说明查找的整个过程。

【问题讨论】:

    标签: java jakarta-ee tomcat web.xml context.xml


    【解决方案1】:

    资源按以下优先顺序排列:web.xml(通过&lt;resource-ref&gt; 元素、context.xmlserver.xml(通过&lt;GlobalNamingResources&gt;)。请注意,&lt;Context&gt; 中定义的资源实际上并不需要在 web.xml 中有相应的 &lt;resource-ref&gt; 元素。有关 JNDI 资源,请参阅 Tomcat 文档:http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html

    【讨论】:

    • 但是如果我从 web.xml 中删除 resource-ref 标签,我会得到一个异常,上面写着 Name not found Exception
    • 你能解释一下"请注意,在你的中定义的资源实际上不需要在你的web.xml中有相应的元素"跨度>
    • 阅读我在上面发布的 Tomcat 文档参考:当您在 META-INT/context.xml 中的 &lt;Context&gt; 中指定 &lt;Resource&gt; 时,如果没有必要,它特别提到 &lt;resource-ref&gt;。如果您希望我对此发表评论,请发布您的整个META-INF/context.xml
    • 请注意,Tomcat 的 conf/context.xml(所有 webapps 的默认值)和你的 webapp 的特定 META-INF/context.xml (这是一个更好的自定义选择。如果你不想放这种配置到您的 web 应用程序中,那么您应该在 server.xml 中使用 &lt;GlobalsNamingResources&gt; 代替(您确实需要在您的 WEB-INF/web.xml 中使用 &lt;resource-ref&gt;)。
    • 如果那是你的META-INF/context.xml,你已经正确部署了你的webapp(确保CATALINA_BASE/conf/Catalina/localhost/poll.xml中没有你的context.xml的旧缓存副本),你有你的JDBC驱动程序的 JAR 文件在正确的位置,并且您在任何地方都没有其他对 Derby 的引用,那么一切都应该适合您。 (注意在META-INF/context.xml&lt;Context&gt;元素中使用path属性是非法的:删除它)。
    【解决方案2】:

    以下是进行查找的步骤:
    第 1 步:

     Context context = new InitialContext(): 
    

    初始上下文是对 JNDI 查找服务的引用。 就像进入 JNDI 虚拟目录树一样。

    第 2 步:

    Object o = context.lookup("mejb"): 
    

    在查找中,我们需要给出部署在服务器中的任何 bean 的名称,以获取对该 bean 的 home 接口的引用。然后我们得到我们需要的 java.lang.Object 类型的对象将此对象转换为我们进行查找的任何 bean 的 Home 接口。

    第 3 步:

    Home home = (Home) PortableRemoteObject.narrow(o,Home.class):
    

    我们实际上需要将对象转换为我们认为的类型。但是,由于这是基于 IIOP 的 RMI,因此我们似乎需要使用 PortableRemoteObject.narrow 方法,这似乎会将对象类型过滤为实际的对象类型并检查错误。

    【讨论】:

    • 您能否通过上下文向web.xmlcontext.xml 解释您的答案。 B'coz 这两个文件有助于查找。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 2012-04-12
    • 2020-08-25
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多