[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 メーリングリストの案内