Under https://issues.apache.org/jira/browse/ARIES-369 Valentin proposed that we perhaps should consider generalizing the parsing of bean and method elements so that they could be common when multiple interceptors are supported. I think this is perhaps a better discussion to have on the dev list rather than in a JIRA.

From Valentin:
Just a thought :)

Does it make sense to have a notion of a selector subelement that could be reused by other cross-cutting interceptors (logging, security ...)? Something like

<tx:transaction method="insert*" value="Required">
  <ic:select>
     <ic:include beanname="*Biz*" />
     <ic:include classname="*.biz.*" />
  </ic:select>
</tx>

(similar in spirit to what Ant does with filesets).




From Lin:
Thanks for the suggestion. I think it may makes sense if we start to support more than transaction interceptors. One possible could be also common out the method attribute, like

<tx:transaction value="Required">
  <ic:select>
     <ic:include method="insert*" />
     <ic:include beanId="*Biz*" />
     <ic:include classname="*.biz.*" />
  </ic:select>
</tx>


And this can apply to both top level and bean level transaction configuration, except that beanId and classname isn't supported for bean level configuration. I am not convinced why classname is needed, as it can be achieved by using the beaId.

On the other hand, if you look at our current impl, it is not hard to support another interceptor either, as we just simply need to add the bean and method attribute to the custom element. From the user's point of view, the current schema means less xml writing for the user, i.e

<tx:transaction method="insert*" bean="*Biz*" value="Required">




And now from me:
I think a change such as Valentin suggested would imply that the logic to select the appropriate bean/method/class is in the interceptor management rather than in the specific interceptor itself. That might be a good change - but it is different than what we currently have in the transactions interceptor today. The current implementation has the transaction interceptor always being invoked on every method for every bean upon which it is defined. The namespace handler determines if the interceptor should be added for a particular bean. The logic in the transaction interceptor then decides if the method is within the scope of what was defined as applicable methods. Am I reading too much into your proposal Valentin?

It would seem logical to generalize that processing out so that all interceptors could benefit by common code and logic to determine the appropriate beans and methods. But Lin has a good point that the current syntax is much more simple and backward compatible. Lin proposed that we could pull the logic for parsing and processing the bean/method attributes into some utilities. I think that might be a good compromise for now.


--
Joe

Reply via email to