我们正在使用 JNDI 来查找我们的数据库连接。在Tomcat的全局context.xml文件中,我们有类似以下内容:
<context>
<Resource
...
name="jdbc/mysql"
....
/>
</context>
(我刚刚在上面显示了我感兴趣的“名称”属性)。
这对于应用程序来说效果很好。
我们现在想要为不同的应用程序添加另一个资源。我们的 context.xml 如下所示:
<context>
<Resource
...
name="jdbc/mysql"
....
/>
<Resource
...
name="jdbc/mysql/otherapp"
....
/>
</context>
现在,使用该名称定义了这个额外的资源后,Tomcat 无法启动。基本上我们所有的 Web 应用程序都会失败。它给出以下错误:
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 会正常启动。
谁能详细说明 name 属性的工作原理吗?为什么我之前收到错误?
查看文档here http://tomcat.apache.org/tomcat-6.0-doc/config/context.html#Resource_Definitions没有给我太多。
Thanks.
您基本上可以按如下方式阅读:
for <Resource name="jdbc/MyDB" ... />
: 您正在创建一个JDBC有名称的资源MyDB,
for <Resource name="bean/MyBean" ... />
: 您正在创建一个Java豆有名称的资源MyBean.
换句话说,名称编码为“资源类型/资源名称"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)