在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
- 如何将PostgreSQL数据源添加到WildFly 9.0?
- 是否有JNDI命名空间约定?
- 用于MS SQL Server的JBoss AS 5数据库连接池重新连接例程
- 如何在spring中覆盖JndiObjectFactoryBean并在java中设置解密密码
- 带有mysql DataSource的javax.naming.NoInitialContextException
- 如何从Web容器外部查找JNDI数据源?
- 轻松启动独立JNDI服务器(并注册一些资源)
- java.lang.AbstractMethodError:com.mysql.jdbc.Connection.isValid(I)Z
- Wildfly 10无法连接数据源:无效连接