2012-09-18 17 views
7

permítanme describir el entorno en primer lugar:apache tomcat 7.0.30 datasourcerealm javax.naming.NameNotFoundException: Nombre [jdbc/proto] no está vinculado en este contexto. No es posible encontrar [JDBC]

medio ambiente: - Mac OS X (Java 1.6.0_35-construir b10-428-11M3811) - Apache Tomcat 7.0.30 - MySQL 5.5.27 - Tomcat/lib -> mysql-connector-java-5.1.22-bin.jar

he implementado con éxito un jdbcRealm y quiero cambiar a una DataSourceRealm ya que se recomienda para entornos de producción. uso la autenticación basada en formularios.

Yo todo lo descrito aquí: http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#DataSourceRealm y aquí: 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> 

cuando presente el nombre de usuario y la contraseña me sale la siguiente excepción:

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) 

no he tratado de configurar el entorno en un sistema operativo diferente para probar si se trata de un problema específico de mac.

¿Alguna sugerencia que me perdí? ¡Aprecio tu ayuda! gracias.

+0

funciona cuando muevo la entrada de context.xml ** ** ** a server.xml - ** -> pero lo que realmente quiero eso? – user1681351

Respuesta

0

En mi caso, el problema era que tenía una dependencia conflictiva en mi pom.xml. En mi caso fue la dependencia java-naming. Asegúrate de no tener dependencias/jarrones de nombres que entren en conflicto con las librerías de nombres de Tomcat.

Después de eliminarlo, el problema se ha ido (el mismo entorno que por cierto).

3

En este caso creo que es porque su reino (En este caso se declara en el nivel de servidor) está tratando de utilizar un recurso de nombres, JDBC/proto (que en este caso se declaró al nivel de aplicación Web)

Esto es lo que entiendo es la jerarquía contexto de servidor java

  1. servidor
  2. anfitrión
  3. WebApplication contexto (puede ser en server.xml, o en META-INF Conte xt.xml)
4

Para evitar que declara la ressource en GlobalNamingResources, puso localDataSource = "true" en el Reino

1

En realidad este [jdbc/proto] se menciona en ProjectName.xml como una propiedad como

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

Así asegúrese de que el archivo ProjectName.xml exista en el tomcatInstances/ServerName/conf/Catalina/localhost/ProjectName.xml y tenga este enlace de recurso y su excepción haya desaparecido.

también se enfrentaron al mismo problema y tiene ese archivo contexto local de aplicación fue se borraron por alguna razón de la ubicación

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

restaurado los archivos desde atrás y hecho ... su trabajo bien ahora, esta esperanza ayudará a alguien

+0

¿Qué debe contener el 'ProjectName.xml'? – krismath

Cuestiones relacionadas