在persistence.xml中引用Tomcat JNDI数据源

在server.xml中我已经定义了全局资源(我使用的是Tomcat 6 ):

   

我在catalina.out中看到这是绑定的,所以我想它没关系。

在我的网络应用程序中,我有数据源的链接,我不确定它是否正常:

    

在应用程序中有persistence.xml:

   org.hibernate.ejb.HibernatePersistence jdbc/myds       

它应该没问题,但很可能这个或者ResourceLink定义是错误的,因为我得到了:

javax.naming.NameNotFoundException:名称jdbc未绑定在此Context中

这有什么不对,为什么这不起作用?

更新:

我试图直接获取数据源:

 public class WebAppListener implements ServletContextListener { // ServletContextListener interface - start public void contextInitialized(ServletContextEvent sce) { try { Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource) envCtx.lookup("jdbc/myds"); } catch (NamingException ex) { System.out.println("!!!! Got NamingException:"); ex.printStackTrace(System.out); } } public void contextDestroyed(ServletContextEvent sce) { } } 

我的web.xml:

   Listener WebAppListener  

当我连接到Tomcat时,我在JMX控制台中看到数据源时仍然得到相同的错误(Catalina – Datasource – javax.sql.Datasource =“jdbc / myds”:ObjectName = Catalina:type = DataSource,class = javax.sql。 DataSource,name =“jdbc / myds”。)

persistence.xml应该是

java:comp/env/jdbc/myds

根据http://forums.oracle.com/forums/thread.jspa?messageID=1899677中的回复

并且还是$CATALINA_HOME/lib数据库驱动程序

(我在Tomcat7中使用Apache OpenJPA库,所以可能与Hibernate的东西不匹配)

我从来没有在我的OpenJPA webapps上使用全局jdbc,但尝试了一下。 它工作,这是我的配置。 请参阅保存persistence.xml的文件夹,可能是openjpa问题,但没有它没有任何作用。

MyApp的/ WEB-INF /类/ META-INF / persistence.xml中
这是使用openjpa提供程序,因此在hibernate中可能不需要类列表。

    org.apache.openjpa.persistence.PersistenceProviderImpl java:comp/env/jdbc/mydb com.myapp.db.User com.myapp.db.Server         

的Tomcat / CONF / server.xml中
添加全局jdbc资源。

  ..cut...     ..cut... 

tomcat的/ conf目录/卡塔利娜/本地主机/ myapp.xml
这是我的开发框,所以我使用docBase直接链接到项目文件夹。 当部署到生产箱时,您应该发现将此插入war包(META-INF / context.xml)。

      

MyApp的/ WEB-INF / web.xml中
将resource-ref添加到文件末尾。

   Webapp Webapp ..cut...  mydb jdbc/mydb javax.sql.DataSource Container   

因为我使用OpenJPA + Tomcat7(不是全尺寸的j2ee容器),这可能看起来过度工程,但这就是它的工作原理。 结果很好,开发db-aware webapps非常容易。 无需手动sql查询硬编码和oldskool DAO类。

您是否通过在web.xml声明该资源,为该应用程序提供了该资源?

  DB Connection jdbc/myds javax.sql.DataSource Container