[Spring.Net] Aop NHibernate Transaction失效了!

Posted by Harry Chang on July 12, 2016

今天產品發現NHibernate Session Update 失效了,查了很久發現是我們在Service Layer 的 Aop Transaction 失效了,

導致Load 出來的物件沒有被掛上Proxy ,進一步影響NHibernate 無法監控物件是否有被異動。

首先合理懷疑是Aop Pattern 有問題,檢查一下XML檔,

1
2
3
4
5
<object id="ServiceOperation" type="Spring.Aop.Support.SdkRegularExpressionMethodPointcut, Spring.Aop">
        <property name="pattern" value="Product.Domain.*.Service" />
        <property name="pattern" value="Product.Domain.Module1.*.Service" />
        <property name="pattern" value="Product.Domain.Module2.*.Service" />
      </object>

看起來很正常,仔細測試一下,發現只有在最後一個Module2 Aop才會正常,合理懷疑是下蓋上導致最後一個才有用,

查了一下多個Patterns (複數+S)應該使用以下寫法,Aop 就會正常了!

1
2
3
4
5
6
7
8
9
 <object id="ServiceOperation" type="Spring.Aop.Support.SdkRegularExpressionMethodPointcut, Spring.Aop">
        <property name="patterns">
          <list>
            <value>Product.Domain.*.Service</value>
            <value>Product.Domain.Module1.*.Service</value>
            <value>Product.Domain.Module2.*.Service</value>
          </list>
        </property>
      </object>

延伸閱讀:[NHibernate] Session Update 奇怪的寫法

參考:12. Spring AOP APIs



icon_wechat.png