Не удается получить доступ к объекту с помощью поиска контекста Java JNDI - PullRequest
1 голос
/ 08 декабря 2010

Я использую Tomcat6 и хочу получить доступ к источнику данных из моего сервлета.Но я получаю

    javax.naming.OperationNotSupportedException: can''t generate an absolute name for this namespace
at org.apache.naming.NamingContext.getNameInNamespace(NamingContext.java
:772)

Мой context.xml находится в HomeController / META-INF / context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/HomeController"> 
<Resource name="jdbc/HomeController" auth="Container" type="javax.sql.DataSource" driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"   
acquireIncrement="5"   
 username="client" 
password="1234" 
jdbcUrl="jdbc:sqlserver://192.168.1.5:1433;databaseName=myDB;autoReconnect=true" /> 
</Context>

У меня также есть тот же context.xml, переименованный в мойВеб-приложение "HomeController" и помещено в TOMCAT_HOME / conf / Catalina / localhost / HomeController.xml.

Мой web.xml выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <display-name>Home Controller</display-name>
 <servlet> 
  <servlet-name>HomeController</servlet-name> 
  <servlet-class>com.home.controller.HomeController</servlet-class> 

 </servlet> 

 <servlet-mapping> 
  <servlet-name>HomeController</servlet-name> 
  <url-pattern>/HomeController</url-pattern>
  </servlet-mapping> 

   <resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/HomeController</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
</web-app>

В моем сервлете у меня есть это1012 *

Connection conn = null;
         Context ctx = null;
         java.sql.Statement stmt = null;

         try {
             ctx = new InitialContext();

             Context envCtx = (Context) ctx.lookup("java:comp/env");  //<--FAILS HERE

             DataSource ds = (DataSource) envCtx.lookup("jdbc/EmscribeWS");

             conn = ds.getConnection();
             DatabaseMetaData mt = conn.getMetaData();                                                 
             stmt = conn.createStatement();                 

     } catch (Exception e) {
      e.printStackTrace();         
     }

Я установил свежую копию Tomcat6 и поместил sqljdbc4.jar в TOMCAT_HOME / lib.У меня нет JARS под моим HomeController / WEB-INF / lib.

Сбой при выполнении "(Context) ctx.lookup (" java: comp / env ");" в моем сервлете.

Кто-нибудь знает, почему происходит сбой при извлечении объекта?

1 Ответ

2 голосов
/ 08 декабря 2010

Попробуйте так.

DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/HomeController");

Вы пытаетесь найти ссылку на ресурс, но не указали фактическую ссылку, поэтому абсолютное имя не может быть сгенерировано.

...