2012-03-28 91 views
0

我正在用Struts2框架,eclipse開發新的web應用程序,並且我已經使用Hibernate映射了數據庫結構。問題是,當我執行我的「名單」行動框架返回我這個錯誤:javax.naming.NamingException,Tomcat7和Struts2無法通過JNDI訪問數據庫資源

 

    Struts Problem Report 

    Struts has detected an unhandled exception: 

    Messages: 
    This context must be accessed through a java: URL 
    Unable to lookup JNDI name [java:comp/env/jdbc/main] 
    File: org/apache/naming/SelectorContext.java 
    Line number: 776 

server.xml的是:

<?xml version="1.0" encoding="UTF-8"?> 
<Server port="8005" shutdown="SHUTDOWN"> 
    <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/> 
    <Listener className="org.apache.catalina.core.JasperListener"/> 
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/> 
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/> 
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/> 

    <GlobalNamingResources> 
     <Resource auth="Container" defaultAutoCommit="false" driverClassName="net.sourceforge.jtds.jdbc.Driver" maxActive="200" maxIdle="100" maxWait="20000" name="jdbc/main" password="########" type="javax.sql.DataSource" url="jdbc:jtds:sqlserver://10.4.1.85/SBAGRU_DEV" username="****"/> 

    </GlobalNamingResources> 
    <Service name="Catalina"> 
     <Connector connectionTimeout="2000" executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> 

     <Connector SSLEnabled="true" clientAuth="false" keystoreFile="C:\jpeople.bin" keystorePass="gesbanke" keystoreType="PKCS12" maxThreads="200" port="8443" protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="SSL"/> 

     <!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> --> 
     <Engine defaultHost="localhost" name="Catalina"> 
      <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"> 
       <Context docBase="mag0" path="/mag0" reloadable="true" source="org.eclipse.jst.jee.server:mag0"> 
        <ResourceLink global="jdbc/main" name="jdbc/main" type="javax.sql.DataSource" /> 
       </Context> 
      </Host> 
     </Engine> 
    </Service> 
</Server> 

我也hibernate.cfg.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<Server port="8005" shutdown="SHUTDOWN"> 
    <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/> 
    <Listener className="org.apache.catalina.core.JasperListener"/> 
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/> 
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/> 
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/> 

    <GlobalNamingResources> 
     <Resource auth="Container" defaultAutoCommit="false" driverClassName="net.sourceforge.jtds.jdbc.Driver" maxActive="200" maxIdle="100" maxWait="20000" name="jdbc/main" password="########" type="javax.sql.DataSource" url="jdbc:jtds:sqlserver://10.4.1.85/SBAGRU_DEV" username="****"/> 

    </GlobalNamingResources> 
    <Service name="Catalina"> 
     <Connector connectionTimeout="2000" executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> 

     <Connector SSLEnabled="true" clientAuth="false" keystoreFile="C:\jpeople.bin" keystorePass="******" keystoreType="PKCS12" maxThreads="200" port="8443" protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="SSL"/> 

     <!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> --> 
     <Engine defaultHost="localhost" name="Catalina"> 
      <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"> 
       <Context docBase="mag0" path="/mag0" reloadable="true" source="org.eclipse.jst.jee.server:mag0"> 
        <ResourceLink global="jdbc/main" name="jdbc/main" type="javax.sql.DataSource" /> 
       </Context> 
      </Host> 
     </Engine> 
    </Service> 
</Server> 

任何建議,我可以看看?我真的很瘋狂!

+0

您還沒有發佈hibernate配置。與server.xml相同的配置。 – Santosh 2012-03-28 14:53:05

回答

1

我找到了解決方案,和真實問題。我編輯server.xmlEclipse,我沒有看到真正的發佈結果。奇怪的原因eclipse刪除資源鏈接中的真實server.xml,但顯示我在eclipse視圖中的鏈接。所以我gooogled整天,我覺得我必須在的context.xml文件下添加WEB-INF目錄此:

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" path=""> 
<ResourceLink global="jdbc/main" name="jdbc/main" type="javax.sql.DataSource" /> 
</Context> 
0

你有沒有在你的web.xml的鏈接資源:

<resource-ref> 
    <description>JTDS Datasource</description> 
    <res-ref-name>jdbc/main</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

更多信息,請查看Tomcat的文檔:http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

+0

感謝您的快速回答,但這並不能解決問題。 – gafreax 2012-03-28 12:19:46

+0

我找到了解決方案......和真正的問題: – gafreax 2012-03-28 16:04:34

0

一般JDBC數據源也被配置爲<Resource>如下

<Resource name="jdbc/main" auth="Container" type="javax.sql.DataSource" 
       maxActive="100" maxIdle="30" maxWait="10000" 
       username="******" password="######" driverClassName="net.sourceforge.jtds.jdbc.Driver" 
       url="jdbc:jtds:sqlserver://10.4.1.85/SBAGRU_DEV"/> 

你可以試試這個內部標籤。只需更換<ResourceLink>以上<Resource>元素即可。

你所做的一切似乎是正確的,因爲<ResourceLink>用於鏈接<GlobalNamingResources>中定義的資源不知道爲什麼它不起作用。

+0

感謝您的答案!我找到了**解決方案**和**真正的問題**。我在Eclipse中編輯server.xml,並沒有看到真正的發佈結果。出於奇怪的原因eclipse刪除真正的server.xml中的資源鏈接放在Eclipse上顯示它。所以我一整天gooogled,我發現我必須添加在WEB-INF目錄下的這個context.xml文件:'<?xml version =「1.0」encoding =「UTF-8」?> <語境antiJARLocking = 「真」 路徑= 「」> \t \t \t ' – gafreax 2012-03-28 16:07:45