<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>dojax</title>
    <description></description>
    <link>http://dojax.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>after-throwing   捕获   分布式事务异常的   疑问</title>
        <author>dojax</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dojax.javaeye.com">dojax</a>&nbsp;
          链接：<a href="http://dojax.javaeye.com/blog/165618" style="color:red;">http://dojax.javaeye.com/blog/165618</a>&nbsp;
          发表时间: 2008年02月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          项目采用   三层结构   用到了分布式事务，包裹的是services层的方法，相关配置如下： <br />    <pre name="code" class="java">
    &lt;bean   id="abstractTransactionProxy"   abstract="true" 
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
        &lt;property   name="transactionManager"> 
            &lt;ref   bean="transactionManager"/> 
        &lt;/property> 

        &lt;property   name="transactionAttributes"> 
            &lt;props> 
                &lt;prop   key="find*"> PROPAGATION_REQUIRED,readOnly,-OrderException &lt;/prop> 
                &lt;prop   key="get*"> PROPAGATION_REQUIRED,readOnly,-OrderException &lt;/prop> 
                &lt;prop   key="save*"> PROPAGATION_REQUIRED,-OrderException,-OrderMinimumAmountException &lt;/prop> 
                &lt;prop   key="add*"> PROPAGATION_REQUIRED,-OrderException,-OrderMinimumAmountException &lt;/prop> 
                &lt;prop   key="del*"> PROPAGATION_REQUIRED,-OrderException,-OrderMinimumAmountException &lt;/prop> 
                &lt;prop   key="remove*"> PROPAGATION_REQUIRED,-OrderException,-OrderMinimumAmountException &lt;/prop> 
            &lt;/props> 
        &lt;/property> 
    &lt;/bean> 


    &lt;bean   id="ocsServices" 
        class="services.OcsServices"> 
        &lt;property   name="smp"> 
            &lt;ref   bean="hqlExecutor1"/> 
        &lt;/property> 
        &lt;property   name="daoScpList"> 
            &lt;list> 
                &lt;ref   bean="hqlExecutor1"/> 
                &lt;ref   bean="hqlExecutor2"/> 
            &lt;/list> 
        &lt;/property> 
    &lt;/bean> 

    &lt;bean   id="ocsconfigService"   parent="abstractTransactionProxy"> 
        &lt;property   name="target"> 
            &lt;ref   bean="ocsServices"/> 
        &lt;/property> 
    &lt;/bean> 

    &lt;aop:config> 
        &lt;aop:aspect   id="prefixAspect4"   ref="logInterceptor"> 
            &lt;aop:pointcut   id="prefixPointCut4" 
                  expression="execution(*   services.OcsServices.add(Object))   and   args(Object)"   /> 
            &lt;aop:after-throwing 
                      pointcut-ref="prefixPointCut4"   method="afterThrowing" 
                      throwing="dataAccessException"/> 
        &lt;/aop:aspect> 
    &lt;/aop:config> 

    &lt;bean   id="logInterceptor"   class="aop.LogAop"> 
    &lt;/bean> 

    &lt;bean   id="prefixController"   class="mvc.PrefixController"> 
        ........ 
        &lt;!-- 
              将ocsconfig-service中配置的ocsServices注入。 
        --> 
        &lt;property   name="ocsServices"> 
            &lt;ref   bean="ocsconfigService"/> 
        &lt;/property> 
        &lt;!-- 
              设置controller可以转发的页面。 
        --> 
        ..... 
    &lt;/bean> 
</pre><br />目前的想法就是希望 &lt;aop:aspect   id="prefixAspect4"   ref="logInterceptor"> 能捕获提交事务时如果出现异常能捕获这个异常，并记录日志说明执行这个操作没有成功，但是自己的测试却是afterThrowing方法不会执行，而其他的after，afterreturn等都可以正常工作。 <br />下面是class   OcsServices的add方法 <br /><pre name="code" class="java">
        public   void   add(Object   o) 
        { 
                Prefix   oo   =   (Prefix)o; 

                Iterator   it   =     this.getDaoScpList().iterator(); 
                while(it.hasNext()) 
                { 
                        IPrefixDao   ipd   =   (IPrefixDao)it.next(); 
                        ipd.savePrefix(oo); 
                } 
        } 

</pre><br />希望各位大大能指导指导，是否是设计就有问题还是哪个配置不正确。谢谢
          <br/><br/>
          <span style="color:red;">
            <a href="http://dojax.javaeye.com/blog/165618#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 28 Feb 2008 08:35:38 +0800</pubDate>
        <link>http://dojax.javaeye.com/blog/165618</link>
        <guid>http://dojax.javaeye.com/blog/165618</guid>
      </item>
      <item>
        <title>Schema-based AOP的配置问题 </title>
        <author>dojax</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dojax.javaeye.com">dojax</a>&nbsp;
          链接：<a href="http://dojax.javaeye.com/blog/163669" style="color:red;">http://dojax.javaeye.com/blog/163669</a>&nbsp;
          发表时间: 2008年02月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          目前正在开发应用了Schema-based   AOP的项目，一直用在参考《spring开发参考手册》         在配置AOP的时候发现一些问题: <br />配置文件如下： <br />  &lt;aop:aspect   id="prefixAspect3"   ref="logInterceptor"> <br />      &lt;aop:pointcut   id="prefixPointCutQuery" <br />                expression="execution(*   services.OcsServices.query(Object,   int,   int))   and   args(Object,   int,   int)"   /> <br />            &lt;!-- <br />            &lt;aop:pointcut   id="prefixPointCutQuery" <br />                  expression="execution(*   services.OcsServices.query(Object,   int,   int))   and   args(o,   page,   perpage)"   />             <br />            -->   <br /><br />            &lt;aop:after-returning <br />                  pointcut-ref="prefixPointCutQuery" <br />                  returning="retVal" <br />                  method="afterAddReturn"/> <br />        &lt;/aop:aspect>         <br />    &lt;/aop:config> <br /><br />services.OcsServices.query方法如下： <br />public List query(Object   o,   int   page,   int   perpage){ <br />      .... <br />} <br /><br />LogAop的afterAddReturn方法如下： <br />public   void   afterAddReturn(Object   retVal){ <br />        System.out.println(retVal); <br />} <br /><br />如果按照参考手册的例子来，expression="execution(* services.OcsServices.query(Object, int,   int)) and args(o, page, perpage)"才是正确的配置，但是实际情况是这样配置，将报错aop warning no  match for this type name o <br />而如果用expression="execution(* services.OcsServices.query(Object, int, int)) and args(Object, int, int)"则能正确使用aop， 不知这是什么原因? <br /><br />还希望大大们能指导指导，谢谢
          <br/><br/>
          <span style="color:red;">
            <a href="http://dojax.javaeye.com/blog/163669#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Feb 2008 16:41:13 +0800</pubDate>
        <link>http://dojax.javaeye.com/blog/163669</link>
        <guid>http://dojax.javaeye.com/blog/163669</guid>
      </item>
  </channel>
</rss>