我想在我运行在tomcat上的web应用程序中使用带JPA / TopLink的连接池。早期我使用jdbc的Connection和Statement类来操作数据库中的数据;以这种方式使用连接池我只需在context.xml中声明资源并在应用程序中获取此资源:
Context c = new InitialContext();
DataSource source = (DataSource) ((Context)c.lookup("java:comp/env")).lookup("jdbc/MySource");
现在我想在JPA中使用这样的连接池。我怎么能这样做?
还有一个问题:我在一些例子中看到reosurce是在context.xml中声明的,然后在web.xml中的<资源引用取代。为什么我应该在不同的地方声明它或者它是相同的声明,我的意思是它相当于context.xml中的声明?
答案 0 :(得分:6)
现在我想在JPA中使用这样的连接池。我该怎么做?
假设您已经在<Resource>
中通过context.xml
声明了连接池数据源创建,那么您只需要在webapp的/META-INF/persistence.xml
中声明JPA的数据源用法。< / p>
<persistence-unit name="YourPersistenceUnit" transaction-type="JTA">
<jta-data-source>jdbc/MySource</jta-data-source>
</persistence-unit>
还有一个问题:我在一些例子中看到,reosurce在
context.xml
中声明,然后在web.xml
<resource-ref>
中声明。为什么我应该在不同的地方宣布它或者它是同一个声明,我的意思是它等同于context.xml
中的声明?
<Resource>
中的context.xml
一个由servletcontainer定义数据源的创建。它可以被多个webapps使用。 <resource-ref>
中的web.xml
一个定义了特定webapp的数据源的用法。注意:使用JPA时,您不需要web.xml
中的那个。它进入persistence.xml
。