【问题标题】:javax.naming.NamingException: Cannot create resource instancejavax.naming.NamingException:无法创建资源实例
【发布时间】:2012-05-10 13:16:50
【问题描述】:

我已经尝试了下面的大量变体来让数据源工作,但无济于事。我已经研究/尝试了几天,所以我认输并寻求帮助。首先,我很难在这篇文章中格式化我的代码。什么都没有缩进,某些 xml 标记正在消失。可能是愚蠢的 IE 迫使我们使用....

web.xml

<resource-ref>
    <res-ref-name>jdbc/nalabor</res-ref-name>
    <res-type>oracle.jdbc.pool.OracleDataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

<resource-ref>
    <res-ref-name>jdbc/navarch</res-ref-name>
    <res-type>oracle.jdbc.pool.OracleDataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

context.xml

<?xml version="1.0" encoding="UTF-8"?>

<Context>
  <Resource
    name="jdbc/nalabor" type="oracle.jdbc.pool.OracleDataSource"
    maxActive="1" maxIdle="1" maxWait="10000" 
    factory="oracle.jdbc.pool.OracleDataSourceFactory"
    url="jdbc:oracle:thin:@####.com:1521:SID"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    username="###" password="###"/>

  <Resource
    name="jdbc/navarch" type="oracle.jdbc.pool.OracleDataSource"
    maxActive="1" maxIdle="1" maxWait="10000"
    factory="oracle.jdbc.pool.OracleDataSourceFactory"
    url="jdbc:oracle:thin:@####.com:1521:SID"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    username="###" password="###"/>
</Context>

try {      
  Context initContext = new InitialContext();
  NamingEnumeration list = initContext.list("java:/comp/env");
  System.out.println("Listing NamingEnumeration For java:/comp/env");
  while (list.hasMore()) {
    NameClassPair nc = (NameClassPair)list.next();
    System.out.println("Name Class Pair = " + nc);
  }

  list = initContext.list("java:/comp/env/jdbc");
  System.out.println("Listing NamingEnumeration java:/comp/env/jdbc");
  while (list .hasMore()) {
    NameClassPair nc = (NameClassPair)list .next();
    System.out.println("Name Class Pair = " + nc);
  }

  Context envContext = (Context) initContext.lookup("java:/comp/env");
  ods = (OracleDataSource) envContext.lookup("jdbc/nalabor");
} catch (Exception ex) {
  System.out.println("ERORRRRRRRR AGAIN!");
  ex.printStackTrace();
}

堆栈

Listing NamingEnumeration For java:/comp/env
Name Class Pair = mailClient: java.lang.String
Name Class Pair = siteConnCache: java.lang.String
Name Class Pair = jdbc: org.apache.naming.NamingContext
Name Class Pair = sitePOCEmail: java.lang.String
Name Class Pair = siteFilePrefix: java.lang.String
Name Class Pair = siteName: java.lang.String
Name Class Pair = siteEmail: java.lang.String

Listing NamingEnumeration java:/comp/env/jdbc
Name Class Pair = nalabor: org.apache.naming.ResourceRef
Name Class Pair = navarch: org.apache.naming.ResourceRef
ERORRRRRRRR AGAIN!
javax.naming.NamingException: Cannot create resource instance    
at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:167)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:314)
at org.apache.naming.NamingContext.lookup(NamingContext.java:834)
at org.apache.naming.NamingContext.lookup(NamingContext.java:181)
at org.apache.naming.NamingContext.lookup(NamingContext.java:822)
at org.apache.naming.NamingContext.lookup(NamingContext.java:194)
at com.gdebI.rozycki.bsc.data.LaborDAO.getWeightedLabor(LaborDAO.java:91)
at com.gdebI.rozycki.bsc.controller.action.WeightedLabor.getList(WeightedLabor.java:66)
at com.gdebI.rozycki.controller.action.ListAction.service(ListAction.java:38)

WEB-INF/库

ojdbc14.jar

【问题讨论】:

    标签: java oracle datasource


    【解决方案1】:

    我不确定您为什么在 web.xml 中列出资源,但我认为您包含了导致问题的额外 /。当找不到名称时,我遇到了这个异常。试试这个(Java 6+):

    OracleDataSource ods = InitialContext.doLookup("java:comp/env/jdbc/nalabor");
    

    对于 Java 5 及以下版本:

    InitialContext ic = new InitialContext();
    OracleDataSource ods = (OracleDataSource)ic.lookup("java:comp/env/jdbc/nalabor");
    

    【讨论】:

    • 我将资源放在 web.xml 中,因为这是我在几个地方读到的内容,包括在 BalusC 的博客balusc.blogspot.com/2008/07/… 上还有一件事。昨天我让数据源在 Eclipse 中本地工作,我只是在部署到测试服务器时才得到命名异常。今天我什至无法让它在 Eclipse 中工作。
    • 是和不是。在 Eclipse 中,我得到了我的和你的代码来使用数据源连接到我们的 Oracle 服务器。部署到我们的测试服务器都不起作用。在本地,额外的斜杠没有任何效果,您的代码可以使用或不使用它。我什至可以像这样放一个双斜杠……lookup("java://comp/env/jdbc/navarch")。
    • 顺便说一句,当我从 web.xml 中删除资源时,无论如何,在我们的测试服务器上,我的 jdbc 未绑定在此上下文中。 Eclipse 是否存在于 web.xml 中似乎并不重要。
    【解决方案2】:

    我遇到了这个问题,我解决了。注意 web.xml 中元素的顺序。我按照http://wiki.apache.org/tomcat/Specifications 所说的那样,在我的网络应用程序的 web.xml 中使用元素的顺序,它可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      相关资源
      最近更新 更多