gpt4 book ai didi

tomcat - Tomcat的context.xml中的Resource name属性是如何工作的?

转载 作者:行者123 更新时间:2023-11-28 21:53:29 24 4
gpt4 key购买 nike

我们正在使用 JNDI 来查找我们的数据库连接。在 Tomcat 的全局 context.xml 文件中,我们有类似以下内容:

<context>
<Resource
...
name="jdbc/mysql"
....
/>
</context>

(我刚刚在上面显示了我感兴趣的'name'属性)。

这适用于应用程序。

我们现在想为不同的应用程序添加另一个资源。我们的 context.xml 如下所示:

<context>
<Resource
...
name="jdbc/mysql"
....
/>
<Resource
...
name="jdbc/mysql/otherapp"
....
/>

</context>

现在,由于使用该名称定义了这个额外的资源,Tomcat 不会启动。基本上我们所有的网络应用程序都会失败。它给出了以下错误:

SEVERE: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/CallCycleSystem##1.0.4.201410241335]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:962)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1603)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.BasicDataSource cannot be cast to javax.naming.Context
at org.apache.catalina.core.NamingContextListener.createSubcontexts(NamingContextListener.java:1249)
at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1051)
at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:671)
at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:270)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 11 more

如果我将第二个资源的名称属性从“jdbc/mysql/otherapp”更改为“jdbc/otherapp”,Tomcat 可以正常启动。

任何人都可以详细说明名称属性的工作原理吗?为什么我之前收到错误消息?查看文档 here没有给我太多。

谢谢。

最佳答案

基本上可以按如下方式阅读:

<Resource name="jdbc/MyDB" ... /> : 您正在创建名为 MyDBJDBC 资源,

<Resource name="bean/MyBean" ... /> : 您正在创建名为 MyBeanJava Bean 资源。

换句话说,名称被编码为“Resource_Type/Resource_Name

关于tomcat - Tomcat的context.xml中的Resource name属性是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26625015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com