2011-06-09 75 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