2016-08-02 17 views
2

以前はJNDIリソースを設定していましたが、問題が発生しました。apache-tomcat-8.0.36サーバーを修正する方法がわかりません。javax.naming.NameNotFoundException:名前[jdbc/FsEDBUser]がこのコンテキストにバインドされていません

マイcontext.xmlファイルには以下が含まれています。

<ResourceLink name="jdbc/FsEDBAdmin" global="jdbc/FsEDBAdmin" type="javax.sql.DataSource" /> 
<ResourceLink name="jdbc/FsEDBUser" global="jdbc/FsEDBUser" type="javax.sql.DataSource" /> 
<Resource name="jdbc/FsEDBAdmin" auth="Container" 
      type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" 
      url="jdbc:postgresql://location" 
      username="user_admin" password="pass" 
      maxActive="20" maxIdle="10" maxWait="-1"/> 

<Resource name="jdbc/FsEDBUser" auth="Container" 
      type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" 
      url="jdbc:postgresql://location" 
      username="user_user" password="pass" 
      maxActive="20" maxIdle="10" maxWait="-1"/> 

マイweb.xml

<resource-ref> 
    <description>Admin Connection</description> 
    <res-ref-name>jdbc/FsEDBAdmin</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 
<resource-ref> 
    <description>User Connection</description> 
    <res-ref-name>jdbc/FsEDBUser</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

私も認証にRealmを定義するためにこれらの接続を使用しています: server.xml

<Realm className="org.apache.catalina.realm.LockOutRealm"> 
    <!-- This Realm uses the UserDatabase configured in the global JNDI 
     resources under the key "UserDatabase". Any edits 
     that are performed against this UserDatabase are immediately 
     available for use by the Realm. --> 
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
      resourceName="UserDatabase"/> 
    <Realm className="org.apache.catalina.realm.DataSourceRealm" 
     digest="digest_method" dataSourceName="jdbc/FsEDBAdmin" userTable="schema.table_name" 
     userNameCol="name_col" userCredCol="pass_col" 
     userRoleTable="schema.table_name" roleNameCol="rolename_col" 
     localDataSource="true"/> 
    </Realm> 

しかし、アプリケーションを起動すると、タイトルに記載されているエラーが発生します。私は要求された場合に完全なスタックトレースを与えることができます。

これは一点で作業していましたが、最近の変更点はRealmを認証に使用したことです。明らかに私はある場所や別の場所でこれらのリソースを定義する際に間違いを犯しました。ありがとうございました。

EDIT:これは私が資源を呼んでいる方法です:

import path.to.CommonTools; 
import java.sql.Connection; 
import java.sql.SQLException; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import org.apache.tomcat.dbcp.dbcp2.BasicDataSource; 

/** 
* 
* @author Michael Potts 
*/ 
public enum Resource { 
    INSTANCE; 

private static BasicDataSource basicAdmin = null; 
private static BasicDataSource basicUser = null; 
private static final String JNDI_PREFIX = "java:/comp/env"; 
private static final String ADMIN_DB_NAME = "jdbc/FsEDBAdmin"; 
private static final String USER_DB_NAME = "jdbc/FsEDBUser"; 

/** 
* Secure method that gives a connection from the pool for an Admin user 
* @return java.sql.Connection 
* @throws Exception Throws if Context isn't properly defined on Server 
*/ 
public static Connection getAdminConnection() throws Exception { 
    try { 
     if(basicAdmin == null) { //1st time load 
      Context dbContext = (Context) new InitialContext().lookup(JNDI_PREFIX); 
      basicAdmin = (BasicDataSource) dbContext.lookup(ADMIN_DB_NAME); 
     } 
     return basicAdmin.getConnection(); 
    } catch (NamingException | SQLException e) { 
     throw new RuntimeException("\nInvalid JNDI resource: " + ADMIN_DB_NAME + CommonTools.getStackTrace(e)); 
    } 
} 

/** 
* Secure method that gives a connection from the pool for a standard user 
* @return java.sql.Connection 
* @throws Exception Throws if Context isn't properly defined on Server 
*/ 
public static Connection getUserConnection() throws Exception { 
    try { 
     if(basicUser == null) { //1st time load 
      Context dbContext = (Context) new InitialContext().lookup(JNDI_PREFIX); 
      basicUser = (BasicDataSource) dbContext.lookup(USER_DB_NAME); 
     } 
     return basicUser.getConnection(); 
    } catch (NamingException | SQLException e) { 
     throw new RuntimeException("\nInvalid JNDI resource: " + USER_DB_NAME + CommonTools.getStackTrace(e)); 
    } 
} 
} 

答えて

1

だから、私のためのソリューションはcontext.xmlでベースResource定義を除いてすべてのエントリを削除することでした。これには、ResourceLinkのエントリを削除することが含まれます。ですから、すべてを試してみて、このエラーが発生したような場合は、すべてのドキュメントを無視してContext.xmlで定義するだけです。

関連する問題