2010-12-08 27 views
1

Tomcat6を実行していて、サーブレットからデータソースにアクセスしたいとします。Java JNDIコンテキストルックアップを使用してオブジェクトにアクセスできません

<?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> 

は、私も私のWebアプリケーション "にHomeController" に改名同じのcontext.xmlを持っています。しかし、私は

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に下で取得していますTOMCAT_HOME/conf/Catalina/localhost/HomeController.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> 

私のweb.xmlは次のようになり

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の新しいコピーをインストールし、TOMCAT_HOME/libの下にあるsqljdbc4.jarを置い。 私はHomeController/WEB-INF/libの下にJARSがありません。

私のサーブレットで "(Context)ctx.lookup(" java:comp/env ");"を実行すると失敗します。

オブジェクトを取得するときに失敗する理由は誰でも知っていますか?

答えて

3

このようにお試しください。

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

リソース参照をルックアップしようとしていますが、実際の参照が指定されていないため、絶対名を生成できません。

+0

Tomcatを起動したときに他のエラーがスローされました。私はそれらをすべて修正した後、うまくいった。 – Marquinio

関連する問題