2012-09-18 37 views
7

hãy để tôi mô tả môi trường đầu tiên:apache tomcat 7.0.30 datasourcerealm javax.naming.NameNotFoundException: Tên [jdbc/proto] không bị ràng buộc trong Bối cảnh này. Không tìm thấy [jdbc]

môi trường: - mac os x (java xây dựng 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

tôi đã thực hiện thành công một JDBCRealm và muốn chuyển sang một DataSourceRealm vì nó được khuyến khích cho môi trường sản xuất. tôi sử dụng xác thực dựa trên biểu mẫu.

tôi đã làm mọi thứ được mô tả ở đây: http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#DataSourceRealm và ở đây: 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> 

khi tôi nộp tên người dùng và mật khẩu tôi nhận được ngoại lệ sau đây:

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) 

tôi đã không cố gắng để thiết lập môi trường trên os khác nhau để kiểm tra xem đó có phải là vấn đề cụ thể về mac hay không.

bất kỳ đề xuất nào tôi đã bỏ lỡ? Tôi đánh giá cao sự giúp đỡ của bạn! cảm ơn bạn.

+0

nó hoạt động khi tôi di chuyển mục nhập từ ** context.xml ** sang ** server.xml - ** -> nhưng tôi có thực sự muốn điều đó không? – user1681351

Trả lời

0

Trong trường hợp của tôi, vấn đề là tôi có phụ thuộc xung đột trong tệp pom.xml của mình. Trong trường hợp của tôi, nó là phụ thuộc java-naming. Đảm bảo rằng bạn không có bất kỳ phụ thuộc tên/lọ nào xung đột với libs đặt tên của Tomcat.

Sau khi tôi gỡ bỏ nó, vấn đề đã biến mất (cùng một môi trường như bạn btw).

3

Trong trường hợp này, tôi tin rằng đó là vì lĩnh vực của bạn (Trong trường hợp này nó được khai báo ở cấp độ máy chủ) đang cố sử dụng tài nguyên đặt tên, jdbc/proto (Trường hợp này được khai báo ở cấp ứng dụng web)

Dưới đây là những gì tôi hiểu là máy chủ java bối cảnh phân cấp

  1. server
  2. chủ
  3. WebApplication Bối cảnh (có thể trong server.xml, hoặc trong META-INF Conte xtxml)
4

Để tránh tuyên bố ressource trong GlobalNamingResources, đặt localDataSource = "true" trong Realm

1

Trên thực tế [jdbc/proto] này được đề cập trong ProjectName.xml như một tài sản như

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

Vì vậy, đảm bảo rằng tệp ProjectName.xml tồn tại tại tomcatInstances/ServerName/conf/Catalina/localhost/ProjectName.xml và có liên kết tài nguyên này và ngoại lệ của bạn đã biến mất.

Tôi cũng phải đối mặt với cùng một vấn đề và nhận được rằng tập tin bối cảnh địa phương áp dụng được đã bị xóa vì một lý do từ vị trí

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

phục hồi các tập tin từ phía sau và thực hiện ... nó làm việc tốt bây giờ, Hy vọng điều này sẽ giúp ai đó.

+0

Điều gì cần phải có trong 'ProjectName.xml'? – krismath

Các vấn đề liên quan