問題タブ [open-session-in-view]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - どこからでも HttpServletRequest にアクセス
以前は、JSF 2 アプリの Cookie に基づく Open Session In Conversation フィルターを使用していました。今、私は同じメカニズムを構築したいと考えていますが、テクノロジーに依存しません。いくつかのコードを再利用して、これをOncePerRequestFilterを拡張するクラスに記述しました。
今、到達したら、 Hibernate SessionbindConversation(conversationId, request)
にマップされている conversationId を指す request 属性を追加するだけです。
とにかく、JSF では、これを使用してCurrentSessionContextFacesContext.getCurrentInstance().getExternalContext().getRequest()
を使用して実装することで、現在のリクエストにアクセスできます。しかし、単純なサーブレットでは、現在のリクエストにプログラムでアクセスするにはどうすればよいでしょうか?
注: 私は OncePerRequestFilter javadocs を読んでいて、これを見つけました:
Servlet 3.0 では、別のスレッドで発生する REQUEST または ASYNC ディスパッチの一部としてフィルタを呼び出すことができます。フィルターは、非同期ディスパッチに関与する必要があるかどうかを web.xml で構成できます。ただし、場合によっては、サーブレット コンテナーが異なるデフォルト構成を前提とします。したがって、サブクラスは、メソッド shouldNotFilterAsyncDispatch() をオーバーライドして、スレッドの初期化、ロギング、セキュリティなどを提供するために両方のタイプのディスパッチ中に [sic] 実際に 1 回呼び出す必要がある場合、静的に宣言できます。このメカニズムは、web.xml でフィルターをディスパッチャー タイプで構成する必要性を補完し、置き換えるものではありません。
では、 ThreadLocalを使用して目的を達成するのは危険でしょうか?
spring - 非 Web アプリケーションの OpenSessionInViewInterceptor
非 Web アプリケーションで OpenSessionInViewInterceptor を使用する必要があります。OSV Interceptor を次のように構成しました。
遅延読み込み例外が発生しています。私が間違っている場所へのポインタはありますか?構成は正しいですか?
または、Web 以外のアプリでは、インターセプターの代わりに OpenSessionInViewFilter が必要ですか?
ありがとう!
gwt - GWT RequestFactory オープン セッション InView の回避策
サブエンティティを持つエンティティ (トップ エンティティ) があり、サービス レイヤーでエンティティを変更するが、それらの変更を永続的にしたくないため、[ビュー フィルターでセッションを開く] を使用できません。dao.update を呼び出して、必要なものだけを永続化します。
一方、ビュー フィルターでオープン セッションを使用しない場合、サブエンティティは正しくありません。
トップエンティティでサブエンティティをインスタンス化する場合、GWT がサブエンティティで findEntity() を呼び出さないようにするための回避策はありますか?
例:
spring - Spring、Hibernate、Tiles、OpenSessionInViewFilter、LazyInitializationException
遅延ロードされたコレクションにアクセスしようとすると、jspでLazyInitializationExceptionが発生しました。
web.xml:
navigator-servlet.xml:
また、navigator-servlet.xmlの先頭にいくつかのディレクティブがあります(これがすべて必要かどうかはわかりません)。
LazyInitializationExceptionが一般的な問題であることは知っていますが、多くの時間を費やし、stackoverflowに関する質問がそれを修正する最後の望みです。
UPD1: Hibernateバージョン3.5.6、Spring-3.1.0.RELEASE
gwt - Set サブコレクションを持つ GWT RequestFactory
Set の形をした子コレクションの永続性に関して RequestFactory に少し問題があります。requestfactoryでgwt 2.5 を使用し、バックエンドで Hibernate4/Spring3 を使用しています。DAO の save メソッドで findByID の後にコレクションを永続化できるように、Spring によるopen-session-in-viewフィルターを使用しています。私の問題は、子コレクションが List に基づいている場合はすべて正常に動作しているように見えますが、それらが Set に基づいている場合、クライアントからのすべてのアイテムが明らかにサーバーに到達するわけではありません。
私のコードは次のようになります。
-ルート エンティティの IndicationTemplate:
-もちろん、子エンティティ ProposalTemplate には反対の ManyToOne マッピングがあり、3 つの異なるエンティティを持つ同じ種類の 3 つのサブコレクションがあります。
-ルート エンティティのクライアント側プロキシ:
-クライアントでは、ルート エンティティの属性と、子エンティティのリストもレンダリングします。その後、ユーザーはそれらを更新でき、変更は次のようにコレクションに保存されます。
- そして、ある時点で:
-RequestContext は次のようになります。
問題は、コレクション サーバー側への要求ごとに 1 つの子エンティティのみが追加されることです。たとえば、indicationTemplate には 2 つの proposalTemplates があり、さらに 4 つ追加すると、サーバー側の saveIndicationTemplate では、エンティティには 6 ではなく 3 つしか含まれません。サーバー上で以前よりも多く。requestContext メソッドを起動する直前にプロキシ オブジェクトを確認したところ、そのすべての子とともに完全に読み込まれました。最後に、最も奇妙なことは、Set per List (およびその後のすべての変更) を置き換えると、すべてがうまく機能することです!
リストの代わりにセットを使用すると、RF がすべての変更をサーバーに転送できないのはなぜですか?? ところで、私はこの場合セットを好むので、それが私が尋ねている理由です。
誰?
助けてくれてありがとう!
spring - OpenSessionInViewFilterを使用すると、「sessionFactory」という名前のBeanエラーが発生しません
Hibernateの遅延読み込みを使用しており、OpenSessionInViewFilterをweb.xmlに追加した後、使用するsessionFactory Beanを定義した後でも、sessionFactoryに例外がありません。
これは同じ問題のようですが、残念ながら私は解決策を理解していませんでした。提案された解決策に従います(sessionFactoryをroot-spring.xmlというファイルに移動します)。サーバーの起動の例外が発生します。
私が欠けているものはありますか?
web.xml
Spring-servlet.xml
プロジェクト構造:
performance - @Transactional の代わりに OpentransactionPerView
Spring 3.1.1 と Hibernate 4.1 を使用した Java EE アプリケーションがあります。今、私は物事をスピードアップしたかったのですが、ボトルネックは 1 つのリクエストで複数のトランザクションの開始と終了であることがわかりました。
@Transactional
ここで、すべての注釈を削除しOpenSessionInViewFilter
、1 つのトランザクションを開閉する独自の を作成しました。
それは良い考えですか?それはうまくいくようで、物事をスピードアップしました。
トランザクションのログは次のとおりです。
接続プール
しかし、ビューフィルターで開いているセッションはセッションを閉じているようです
しかし、フィルターを削除しても、Hibernate はプールを使用していないようです。
hibernate - org.hibernate.LazyInitializationException: プロキシを初期化できませんでした
こんばんはorg.hibernate.LazyInitializationException: could not initialize proxy - no Session
、セッションに存在するオブジェクトから属性を取得しようとすると発生するという例外があります。セッション属性からパラメーターを取得するJSP stmtsは次のとおりです。
注: これらの例外は、JSP に 2 番目の for ループを追加した場合にのみスローされます。2 番目の for ループがなくてもすべてが明確です!! これらの for ループが何をしたのか、それを克服する方法を知りたい
spring - JBoss 6.1 で OpenEntityManagerInViewFilter を動作させることができない
open-session-in-view 動作を既存の純粋な JPA アプリケーションに追加しようとしています。サービス層で Spring を使用することはオプションではありません。ビューを Spring の OpenEntityManagerInViewFilter でラップしたいので、EJB レイヤーを変更する必要はありません。
OpenEntityManagerInViewFilter (Spring 3.2.2) を JBoss 6.1 で動作させることができません。フィルターは確実に呼び出されていますが、ビューでまだ LazyInitializationException が発生しています。
フィルターとセッション Bean は、EntityManager の異なるインスタンス (およびクラス) を使用しています。フィルターは を取得していますがorg.hibernate.ejb.EntityManagerImpl
、セッション Bean は を取得していorg.jboss.jpa.tx.TransactionScopedEntityManager
ます。どのSpring構成がこれに責任があるのか わかりません。
関連するコード/構成は次のとおりです。
戦争/WEB-INF/classes/test.web.servlet.TestServlet
ejb/test.ejb.session.ServiceBean
戦争/WEB-INF/web.xml
戦争/WEB-INF/spring.xml
ejb/META-INF/persistence.xml
java - View Merge の Java Hibernate セッションで変更が失われますか?
ZKで実装しようとしている Hibernate APP がOpen Session in View Pattern
あります。Hibernate がスレッドごとにセッションを作成して閉じるという質問がありますが、更新メソッドを使用して実装を開始した 1 つのセッションで [基準と保存または更新] メソッドを使用した複数の操作があります。非常に迅速に悪名高い
以下の場合、私の質問に変更update()
しました。merge()
私がStudent
クラスを持っていて、学生を更新しようとしているupdate[making sure is not in session avoid the exception]
が、後で他の方法で学生が前回とは異なる方法で更新する必要がある場合update
、merging
メソッドmerge()
が呼び出されます。メソッドがいつ[flush][commit]
呼び出され、最初の学生への変更が失われるのか疑問に思っていましたか? 両方の生徒への変更は OK ですか? 何が起こるのですか??
最初の変更student
は損失です。この場合、私は何ができますか?
よろしくお願いします。