2016-05-24 4 views
0

内の複数の要求私は、この持っている:ルミナス - 私のルミナスアプリで同じDB接続

(defn page1 [id] 
    (layout/render "page1.html" 
    {:article (db/get-single-article {:id (Integer/parseInt id)})) 

を私は、同じDB接続内のDBに複数の異なる要求を実行します。どうやってやるの?

+0

同じdb接続またはdbトランザクションを使用しますか? –

+0

@PiotrekBzdyl、接続。 –

答えて

1

複数のHTTP要求を処理するために同じDB接続を再利用するか、JDBC APIを使用して複数の関数を呼び出す単一のHTTP要求(これらすべてのJDBC呼び出しで同じDB接続を使用するか)は不明です。

これが後者の場合、with-db-connectionを使用して、JDBC APIを呼び出すすべての関数をラップすることができます。また、すべてのSQL操作を1つのDBトランザクションに含める必要がある場合は、with-db-transactionを使用することもできます。

前者の場合、複数のHTTP要求に対して同じ接続を再利用する必要があるのか​​どうかはわかりませんが、HTTPはステートレスで複数の問題が発生するため、共通の慣用表現ではありません。

ring HTTP sessionに接続を保存すると、セッションに関連付けられた要求を取得してJDBCロジックに使用するたびにフェッチできます。

しかし、このような解決策には欠点を以下ました:

  • あなたが不要になったとき(あなたがプールを使用しない場合または閉)、接続がプールに解放されることを確認していないする必要があります。どのようにそれを検出しますか?クライアントに障害が発生し、DB接続をクリーンアップすることを決定したワークフローが終了しない場合はどうなりますか?
  • 同時に処理するセッション数はいくつですか?各セッションの専用接続を維持している多くの(数百人のように)規模が拡大しない場合(DB接続は両側で高価なリソース(クライアントとサーバー)です)