2016-08-02 115 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> 

我還使用這些連接定義身份驗證Realmserver.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進行身份驗證。很明顯,我在一個地方或另一個地方定義這些資源時犯了一個錯誤,所以另一組眼睛告訴我在哪裏將會非常感激。謝謝。

編輯:這是我如何我打電話的資源:

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中定義。

相關問題