2012-03-18 11 views
1

私たちはJava SEアプリケーションを開発しており、Hibernateを使用してデータベースと通信しています。私のデータベースはOracle 11g Express Editionです。これまではアプリケーションで接続プールを使用していませんでした。しかし、以前はc3p0接続プールを使っていましたが、実際にはそれをよく理解していませんでした。Java SEアプリケーションでConnectionプールを使用する際の長所と短所は何ですか?

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

+0

ええ、Java SEアプリケーションは一度に複数の接続を持つ必要がありますか? – Chan

+0

一度に複数のユーザーがいますか? – bdares

答えて

3

それは、Java EEアプリケーションが、Java SEに来るとき、私はそれが有用だ理解することができますか?

のJava SEに接続プールを使用する理由は、のJava EEの場合と基本的に同じです。 JDBC接続のオープンとクローズは比較的高価です。また、接続プールを使用すると、以前にアプリケーションがオープンした接続を再利用できます。

(明らかに、Java SEアプリケーションで1つ(または少数)のJDBC接続を使用する必要がある場合は、接続プールを使用する必要はありませんが、Java EEアプリケーションうん


)。同じ特徴を持つが、それは必要なJava SEアプリケーションは一度に複数の接続を持っているためでしょうか?

1)これはアプリケーションによって大きく異なります。

2)接続プールは、複数の接続を連続して必要とするアプリケーションにも役立ちますが、接続は一度に1つしかありません。たとえば、接続が作成され、サードパーティのライブラリで閉じられている場合などです。

+0

Hibernateのパフォーマンスについてどう思いますか? Hibernateは遅延ロードのためにプロキシを使用するので、より多くの接続を持つことでHibernateのパフォーマンスが向上しますか? – Chan

+0

これは別の問題です。 Hibernateは、接続プールを使用するかどうかにかかわらず、より多くの接続を使用することにします。接続プーリングは接続ライフサイクルに関するものであり、複数の接続がどのように使用されるかについては関係ありません。 –

+0

あなたは技術を理解することから免れているHibernateの性能を向上させるための魔法の式を探していると私は思います(あなたの質問とコメントから)。残念ながら、1つではありません。あなたが試みることができる様々なものがありますが、それらが助けになるという保証はありません。これは、アプリケーションがHibernateをどのように使用するかの詳細に大きく依存します。 –

0

Java EEアプリケーションがすべて同じJava SE JVMといくつかのアドオンライブラリで実行されていることを知りましたか?これは、Java EEアプリケーションでは、Java SEアプリケーションとして動作するライブラリ、つまり換言すると、 が必要です。すべてのEEコンテナはJava SEアプリケーションです。

接続プーリングがSEまたはEEに関連していないことがすでに分かっていた前は、アプリケーションが行うと思われる内容に基づいています。

関連する問題