Error in Tomcat during Startup: DB name not found

*爱你&永不变心* 提交于 2019-12-23 09:05:38

问题


While staring the Tomcat, I am getting the following error:

SEVERE: Exception looking up UserDatabase under key UserDatabase
javax.naming.NameNotFoundException: Name UserDatabase is not bound in this Context
at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
at org.apache.catalina.realm.UserDatabaseRealm.start(UserDatabaseRealm.java:253)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1049)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Jul 6, 2012 4:32:25 PM org.apache.catalina.startup.Catalina start

SEVERE: Catalina.start: 
LifecycleException:  No UserDatabase component found under key UserDatabase
at org.apache.catalina.realm.UserDatabaseRealm.start(UserDatabaseRealm.java:261)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1049)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

I used the same dB configuration before in Server.xml and Tomcat was working fine, but since last 2 days when I change the server and install a new copy, it's throwing this error.

The GlobalNamingResources defined in server.xml are as follows:

<GlobalNamingResources>
<Resource name="jdbc/abcdOracle" auth="Container"
type="javax.sql.DataSource" 
maxActive="100" initialSize="5" maxWait="2000" 
username="xxxxxx" password="xxxxxx" 
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@xxxxxx.xxxxxx.net:1523:ABCDE"
validationQuery="select sysdate from dual" 
validationInterval="30000"
testWhileIdle="true" testOnBorrow="true" testOnReturn="false"
removeAbandoned="true" logAbandoned="true"
removeAbandonedTimeout="60" /> 
</GlobalNamingResources>

Anyone have any hint how to solve this issue. Thanks.


回答1:


I've got this issue caused by XML syntax errors in my tomcat-users.xml. Though these erros are totally obvious, they took some time to be found out and fixed:

1. Invalid double quotes

  • Wrong: <role rolename=manager-script/>
  • Right: <role rolename="manager-script"/>

2. Missing close double quotes

  • Wrong: <user username="tomcat" password="tomcat" roles="manager-gui,manager-script/>
  • Right: <user username="tomcat" password="tomcat" roles="manager-gui,manager-script"/>

3. Missing close slash

  • Wrong: <role rolename="admin">
  • Right: <role rolename="admin"/>

4. Missing space between the attributes

  • Wrong: <user username="tomcat" password="tomcat"roles="manager-gui,manager-script"/>
  • Right: <user username="tomcat" password="tomcat" roles="manager-gui,manager-script"/>



回答2:


You have removed the tomcat-users.xml from $CATALINA_BASE/conf which is registered in JNDI as UserDatabase by default.




回答3:


I think you have removed below code from server.xml

<Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" /> 

replace it




回答4:


Error in /var/log/tomcat6/catalina.out:

GRAVE: Catalina.start:
LifecycleException:  No UserDatabase component found under key UserDatabase

Verify the position of tomcat-users.xml:

# updatedb
# locate tomcat-users.xml
/etc/tomcat6/tomcat-users.xml

Open the /etc/tomcat6/server.xml and edit:

<Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" /> 

by inserting a correct path to tomcat-users.xml file. In my case is:

pathname="tomcat-users.xml"



回答5:


This could also mean that you have an XML character in an attribute of your tomcat-users.xml file.

For example, I've seen this happen when I had a "<" character in the password field for a user in tomcat-users.xml

File excerpt:

/etc/tomcat6/tomcat-users.xml

<role rolename="manager"/>
<user username="admin" password="<password" roles="manager"/>



回答6:


In server.xml, the Resource element, or its parent GlobalNamingResources element isn't mandatory. You'll only have issues if you remove what the resources are accessing (e.g., tomcat-users.xml).

If you comment out the default GlobalNamingResources element, then make sure you scroll down in server.xml and remove the LockOutRealm as well. It uses the UserDatabase by default, specified in in the GlobalNamingResources.



来源:https://stackoverflow.com/questions/11369490/error-in-tomcat-during-startup-db-name-not-found

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!