You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by Adrian Crum <ad...@sandglass-software.com> on 2013/05/18 13:55:46 UTC
Re: svn commit: r1483822 - in /ofbiz/trunk/framework: base/src/org/ofbiz/base/metrics/
common/src/org/ofbiz/common/ webapp/src/org/ofbiz/webapp/control/ webtools/config/
webtools/widget/
I'm voting -1 on this commit.
Most of these modifications are not necessary and they break the design
of the metrics feature. The one change is useful - fixing the
measurement for chained requests (RequestHandler.java ). The rest of the
issues mentioned in the commit message do not need to be fixed - they
were caused by configuration errors.
-Adrian
On 5/17/2013 3:21 PM, jleroux@apache.org wrote:
> Author: jleroux
> Date: Fri May 17 14:21:02 2013
> New Revision: 1483822
>
> URL: http://svn.apache.org/r1483822
> Log:
> Improves the Metrics stats by adding a new column used only by requests. It's quite useful to measure the real (not smoothed) durations of events in notably *chained* requests.
>
> Modified:
> ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java
> ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java
> ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java
> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
> ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml
> ofbiz/trunk/framework/webtools/widget/StatsForms.xml
>
> Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java?rev=1483822&r1=1483821&r2=1483822&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java (original)
> +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java Fri May 17 14:21:02 2013
> @@ -53,6 +53,12 @@ public interface Metrics {
> */
> double getServiceRate();
>
> + /**
> + * Returns a moving average of the request rate in milliseconds. The default
> + * implementation divides the total time by the total number of events
> + */
> + double getRequestRate();
> +
> /** Returns the metric threshold. The meaning of the threshold is
> * determined by client code.
> * <p>The idea is for client code to compare {@link #getServiceRate()} to
> @@ -69,6 +75,13 @@ public interface Metrics {
> */
> void recordServiceRate(int numEvents, long time);
>
> + /**
> + * Records the request time for <code>numEvents</code> taking
> + * <code>time</code> milliseconds to be processed.
> + */
> + void recordRequestRate(int numEvents, long time);
> +
> /** Resets all metrics. */
> void reset();
> +
> }
> \ No newline at end of file
>
> Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java?rev=1483822&r1=1483821&r2=1483822&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java (original)
> +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java Fri May 17 14:21:02 2013
> @@ -144,6 +144,7 @@ public final class MetricsFactory {
> private long lastTime = System.currentTimeMillis();
> @LockedBy("this")
> private double serviceRate = 0.0;
> + private double requestRate = 0.0;
> @LockedBy("this")
> private long totalServiceTime = 0;
> @LockedBy("this")
> @@ -187,6 +188,11 @@ public final class MetricsFactory {
> }
>
> @Override
> + public synchronized double getRequestRate() {
> + return requestRate;
> + }
> +
> + @Override
> public double getThreshold() {
> return threshold;
> }
> @@ -220,9 +226,17 @@ public final class MetricsFactory {
> }
> }
>
> + public synchronized void recordRequestRate(int numEvents, long time) {
> + totalEvents += numEvents;
> + cumulativeEvents += numEvents;
> + totalServiceTime += time;
> + requestRate = totalServiceTime / cumulativeEvents;
> + }
> +
> @Override
> public synchronized void reset() {
> serviceRate = 0.0;
> + requestRate = 0.0;
> count = 0;
> lastTime = System.currentTimeMillis();
> totalEvents = totalServiceTime = cumulativeEvents = 0;
> @@ -247,6 +261,11 @@ public final class MetricsFactory {
> }
>
> @Override
> + public double getRequestRate() {
> + return 0;
> + }
> +
> + @Override
> public double getThreshold() {
> return 0.0;
> }
> @@ -261,6 +280,10 @@ public final class MetricsFactory {
> }
>
> @Override
> + public void recordRequestRate(int numEvents, long time) {
> + }
> +
> + @Override
> public void reset() {
> }
> }
>
> Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java?rev=1483822&r1=1483821&r2=1483822&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java (original)
> +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java Fri May 17 14:21:02 2013
> @@ -552,6 +552,7 @@ public class CommonServices {
> Map<String, Object> metricsMap = FastMap.newInstance();
> metricsMap.put("name", metrics.getName());
> metricsMap.put("serviceRate", metrics.getServiceRate());
> + metricsMap.put("requestRate", metrics.getRequestRate());
> metricsMap.put("threshold", metrics.getThreshold());
> metricsMap.put("totalEvents", metrics.getTotalEvents());
> metricsMapList.add(metricsMap);
>
> Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java?rev=1483822&r1=1483821&r2=1483822&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java (original)
> +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java Fri May 17 14:21:02 2013
> @@ -109,6 +109,7 @@ public class RequestHandler {
> GenericValue userLogin, Delegator delegator) throws RequestHandlerException, RequestHandlerExceptionAllowExternalRequests {
>
> long startTime = System.currentTimeMillis();
> + int numEvent = 1;
> HttpSession session = request.getSession();
>
> // get the controllerConfig once for this method so we don't have to get it over and over inside the method
> @@ -421,6 +422,11 @@ public class RequestHandler {
> ServerHitBin.countEvent(cname + "." + requestMap.event.invoke, request, eventStartTime,
> System.currentTimeMillis() - eventStartTime, userLogin);
> }
> + if (requestMap.metrics != null) {
> + requestMap.metrics.recordRequestRate(numEvent, System.currentTimeMillis() - eventStartTime);
> + numEvent = 0;
> + }
> +
>
> // set the default event return
> if (eventReturn == null) {
> @@ -676,7 +682,7 @@ public class RequestHandler {
> }
> }
> if (requestMap.metrics != null) {
> - requestMap.metrics.recordServiceRate(1, System.currentTimeMillis() - startTime);
> + requestMap.metrics.recordServiceRate(numEvent, System.currentTimeMillis() - startTime);
> }
> }
>
>
> Modified: ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml?rev=1483822&r1=1483821&r2=1483822&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml (original)
> +++ ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml Fri May 17 14:21:02 2013
> @@ -3405,8 +3405,13 @@
> <value xml:lang="ja">ã¡ããªãã¯ã¹</value>
> <value xml:lang="zh">度é</value>
> </property>
> - <property key="WebtoolsMetricsRate">
> + <property key="WebtoolsMetricsRequestRate">
> + <value xml:lang="en">Request/Event Rate (mS)</value>
> + <value xml:lang="fr">Durée des requêtes/évènements (mS)</value>
> + </property>
> + <property key="WebtoolsMetricsServiceRate">
> <value xml:lang="en">Service Rate (mS)</value>
> + <value xml:lang="fr">Durée des Services (mS)</value>
> <value xml:lang="ja">ãµã¼ãã¹ã¬ã¼ã(ããªç§)</value>
> <value xml:lang="zh">æå¡éçï¼æ¯«ç§ï¼</value>
> </property>
> @@ -5053,7 +5058,7 @@
> <property key="WebtoolsStatsNoRequests">
> <value xml:lang="de">Es wurden keine Anfragestatistiken gefunden.</value>
> <value xml:lang="en">No Request statistics found.</value>
> - <value xml:lang="fr">Aucune requêt de statistiques trouvée</value>
> + <value xml:lang="fr">Aucune requête de statistiques trouvée</value>
> <value xml:lang="it">Nessuna statistica delle request trovata.</value>
> <value xml:lang="ja">ãªã¯ã¨ã¹ãçµ±è¨ã¯ããã¾ãã</value>
> <value xml:lang="pt">Nenhum pedido de estatÃÂsticas encontrado.</value>
>
> Modified: ofbiz/trunk/framework/webtools/widget/StatsForms.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/widget/StatsForms.xml?rev=1483822&r1=1483821&r2=1483822&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/webtools/widget/StatsForms.xml (original)
> +++ ofbiz/trunk/framework/webtools/widget/StatsForms.xml Fri May 17 14:21:02 2013
> @@ -49,13 +49,14 @@ under the License.
> <form name="ListMetrics" type="list" list-name="metricsList" paginate-target="ViewMetrics"
> header-row-style="header-row-2" default-table-style="basic-table light-grid">
> <actions>
> - <service service-name="getAllMetrics" />
> - </actions>
> - <field name="name" title="${uiLabelMap.CommonName}"><display/></field>
> - <field name="serviceRate" title="${uiLabelMap.WebtoolsMetricsRate}"><display/></field>
> - <field name="threshold" title="${uiLabelMap.WebtoolsMetricsThreshold}"><display/></field>
> - <field name="totalEvents" title="${uiLabelMap.WebtoolsMetricsTotalEvents}"><display/></field>
> - <field name="resetMetric" title=" " widget-area-style="button-col">
> + <service service-name="getAllMetrics" />
> + </actions>
> + <field name="name" title="${uiLabelMap.CommonName}"><display/></field>
> + <field name="serviceRate" title="${uiLabelMap.WebtoolsMetricsServiceRate}"><display/></field>
> + <field name="requestRate" title="${uiLabelMap.WebtoolsMetricsRequestRate}"><display/></field>
> + <field name="threshold" title="${uiLabelMap.WebtoolsMetricsThreshold}"><display/></field>
> + <field name="totalEvents" title="${uiLabelMap.WebtoolsMetricsTotalEvents}"><display/></field>
> + <field name="resetMetric" title=" " widget-area-style="button-col">
> <hyperlink description="${uiLabelMap.CommonReset}" target="ResetMetric">
> <parameter param-name="name"/>
> </hyperlink>
>
>
Re: svn commit: r1483822 - in /ofbiz/trunk/framework:
base/src/org/ofbiz/base/metrics/ common/src/org/ofbiz/common/
webapp/src/org/ofbiz/webapp/control/ webtools/config/ webtools/widget/
Posted by Jacques Le Roux <ja...@les7arts.com>.
OK, Then I let you revert it and implement the measurement for chained requests
Jacques
From: "Adrian Crum" <ad...@sandglass-software.com>
> I'm voting -1 on this commit.
>
> Most of these modifications are not necessary and they break the design
> of the metrics feature. The one change is useful - fixing the
> measurement for chained requests (RequestHandler.java ). The rest of the
> issues mentioned in the commit message do not need to be fixed - they
> were caused by configuration errors.
>
> -Adrian
>
> On 5/17/2013 3:21 PM, jleroux@apache.org wrote:
>> Author: jleroux
>> Date: Fri May 17 14:21:02 2013
>> New Revision: 1483822
>>
>> URL: http://svn.apache.org/r1483822
>> Log:
>> Improves the Metrics stats by adding a new column used only by requests. It's quite useful to measure the real (not smoothed) durations of events in notably *chained* requests.
>>
>> Modified:
>> ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java
>> ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java
>> ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java
>> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
>> ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml
>> ofbiz/trunk/framework/webtools/widget/StatsForms.xml
>>
>> Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java?rev=1483822&r1=1483821&r2=1483822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java (original)
>> +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java Fri May 17 14:21:02 2013
>> @@ -53,6 +53,12 @@ public interface Metrics {
>> */
>> double getServiceRate();
>>
>> + /**
>> + * Returns a moving average of the request rate in milliseconds. The default
>> + * implementation divides the total time by the total number of events
>> + */
>> + double getRequestRate();
>> +
>> /** Returns the metric threshold. The meaning of the threshold is
>> * determined by client code.
>> * <p>The idea is for client code to compare {@link #getServiceRate()} to
>> @@ -69,6 +75,13 @@ public interface Metrics {
>> */
>> void recordServiceRate(int numEvents, long time);
>>
>> + /**
>> + * Records the request time for <code>numEvents</code> taking
>> + * <code>time</code> milliseconds to be processed.
>> + */
>> + void recordRequestRate(int numEvents, long time);
>> +
>> /** Resets all metrics. */
>> void reset();
>> +
>> }
>> \ No newline at end of file
>>
>> Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java?rev=1483822&r1=1483821&r2=1483822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java (original)
>> +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java Fri May 17 14:21:02 2013
>> @@ -144,6 +144,7 @@ public final class MetricsFactory {
>> private long lastTime = System.currentTimeMillis();
>> @LockedBy("this")
>> private double serviceRate = 0.0;
>> + private double requestRate = 0.0;
>> @LockedBy("this")
>> private long totalServiceTime = 0;
>> @LockedBy("this")
>> @@ -187,6 +188,11 @@ public final class MetricsFactory {
>> }
>>
>> @Override
>> + public synchronized double getRequestRate() {
>> + return requestRate;
>> + }
>> +
>> + @Override
>> public double getThreshold() {
>> return threshold;
>> }
>> @@ -220,9 +226,17 @@ public final class MetricsFactory {
>> }
>> }
>>
>> + public synchronized void recordRequestRate(int numEvents, long time) {
>> + totalEvents += numEvents;
>> + cumulativeEvents += numEvents;
>> + totalServiceTime += time;
>> + requestRate = totalServiceTime / cumulativeEvents;
>> + }
>> +
>> @Override
>> public synchronized void reset() {
>> serviceRate = 0.0;
>> + requestRate = 0.0;
>> count = 0;
>> lastTime = System.currentTimeMillis();
>> totalEvents = totalServiceTime = cumulativeEvents = 0;
>> @@ -247,6 +261,11 @@ public final class MetricsFactory {
>> }
>>
>> @Override
>> + public double getRequestRate() {
>> + return 0;
>> + }
>> +
>> + @Override
>> public double getThreshold() {
>> return 0.0;
>> }
>> @@ -261,6 +280,10 @@ public final class MetricsFactory {
>> }
>>
>> @Override
>> + public void recordRequestRate(int numEvents, long time) {
>> + }
>> +
>> + @Override
>> public void reset() {
>> }
>> }
>>
>> Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java?rev=1483822&r1=1483821&r2=1483822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java (original)
>> +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java Fri May 17 14:21:02 2013
>> @@ -552,6 +552,7 @@ public class CommonServices {
>> Map<String, Object> metricsMap = FastMap.newInstance();
>> metricsMap.put("name", metrics.getName());
>> metricsMap.put("serviceRate", metrics.getServiceRate());
>> + metricsMap.put("requestRate", metrics.getRequestRate());
>> metricsMap.put("threshold", metrics.getThreshold());
>> metricsMap.put("totalEvents", metrics.getTotalEvents());
>> metricsMapList.add(metricsMap);
>>
>> Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java?rev=1483822&r1=1483821&r2=1483822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java (original)
>> +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java Fri May 17 14:21:02 2013
>> @@ -109,6 +109,7 @@ public class RequestHandler {
>> GenericValue userLogin, Delegator delegator) throws RequestHandlerException, RequestHandlerExceptionAllowExternalRequests {
>>
>> long startTime = System.currentTimeMillis();
>> + int numEvent = 1;
>> HttpSession session = request.getSession();
>>
>> // get the controllerConfig once for this method so we don't have to get it over and over inside the method
>> @@ -421,6 +422,11 @@ public class RequestHandler {
>> ServerHitBin.countEvent(cname + "." + requestMap.event.invoke, request, eventStartTime,
>> System.currentTimeMillis() - eventStartTime, userLogin);
>> }
>> + if (requestMap.metrics != null) {
>> + requestMap.metrics.recordRequestRate(numEvent, System.currentTimeMillis() - eventStartTime);
>> + numEvent = 0;
>> + }
>> +
>>
>> // set the default event return
>> if (eventReturn == null) {
>> @@ -676,7 +682,7 @@ public class RequestHandler {
>> }
>> }
>> if (requestMap.metrics != null) {
>> - requestMap.metrics.recordServiceRate(1, System.currentTimeMillis() - startTime);
>> + requestMap.metrics.recordServiceRate(numEvent, System.currentTimeMillis() - startTime);
>> }
>> }
>>
>>
>> Modified: ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml?rev=1483822&r1=1483821&r2=1483822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml (original)
>> +++ ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml Fri May 17 14:21:02 2013
>> @@ -3405,8 +3405,13 @@
>> <value xml:lang="ja">ã¡ããªãã¯ã¹</value>
>> <value xml:lang="zh">度é</value>
>> </property>
>> - <property key="WebtoolsMetricsRate">
>> + <property key="WebtoolsMetricsRequestRate">
>> + <value xml:lang="en">Request/Event Rate (mS)</value>
>> + <value xml:lang="fr">Durée des requêtes/évènements (mS)</value>
>> + </property>
>> + <property key="WebtoolsMetricsServiceRate">
>> <value xml:lang="en">Service Rate (mS)</value>
>> + <value xml:lang="fr">Durée des Services (mS)</value>
>> <value xml:lang="ja">ãµã¼ãã¹ã¬ã¼ã(ããªç§)</value>
>> <value xml:lang="zh">æå¡éçï¼æ¯«ç§ï¼</value>
>> </property>
>> @@ -5053,7 +5058,7 @@
>> <property key="WebtoolsStatsNoRequests">
>> <value xml:lang="de">Es wurden keine Anfragestatistiken gefunden.</value>
>> <value xml:lang="en">No Request statistics found.</value>
>> - <value xml:lang="fr">Aucune requêt de statistiques trouvée</value>
>> + <value xml:lang="fr">Aucune requête de statistiques trouvée</value>
>> <value xml:lang="it">Nessuna statistica delle request trovata.</value>
>> <value xml:lang="ja">ãªã¯ã¨ã¹ãçµ±è¨ã¯ããã¾ãã</value>
>> <value xml:lang="pt">Nenhum pedido de estatÃÂsticas encontrado.</value>
>>
>> Modified: ofbiz/trunk/framework/webtools/widget/StatsForms.xml
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/widget/StatsForms.xml?rev=1483822&r1=1483821&r2=1483822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/framework/webtools/widget/StatsForms.xml (original)
>> +++ ofbiz/trunk/framework/webtools/widget/StatsForms.xml Fri May 17 14:21:02 2013
>> @@ -49,13 +49,14 @@ under the License.
>> <form name="ListMetrics" type="list" list-name="metricsList" paginate-target="ViewMetrics"
>> header-row-style="header-row-2" default-table-style="basic-table light-grid">
>> <actions>
>> - <service service-name="getAllMetrics" />
>> - </actions>
>> - <field name="name" title="${uiLabelMap.CommonName}"><display/></field>
>> - <field name="serviceRate" title="${uiLabelMap.WebtoolsMetricsRate}"><display/></field>
>> - <field name="threshold" title="${uiLabelMap.WebtoolsMetricsThreshold}"><display/></field>
>> - <field name="totalEvents" title="${uiLabelMap.WebtoolsMetricsTotalEvents}"><display/></field>
>> - <field name="resetMetric" title=" " widget-area-style="button-col">
>> + <service service-name="getAllMetrics" />
>> + </actions>
>> + <field name="name" title="${uiLabelMap.CommonName}"><display/></field>
>> + <field name="serviceRate" title="${uiLabelMap.WebtoolsMetricsServiceRate}"><display/></field>
>> + <field name="requestRate" title="${uiLabelMap.WebtoolsMetricsRequestRate}"><display/></field>
>> + <field name="threshold" title="${uiLabelMap.WebtoolsMetricsThreshold}"><display/></field>
>> + <field name="totalEvents" title="${uiLabelMap.WebtoolsMetricsTotalEvents}"><display/></field>
>> + <field name="resetMetric" title=" " widget-area-style="button-col">
>> <hyperlink description="${uiLabelMap.CommonReset}" target="ResetMetric">
>> <parameter param-name="name"/>
>> </hyperlink>
>>
>>
>