[seasar-dotnet:2285] Re: Quill、DBFluteでの同一DB、複数スキーマ、同一テーブル構造での接続について
koala
[E-MAIL ADDRESS DELETED]
2013年 5月 29日 (水) 19:24:10 JST
koalaです。
> Quillで管理するコンポーネントは全て singleton です。
> アプリケーション上にインスタンスは一つとなります。
ということは、私が先で書いたやりかたでは全然ダメですね。
たまたま初めてInjectしたログインユーザーのデータソース名で
Daoインスタンスが生成されて他のユーザーにも使いまわされるので
切り替わるはずがない・・・。
そこで「AOPでSetDataSourceNameしたい」になるのですね。
*---
■動的にデータソースを切り替えるDao
<Implementation()>
<S2Dao()>
<Aspect(GetType(DataSourceInterceptor))>
<Bean(GetType(TestTable))>
Public Interface ITestTableDao
Function SelectAll() As IList(Of TestTable)
End Interface
■データソース切り替えInterceptor
Public Class DataSourceInterceptor
Inherits AbstractInterceptor
Public Sub SetDataSourceName(DataSourceName As String)
Dim container = New QuillContainer()
Dim proxy = TryCast(ComponentUtil.GetComponent(container, GetType(SelectableDataSourceProxyWithDictionary)), SelectableDataSourceProxyWithDictionary)
proxy.SetDataSourceName(DataSourceName)
End Sub
Public Overrides Function Invoke(invocation As IMethodInvocation) As Object
Dim method = invocation.Method
Call SetDataSourceName(System.Web.HttpContext.Current.Session("DataSourceName"))
Dim ret = invocation.Proceed()
Return ret
End Function
End Class
■常にログイン管理DBに接続するDao
<Implementation()>
<S2Dao(GetType(LoginDaoSetting))>
<Bean(GetType(UserTable))>
Public Interface IUserTableDao
Function SelectByPK(UserID As String) As UserTable
End Interface
---*
みようみまねなので、何かお気づきのことなどご指摘頂けると幸甚です。
以上よろしくお願いいたします。
seasar-dotnet メーリングリストの案内