首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat UserDatabase创建MBeans意外错误

Tomcat UserDatabase创建MBeans意外错误
EN

Stack Overflow用户
提问于 2021-05-23 13:12:26
回答 1查看 456关注 0票数 1

server.xml

代码语言:javascript
复制
<GlobalNamingResources>

  <Resource auth="Container" description="User Database" factory=org.apache.tomcat.jdbc.pool.DataSourceFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type=org.apache.Catalina.UserDatabase" />

  <Resource name="jdbc/ds" auth="Container" type="javax.sql.DataSource"
               maxTotal="100" maxIdle="30" maxWaitMillis="10000" maxWait="10000" maxActive="100"
               username="test" password="test123" jdbcInterceptors="ConnectionState;StatementFinalizer" 
               url="jdbc:oracle:thin:@localhost:1521:SPRINGTEST/" validationQuery="select 1 from dual" />
</ GlobalNamingResources>

tomcat-users.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users version="1.0"  xmlns="http://tomcat.apache.org/xml"
xmlns="http://www.w3.org/2001/XMLSchema-instance" 
xsi=schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd">

<role rolename="tomcat"/>
<role rolename="role1"/>
<role username="tomcat" password="tomcat" roles="tomcat"/>
<role username="both" password="tomcat" roles="tomcat, role1"/>
<role username="role1" password="tomcat" roles="role1"/>
</tomcat-users>

web.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">

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

context.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

<!-- Web application will be reloaded. -->
<!-- <WatchedResource>WEB-INF/web.xml</WatchedResource> -->
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

  <ResourceLink global="jdbc/ds" name="jdbc/ds" type="javax.sql.DataSource"/>
</Context>

错误消息

代码语言:javascript
复制
org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance 
INFO: Name = DS Ignoring unknown property: value of
"org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptorStatementFinalizer" for "jdbcInterceptors" property 
org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance
INFO: Name = DS Ignoring unknown property: value of "30000" for "validationInterval" property
org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance
INFO: Name = DS Ignoring unknown property: value of "true" for "jmxEnabled" property 
org.apache.tomcat.jdbc.pool.DataSourceFactory getObjectInstance
WARNING: org.apache.catalina.UserDatabase is not a valid class name/type for this JNDI factory. 
org.apache.catalina.mbeans.GlobalResourcesLifecyclelistener createMBeans

SEVERE: Unexpected error creating MBeans

java.lang.NullPointerException
at org.apache.naming.NamingContextBindingsEnumeration.nextElementInternal(NamingContextBindingsEnumeration.java:129) 
at org.apache.naming.NamingContextBindingsEnumeration.next(Naming ContextBindingsEnumeration.java:71)
at org.apache.naming.NamingContextBindingsEnumeration.next(NamingContextBindingsEnumeration.java:34)
at org.apache.catalina.beans.GlobalResourcesLifecyclelistener.createBeans(GlobalResourceslifecyclelistener.java:127) 
at org.apache.catalina.mbeans.GlobalResourcesLifecyclelistener.createMBeans(GlobalResourcesLifecyclelistener.java:101)
at org.apache.catalina.mbeans.GlobalResourcesLifecyclelistenerlifecycleEvent(GlobalResourceslifecyclelistener.java:76)
at org.apache.catalina.util.LifecycleBase.firelifecycleEvent(LifecycleBase.java:123) 
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423) 
at org.apache.catalina.util.LifecycleBase.setState(Lifecyclebase.java.366)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:923) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:772)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)


org.apache.catalina.core.StandardService startInternal 
INFO: Starting service [Catalina] 
org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet engine: [Apache Tomcat/9.0.43] 
org.apache.catalina.realm.CombinedRealm startInternal 
SEVERE: Failed to start [org.apache.catalina.realm.UserDatabaseRealm] realm
org.apache.catalina.LifecycleException: No UserDatabase component found under key [UserDatabase]
at org.apache.catalina.realm.UserDatabaseRealm.startInternal(UserDatabaseRealm.java:282)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.realm.CombinedRealm.startInternal(CombinedRealm.java:248)
at org.apache.catalina.realm.LockOutRealm.startInternal(LockOutRealm.java:116)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:902)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) 
at org.apache.catalina.core.Standard Service.startInternal(StandardService.java:434)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal (StandardServer.java:930)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup. Catalina.start(Catalina.java:772) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java: 342)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)

我使用TomcatVersion9.0编译代码时收到了严重错误消息:创建MBeans java.lang.NullPointerException严厉的意外错误:无法启动org.apache.catalina.realm.UserDatabaseRealm领域org.apache.catalina.LifecycleException:没有在UserDatabase键下找到UserDatabase组件

请帮助我在设置中缺少的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-23 14:37:14

UserDatabaseRealm (参比)文档)需要org.apache.catalina.UserDatabase类型的资源(不要与javax.sql.DataSource类型的数据库连接池混淆)。

在您的配置中,您提供了错误的对象工厂类名:您使用了org.apache.tomcat.jdbc.pool.DataSourceFactory,它创建Tomcat连接池,而不是org.apache.catalina.users.MemoryUserDatabaseFactory

只需使用:

代码语言:javascript
复制
<Resource auth="Container"
          name="UserDatabase"
          type="org.apache.catalina.UserDatabase"
          factory="org.apache.catalina.users.MemoryUserDatabaseFactory" />

pathname属性的缺省值是conf/tomcat-users.xml,因此可以省略它。

备注:日志中的警告"DS忽略未知属性“与您配置的jdbc/ds数据源有关。默认情况下,Tomcat使用DBCP2连接池(cf )。文档,同时为Tomcat连接池(cf )提供属性。文档)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67660140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档