2014-10-29 76 views
3

我們正在使用JNDI來查找我們的數據庫連接。在Tomcat的全球context.xml文件,我們也有類似如下的內容:Tomcat的context.xml中的資源名稱屬性如何工作?

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

(我剛纔顯示的「名稱」屬性上面我很感興趣)。

這適用於應用程序。

我們現在想爲其他應用程序添加另一個資源。我們的context.xml如下所示:

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

</context> 

現在,使用該名稱定義的額外資源,Tomcat不會啓動。基本上所有的Web應用程序都失敗了。它提供了以下錯誤:如果我改變從 「JDBC/MySQL的/ otherapp」 到 「JDBC/otherapp」 第二資源的name屬性

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 

,Tomcat啓動了罰款。

任何人都可以詳細說明name屬性的工作原理嗎?爲什麼我以前收到錯誤? 看文檔here並沒有給我太多。

謝謝。

回答

0

你基本上可以把它讀作如下:

<Resource name="jdbc/MyDB" ... />:您正在使用的名稱創建JDBC資源MYDB

<Resource name="bean/MyBean" ... />:您正在創建一個的Java Bean資源與名稱MyBean

換句話說名稱被編碼爲 「RESOURCE_TYPE/RESOURCE_NAME

相關問題