2012-03-18 37 views
1

我們正在開發一個Java SE應用程序,並且我正在使用Hibernate與數據庫進行通信。我的數據庫是Oracle 11g Express Edition。直到現在我還沒有在應用程序中使用連接池。但是我之前使用過c3p0連接池,但我從來沒有真正理解它。在Java SE應用程序中使用連接池有什麼優點和缺點?

在Java SE應用程序中使用c3p0有哪些優點和缺點?當涉及Java EE應用程序但Java SE時,我可以理解它的有用性嗎?

這是我對Hibernate的配置。

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
    <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:XE</property> 
    <property name="hibernate.connection.username">EP</property> 
    <property name="hibernate.connection.password">123</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> 
    <property name="hibernate.default_schema">EP</property> 
    <property name="show_sql">true</property> 

    <property name="hibernate.c3p0.min_size">5</property> 
    <property name="hibernate.c3p0.max_size">20</property> 
    <property name="hibernate.c3p0.timeout">300</property> 
    <property name="hibernate.c3p0.max_statements">50</property> 
    <property name="hibernate.c3p0.idle_test_period">3000</property> 

    <mapping class="app.model.User"></mapping> 
</session-factory> 
</hibernate-configuration> 
+0

建立連接是昂貴的,並且傳遞預先存在的連接而不是爲每個請求創建一個新的連接要便宜得多。 (你不會在乎你的數據庫是否有如此輕的負載,這並不重要。)請注意,我的答案與SE或EE無關,因爲問題與手頭上的問題無關。 – bdares 2012-03-18 02:25:22

+0

是的,但是Java SE應用程序一次需要多個連接嗎? – Chan 2012-03-18 02:26:45

+0

你會一次有超過1個用戶嗎? – bdares 2012-03-18 02:27:12

回答

3

我能理解它的用處,當涉及到Java EE應用程序,但Java SE的?

之所以用在Java SE連接池是基本相同作爲Java EE情況。打開和關閉JDBC連接相對昂貴,並且連接池允許您重新使用之前打開的應用程序的連接。 (很顯然,如果Java SE應用程序只需要使用一個(或少量)JDBC連接,那麼在使用連接池時就沒有回報,但同樣適用於Java EE應用程序具有相同的特性。)


是的,但是是有必要的Java SE應用程序擁有在同一時間多個連接?

1)完全取決於應用程序及其功能。

2)連接池對於需要串行連接多個連接的應用程序也很有用,但一次只能連接一個連接。例如,如果連接正在第三方庫中創建並關閉。

+0

您對Hibernate性能有何看法?由於Hibernate使用代理進行延遲加載,會有更多的連接提高Hibernate的性能嗎? – Chan 2012-03-18 02:43:59

+0

這是一個不同的問題。不管你是否使用連接池,Hibernate都會決定使用更多的連接。連接池關於連接生命週期,而不是關於如何/是否使用多個連接。 – 2012-03-18 03:00:14

+0

它讓我感到(從你的問題和評論中)你正在尋找一種提高Hibernate性能的神奇公式,這使你不必理解該技術。不幸的是,沒有一個。有各種各樣的東西,你可以*嘗試*,但不能保證他們會幫助。這實際上取決於應用程序如何使用Hibernate的細節。 – 2012-03-18 03:05:04

0

有沒有人意識到Java EE應用程序都運行在相同的Java SE JVM和一些附加庫上?這就是說,Java EE應用程序需要使其可用作Java SE應用程序的庫,或換句話說:所有EE容器都是Java SE應用程序。

之前,它已經注意到,連接池是不相關的SE或EE,它更多的是基於什麼樣的應用程序是應該做的。

相關問題