2012-03-28 92 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