2011-06-09 100 views
3

我想在tomcat上运行的web应用程序中使用连接池和JPA/TopLink。早期我使用jdbc的Connection和Statement类来处理数据库中的数据;使用连接池这样,我只是在context.xml中声明的资源和应用程序中获得此资源:使用tomcat的JPA连接池

Context c = new InitialContext(); 
DataSource source = (DataSource) ((Context)c.lookup("java:comp/env")).lookup("jdbc/MySource"); 

现在我想用这样的连接池与JPA。我怎样才能做到这一点?

还有一个问题:我在一些例子中已经看到reosurce在context.xml中声明,然后在web.xml中在< resource-ref>中声明。为什么我应该在不同的地方声明它,或者它是相同的声明,我的意思是它在context.xml中声明的等价物?

回答

6

现在我想用这种连接池与JPA。我怎样才能做到这一点?

假设你已经在context.xml宣布合并连接数据源创建的<Resource>,那么你只需要声明的JPA数据源使用在webapp的/META-INF/persistence.xml

<persistence-unit name="YourPersistenceUnit" transaction-type="JTA"> 
    <jta-data-source>jdbc/MySource</jta-data-source> 
</persistence-unit> 

一个问题:我已经看到了一些例子,在reosurce在context.xml声明,则在<resource-ref>宣布web.xml。为什么我应该在不同的地方申报,或者它是同一个声明,我的意思是说它等于context.xml中的声明?

<Resource>之一context.xml definies由servletcontainer数据源的创建。它可以被多个webapps使用。在web.xml中的<resource-ref>定义了特定web应用的数据源的使用。注意:使用JPA时,您不需要web.xml中的那个。它进入persistence.xml

+0

因此,如果我在context.xml中定义了< resource>,并且未在web.xml中定义,那么我是否可以使用池连接,或者每当我获取数据从数据库? – maks 2011-06-09 14:37:00

+0

Tomcat数据源默认使用已经是连接池的内置DBCP数据源。但是,您可以通过更改''中的工厂参数来更改它,另请参阅http://stackoverflow.com/questions/520585/connection-pooling-options-with-jdbc-dbcp-vs-c3p0/3481821#3481821 – BalusC 2011-06-09 14:41:17

+0

@BalusC我们如何才能从Datasource获得Entitymanager ......因为我听说我们无法在tomcat中使用JPA进行连接池,因为它不是JEE服务器,而且我正在使用JPA utill类从中获取entitymanager。 。:) – goodyzain 2015-03-23 05:17:24