2012-09-18 77 views
7

讓我先來介紹環境:apache tomcat 7.0.30 datasourcerealm javax.naming.NameNotFoundException:名稱[jdbc/proto]未在此上下文中綁定。無法找到[JDBC]

環境: - 的Mac OS X(Java構建1.6.0_35-b10-428-11M3811) - 的Apache Tomcat 7.0.30 - MySQL的5.5.27 - tomcat的/ lib目錄 - >使用mysql-connector-java的5.1.22-bin.jar

我已經成功地實施了JDBCRealm,想切換到DataSourceRealm,因爲它被推薦用於生產環境。我使用基於表單的身份驗證。

我所做的一切在這裏描述: http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#DataSourceRealm 這裏: http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html#MySQL_DBCP_Example

server.xml中

<Realm className="org.apache.catalina.realm.LockOutRealm"> 
    <Realm className="org.apache.catalina.realm.DataSourceRealm" 
      dataSourceName="jdbc/proto" digest="SHA-256" roleNameCol="role" 
      userCredCol="password" userNameCol="name" userRoleTable="roles" 
      userTable="users"/> 
</Realm> 

的context.xml

<Resource auth="Container" 
      driverClassName="com.mysql.jdbc.Driver" 
      maxActive="100" maxIdle="30" maxWait="10000" 
      name="jdbc/proto" password="proto" type="javax.sql.DataSource" 
      url="jdbc:mysql://localhost:3306/proto" username="proto"/> 

WEB-INF/web.xml中

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

當我提交的用戶名和密碼,我得到以下異常:

Sep 18, 2012 9:38:32 PM org.apache.catalina.realm.DataSourceRealm open 
SEVERE: Exception performing authentication 
javax.naming.NameNotFoundException: Name [jdbc/proto] is not bound in this Context. Unable to find [jdbc]. 
at org.apache.naming.NamingContext.lookup(NamingContext.java:820) 
at org.apache.naming.NamingContext.lookup(NamingContext.java:168) 
at org.apache.catalina.realm.DataSourceRealm.open(DataSourceRealm.java:394) 
at org.apache.catalina.realm.DataSourceRealm.authenticate(DataSourceRealm.java:285) 
at org.apache.catalina.realm.CombinedRealm.authenticate(CombinedRealm.java:146) 
at org.apache.catalina.realm.LockOutRealm.authenticate(LockOutRealm.java:180) 
at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:295) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:450) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:680) 

我沒試過來設置環境不同的OS來測試它是否是一個特定於mac的問題。

有什麼建議我錯過了什麼?我感謝您的幫助!謝謝。

+0

它工作時,我將** context.xml **條目移動到** server.xml - ** - >但我真的想要嗎? – user1681351

回答

0

在我的情況下,問題是我的pom.xml中有一個衝突的依賴關係。在我的情況下,這是java-naming依賴。 確保您沒有任何與Tomcat的命名庫衝突的命名依賴項/ jar。

我把它刪除後,問題就消失了(和你順便說一樣的環境)。

3

在這種情況下,我相信這是因爲你的領域(在這種情況下,它是在服務器級別聲明的)試圖使用命名資源,jdbc/proto(在這種情況下,在Web應用程序級別)

這是我理解的是Java服務器上下文結構

  1. 服務器
  2. 主機
  3. WebApplication的上下文(可以在server.xml中,還是在META-INF康特XT。XML)
4

爲了避免在聲明中GlobalNamingResources的ressource,把localDataSource = 「真」 在

1

其實這[jdbc/proto]在ProjectName.xml提到的一個屬性一樣

<ResourceLink global="jdbc/proto" name="jdbc/proto"/> 

所以境界請確保ProjectName.xml文件存在於tomcatInstances/ServerName/conf/Catalina/localhost/ProjectName.xml並且擁有此資源鏈接,並且您的異常消失。

我也面臨着同樣的問題,並得到了應用程序的本地上下文文件中得到了從位置

tomcatInstances/ServerName/conf/Catalina/localhost/ProjectName.xml 

某種原因恢復出後面的文件刪除,並做了......它的做工精細現在,希望這會幫助別人。

+0

「ProjectName.xml」中需要什麼? – krismath

相關問題