-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
複数スレッドに渡るTransactionへの対応 #6
Comments
HibernateAccessContext は、Hibernate 自動生成のときのためだけなので無関係。 そして、AccessContext, CallbackContext 以外は、 CallbackContext は、特殊要件のものなので、とりあえず優先度は低いかなと。 AccessContextは対応しないと。。。ちょっとお待ちを |
ありがとうございます、Behaviorに閉じているものはThreadLocalのままで良さそうですね。 ちょっと考慮が必要なのは、全部をHttp.Contextへ置換すれば良いわけではなさそうな点です。 なので、単純な置換ではなくて、ThreadLocalっぽいものを代替するインタフェースをアプリケーションに要求するふうになるのでしょうか。 |
確かに、バッチのときはHttpがいないから、 いったん、Runtimeをいじらないでも動くような形で暫定対応してみて、 |
ひとまず、スーパーミラクルワンダフルべたべたの方法を思い付きました。 commonColumnMap.dfpropにて、 次は、ちょっとだけDBFluteのテンプレートをいじって、 ちなみに、自動生成を試してみて気付いたdfpropの修正ポイントを直しておきました。 << basicInfoMap.dfprop >> << databaseInfoMap.dfprop >> << dependencyInjectionMap.dfprop >> << replace-schema.sh >> |
次のバージョン(1.0.5F)で、AccessContextならびにCallbackContextにて、 AccessContext.unlock(); アプリケーションの起動時に一度だけ呼び出すことを想定しています。 |
*.dfpropの修正ありがとうございます、生成は今後のタスクだったので助かりました。 AccessContextですが、Http.Context.currentをそのまま使うのはまずいと思います。 Threadが変わってもアプリからのアクセスが可能になっているのが、 argsにAccessContextを持たせることになると思います。 おそらくこんなふうになるのではと思いますがどうでしょうか。やりすぎ?
|
ああぁ、そういうことかわかった。 たし、current (ThreadLocal) 自体は、Http.Contextを保持してるものなので、 すると、もうDBFlute側からすると、スレッドローカルじゃなくて、 ちょと修正しちゃいますー |
Holder頂きました。 AccessContext.useSurrogateHolder(new AccessContextHolder() {
}); ExampleにSNAPSHOTを反映させちゃおうかと思ったけど、 とりあえず、Java8のOptional的な対応をやっているので、 |
修正ありがとうございます。
build.sbtのlibraryDependenciesを変更すれば、IDEA (community版 + scala plugin)なら勝手に反映してくれると思います。
はい、そのイメージでいます。 コード部分は行頭をハードタブでインデントすると、いい感じの見栄えになってくれる記法のようです。 |
今週リリース予定のDBFlute-1.0.5Fを、DBFluteモジュールだけ反映しました。 そちらで、 すると、AccessContext で Holder の差し替えができます。 |
アイアイサー! |
http://www.playframework.com/documentation/2.2.x/JavaAsync
にあるように1リクエストの間にF.Promiseでスレッドを切り替えても、トランザクションを保てるようにしている最中です。
(ThreadLocalを使ったトランザクション実装が多く、それではThreadが変わると別トランザクションになってしまう)
PR #5 までで、スレッドが変わってもトランザクションを保てるようにしたつもりです。
これから、DBFluteのAccessContextを対応しようと考えていますが、他の箇所でもThreadLocalを使っているようなのでまとめて相談しておきたいです。
dbflute-1.0.5D では10箇所(9ファイル)で使っているようです。
少なくともAccessContextは対応する必要があると考えていますが、他の箇所はどうでしょうか?
について相談させていただけますか。
補足
PR #5までで対応したぶんは、対応が必要かどうかは次のように判断しました。
そして対応が必要な場合は、ThreadLocalではなくPlayのHttp.Contextを使うように変えました。
(Http.Contextは、1リクエストの間 生存しています。)
The text was updated successfully, but these errors were encountered: