<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.opentaps.org/docs/index.php?action=history&amp;feed=atom&amp;title=Aspect_Oriented_Programming_in_opentaps</id>
	<title>Aspect Oriented Programming in opentaps - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://docs.opentaps.org/docs/index.php?action=history&amp;feed=atom&amp;title=Aspect_Oriented_Programming_in_opentaps"/>
	<link rel="alternate" type="text/html" href="https://docs.opentaps.org/docs/index.php?title=Aspect_Oriented_Programming_in_opentaps&amp;action=history"/>
	<updated>2026-05-15T16:21:38Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.32.1</generator>
	<entry>
		<id>https://docs.opentaps.org/docs/index.php?title=Aspect_Oriented_Programming_in_opentaps&amp;diff=4082&amp;oldid=prev</id>
		<title>Sichen at 01:10, 21 July 2009</title>
		<link rel="alternate" type="text/html" href="https://docs.opentaps.org/docs/index.php?title=Aspect_Oriented_Programming_in_opentaps&amp;diff=4082&amp;oldid=prev"/>
		<updated>2009-07-21T01:10:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 01:10, 21 July 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l62&quot; &gt;Line 62:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 62:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                                                                  paramMap, paramBoolean1, paramBoolean2, this);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                                                                  paramMap, paramBoolean1, paramBoolean2, this);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   }&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Note that when you need to define aspect advice for  methods, &amp;lt;tt&amp;gt;Public&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Private&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;Protected&amp;lt;/tt&amp;gt;  need to be capitalized and. They cannot be written as public, private, or protected.   For example, for &amp;lt;tt&amp;gt;TestRunContainerProfiling.java&amp;lt;/tt&amp;gt;,  the correct definition is:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    /**&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;     * Pointcut testRunContainerStart is pointcut to TestRunContainer.start.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;     * @Expression execution(Public boolean org.ofbiz.testtools.TestRunContainer.start(..))&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;     */&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    Pointcut testRunContainerStart;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Other References ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Other References ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://onjava.com/pub/a/onjava/2004/01/14/aop.html  Introduction to Aspect Oriented Programming]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://onjava.com/pub/a/onjava/2004/01/14/aop.html  Introduction to Aspect Oriented Programming]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://www.ibm.com/developerworks/rational/library/2782.html  A Look at Aspect Oriented Programming]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://www.ibm.com/developerworks/rational/library/2782.html  A Look at Aspect Oriented Programming]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Sichen</name></author>
		
	</entry>
	<entry>
		<id>https://docs.opentaps.org/docs/index.php?title=Aspect_Oriented_Programming_in_opentaps&amp;diff=4081&amp;oldid=prev</id>
		<title>Sichen at 00:57, 21 July 2009</title>
		<link rel="alternate" type="text/html" href="https://docs.opentaps.org/docs/index.php?title=Aspect_Oriented_Programming_in_opentaps&amp;diff=4081&amp;oldid=prev"/>
		<updated>2009-07-21T00:57:59Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 00:57, 21 July 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l52&quot; &gt;Line 52:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 52:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;jar jarfile=&amp;quot;${ofbiz.dir}/framework/entity/build/lib/ofbiz-entity.jar&amp;quot; update=&amp;quot;true&amp;quot;  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;jar jarfile=&amp;quot;${ofbiz.dir}/framework/entity/build/lib/ofbiz-entity.jar&amp;quot; update=&amp;quot;true&amp;quot;  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       basedir=&amp;quot;${build.dir}/classes/&amp;quot; includes=&amp;quot;META-INF/aop.xml&amp;quot; /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       basedir=&amp;quot;${build.dir}/classes/&amp;quot; includes=&amp;quot;META-INF/aop.xml&amp;quot; /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;If you use a Java decompiler to reconstruct the source code from your jar file, you might see something like this:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; protected void evalEcaRules(String paramString1, String paramString2, GenericEntity paramGenericEntity, &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;                             Map paramMap, boolean paramBoolean1, boolean paramBoolean2)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    throws GenericEntityException&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    GenericDelegator_1_20389545_1395125462___AW_JoinPoint.invoke(this, paramString1, paramString2, paramGenericEntity, &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;                                                                 paramMap, paramBoolean1, paramBoolean2, this);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Other References ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Other References ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://onjava.com/pub/a/onjava/2004/01/14/aop.html  Introduction to Aspect Oriented Programming]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://onjava.com/pub/a/onjava/2004/01/14/aop.html  Introduction to Aspect Oriented Programming]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://www.ibm.com/developerworks/rational/library/2782.html  A Look at Aspect Oriented Programming]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://www.ibm.com/developerworks/rational/library/2782.html  A Look at Aspect Oriented Programming]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Sichen</name></author>
		
	</entry>
	<entry>
		<id>https://docs.opentaps.org/docs/index.php?title=Aspect_Oriented_Programming_in_opentaps&amp;diff=4075&amp;oldid=prev</id>
		<title>Sichen at 00:48, 21 July 2009</title>
		<link rel="alternate" type="text/html" href="https://docs.opentaps.org/docs/index.php?title=Aspect_Oriented_Programming_in_opentaps&amp;diff=4075&amp;oldid=prev"/>
		<updated>2009-07-21T00:48:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 00:48, 21 July 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;opentaps uses [http://en.wikipedia.org/wiki/Aspect-oriented_programming  aspect oriented programming] (AOP)  to interact with  pre-existing ofbiz code and enhance its behavior.   For example, we have inserted an aspect &amp;quot;advice&amp;quot;  to the ofbiz entity engine's delegator  so that the data is stored will be indexed for [[opentaps Search Feature|opentaps search]].  You can also use AOP yourself to alter the behavior  of opentaps code to meet your needs.    &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;opentaps uses [http://en.wikipedia.org/wiki/Aspect-oriented_programming  aspect oriented programming] (AOP)  to interact with  pre-existing ofbiz code and enhance its behavior.   For example, we have inserted an aspect &amp;quot;advice&amp;quot;  to the ofbiz entity engine's delegator  so that the data is stored will be indexed for [[opentaps Search Feature|opentaps search]].  You can also use AOP yourself to alter the behavior  of opentaps code to meet your needs.    &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;With opentaps 1.0.5 and later, including opentaps 1.4, [http://aspectwerkz.codehaus.org/ AspectWerkz]  is used to support aspect oriented programming.  (opentaps 1.0.0 through 1.0.4 used [http://www.eclipse.org/aspectj/ AspectJ],  and you can find more information about it in [Understanding AspectJ]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;With opentaps 1.0.5 and later, including opentaps 1.4, [http://aspectwerkz.codehaus.org/ AspectWerkz]  is used to support aspect oriented programming.  (opentaps 1.0.0 through 1.0.4 used [http://www.eclipse.org/aspectj/ AspectJ],  and you can find more information about it in &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[&lt;/ins&gt;[Understanding AspectJ&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]&lt;/ins&gt;]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;AspectWerkz allows you to define your AOP advice in Java using annotations.   For example, in &amp;lt;tt&amp;gt;IndexForDelegatorAspects&amp;lt;/tt&amp;gt; class,  we define the following point cut for the ofbiz delegator:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;AspectWerkz allows you to define your AOP advice in Java using annotations.   For example, in &amp;lt;tt&amp;gt;IndexForDelegatorAspects&amp;lt;/tt&amp;gt; class,  we define the following point cut for the ofbiz delegator:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Sichen</name></author>
		
	</entry>
	<entry>
		<id>https://docs.opentaps.org/docs/index.php?title=Aspect_Oriented_Programming_in_opentaps&amp;diff=4074&amp;oldid=prev</id>
		<title>Sichen: Protected &quot;Aspect Oriented Programming in opentaps&quot;: Sysop page [edit=sysop:move=sysop]</title>
		<link rel="alternate" type="text/html" href="https://docs.opentaps.org/docs/index.php?title=Aspect_Oriented_Programming_in_opentaps&amp;diff=4074&amp;oldid=prev"/>
		<updated>2009-07-21T00:46:49Z</updated>

		<summary type="html">&lt;p&gt;Protected &amp;quot;&lt;a href=&quot;/docs/index.php?title=Aspect_Oriented_Programming_in_opentaps&quot; title=&quot;Aspect Oriented Programming in opentaps&quot;&gt;Aspect Oriented Programming in opentaps&lt;/a&gt;&amp;quot;: Sysop page [edit=sysop:move=sysop]&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 00:46, 21 July 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sichen</name></author>
		
	</entry>
	<entry>
		<id>https://docs.opentaps.org/docs/index.php?title=Aspect_Oriented_Programming_in_opentaps&amp;diff=4073&amp;oldid=prev</id>
		<title>Sichen: New page: opentaps uses [http://en.wikipedia.org/wiki/Aspect-oriented_programming  aspect oriented programming] (AOP)  to interact with  pre-existing ofbiz code and enhance its behavior.   For examp...</title>
		<link rel="alternate" type="text/html" href="https://docs.opentaps.org/docs/index.php?title=Aspect_Oriented_Programming_in_opentaps&amp;diff=4073&amp;oldid=prev"/>
		<updated>2009-07-21T00:46:48Z</updated>

		<summary type="html">&lt;p&gt;New page: opentaps uses [http://en.wikipedia.org/wiki/Aspect-oriented_programming  aspect oriented programming] (AOP)  to interact with  pre-existing ofbiz code and enhance its behavior.   For examp...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;opentaps uses [http://en.wikipedia.org/wiki/Aspect-oriented_programming  aspect oriented programming] (AOP)  to interact with  pre-existing ofbiz code and enhance its behavior.   For example, we have inserted an aspect &amp;quot;advice&amp;quot;  to the ofbiz entity engine's delegator  so that the data is stored will be indexed for [[opentaps Search Feature|opentaps search]].  You can also use AOP yourself to alter the behavior  of opentaps code to meet your needs.   &lt;br /&gt;
&lt;br /&gt;
With opentaps 1.0.5 and later, including opentaps 1.4, [http://aspectwerkz.codehaus.org/ AspectWerkz]  is used to support aspect oriented programming.  (opentaps 1.0.0 through 1.0.4 used [http://www.eclipse.org/aspectj/ AspectJ],  and you can find more information about it in [Understanding AspectJ]&lt;br /&gt;
&lt;br /&gt;
AspectWerkz allows you to define your AOP advice in Java using annotations.   For example, in &amp;lt;tt&amp;gt;IndexForDelegatorAspects&amp;lt;/tt&amp;gt; class,  we define the following point cut for the ofbiz delegator:&lt;br /&gt;
 /**&lt;br /&gt;
  * @Expression execution(* org.ofbiz.entity.GenericDelegator.evalEcaRules(..)) &amp;amp;&amp;amp; &lt;br /&gt;
                args(event, currentOperation, value, eventMap, noEventMapFound, isError)&lt;br /&gt;
  */&lt;br /&gt;
 void pointcut(String event, String currentOperation, GenericEntity value, Map eventMap, boolean noEventMapFound, boolean isError) {}&lt;br /&gt;
&lt;br /&gt;
This basically defines a point cut for the&lt;br /&gt;
    protected void evalEcaRules(String event, String currentOperation, GenericEntity value, &lt;br /&gt;
                                Map eventMap, boolean noEventMapFound, boolean isError) throws GenericEntityException {&lt;br /&gt;
&lt;br /&gt;
method of the delegator.  Then,  we define this method to be executed after the pointcut:&lt;br /&gt;
   /**&lt;br /&gt;
    * @After pointcut(event, currentOperation, value, eventMap, noEventMapFound, isError)&lt;br /&gt;
    */&lt;br /&gt;
    public void createIndexForEca(String event, String currentOperation, GenericEntity value, &lt;br /&gt;
                                  Map eventMap, boolean noEventMapFound, boolean isError) {&lt;br /&gt;
&lt;br /&gt;
which means that &amp;lt;tt&amp;gt;createIndexForEca&amp;lt;/tt&amp;gt;  will be run after &amp;lt;tt&amp;gt;evalEcaRules&amp;lt;/tt&amp;gt;  is run.&lt;br /&gt;
 &lt;br /&gt;
These aspects are then configured in the file &amp;lt;tt&amp;gt;hot-deploy/opentaps-common/config/aop-ecas.xml&amp;lt;/tt&amp;gt;:&lt;br /&gt;
  &amp;lt;aspectwerkz&amp;gt;&lt;br /&gt;
    &amp;lt;system id=&amp;quot;aspectwerkz&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;aspect class=&amp;quot;org.opentaps.aspect.secas.CommonServiceAspects&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;aspect class=&amp;quot;org.opentaps.aspect.secas.IndexForDelegatorAspects&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
During build time, the main &amp;lt;tt&amp;gt;build.xml&amp;lt;/tt&amp;gt;  invokes &amp;lt;tt&amp;gt;build-aspects.xml&amp;lt;/tt&amp;gt;:&lt;br /&gt;
    &amp;lt;subant inheritall=&amp;quot;false&amp;quot; failonerror=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;filelist dir=&amp;quot;.&amp;quot; files=&amp;quot;hot-deploy/opentaps-common/build-aspects.xml&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subant&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This in turn modifies the target jar file.   For example:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;java classname=&amp;quot;org.codehaus.aspectwerkz.compiler.AspectWerkzC&amp;quot; fork=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;jvmarg value=&amp;quot;-Daspectwerkz.definition.file=${aopConfig}&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;jvmarg value=&amp;quot;-Daspectwerkz.transform.filter=no&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;arg value=&amp;quot;-verify&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;arg value=&amp;quot;-verbose&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;classpath refid=&amp;quot;local.class.path&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;classpath&amp;gt;&lt;br /&gt;
        &amp;lt;pathelement path=&amp;quot;${build.dir}/classes/common&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/classpath&amp;gt;&lt;br /&gt;
     &amp;lt;!-- below is the jars to post-process --&amp;gt;    &lt;br /&gt;
     &amp;lt;arg value=&amp;quot;${ofbiz.dir}/framework/entity/build/lib/ofbiz-entity.jar&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
weaves the advice codes to ofbiz-entity.jar and add aop.xml into ofbiz-entity.jar in this line.&lt;br /&gt;
 &amp;lt;jar jarfile=&amp;quot;${ofbiz.dir}/framework/entity/build/lib/ofbiz-entity.jar&amp;quot; update=&amp;quot;true&amp;quot; &lt;br /&gt;
      basedir=&amp;quot;${build.dir}/classes/&amp;quot; includes=&amp;quot;META-INF/aop.xml&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other References ==&lt;br /&gt;
* [http://onjava.com/pub/a/onjava/2004/01/14/aop.html  Introduction to Aspect Oriented Programming]&lt;br /&gt;
* [http://www.ibm.com/developerworks/rational/library/2782.html  A Look at Aspect Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Sichen</name></author>
		
	</entry>
</feed>