<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    variable declaration and history support
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="http://community.jboss.org/people/alex.guizar%40jboss.com">Alejandro Guizar</a> in <i>jBPM Development</i> - <a href="http://community.jboss.org/message/547022#547022">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>A previous discussion touched the subject of <a class="jive-link-external-small" href="https://jira.jboss.org/browse/JBPM-2506">JBPM-2506</a>. While the proposed code looks great I noticed a particularity I wanted to discuss. ExecutionService has gained the following methods:</p><pre class="jive-pre"><code class="jive-code jive-java"><font color="darkgreen">/** creates or overwrites a variable value on the referenced execution and marks the variable to be stored in history*/</font>
<font color="navy"><b>void</b></font> setVariable(String executionId, String name, Object value, <font color="navy"><b>boolean</b></font> historyEnabled);
&#160; 
<font color="darkgreen">/** creates or overwrites the variable values on the referenced execution and marks the variables to be stored in history*/</font>
<font color="navy"><b>void</b></font> setVariables(String executionId, Map&lt;String, ?&gt; variables, <font color="navy"><b>boolean</b></font> historyEnabled);
</code></pre><p>These methods eventually reach a new overload for ScopeInstanceImpl.setVariable()</p><pre class="jive-pre"><code class="jive-code jive-java"><font color="navy"><b>public</b></font> <font color="navy"><b>void</b></font> setVariable(String key, Object value, <font color="navy"><b>boolean</b></font> historyEnabled) <font color="navy">{</font>
&#160; <font color="darkgreen">// ...</font>
&#160; <font color="navy"><b>if</b></font> (variable!=<font color="navy"><b>null</b></font>) <font color="navy">{</font>
&#160;&#160;&#160; log.debug(<font color="red">"updating variable '"</font>+key+<font color="red">"' in '"</font>+this+<font color="red">"' to value '"</font>+value+<font color="red">"'"</font>);
&#160;&#160;&#160; variable.setValue(value, <font color="navy"><b>this</b></font>);
&#160; <font color="navy">}</font> <font color="navy"><b>else</b></font> <font color="navy"><b>if</b></font> (getParentVariableScope()==<font color="navy"><b>null</b></font>) <font color="navy">{</font>
&#160;&#160;&#160; createVariable(key, value, null, historyEnabled);
&#160; <font color="navy">}</font> <font color="navy"><b>else</b></font> <font color="navy">{</font>
&#160;&#160;&#160; getParentVariableScope().setVariable(key,value, historyEnabled);
&#160; <font color="navy">}</font>
<font color="navy">}</font>
</code></pre><p>Notice that, if the variable already exists, historyEnabled is ignored. On the other hand, ExecutionService does not expose the createVariable methods of ScopeInstanceImpl. Method createVariable is sometimes useful since setVariable always tries to create the variable in the parent scope.</p><p>My proposal is to make the following additions to ExecutionService instead. This way we prevent historyEnabled from being ignored and expose useful new functionality.</p><pre class="jive-pre"><code class="jive-code jive-java"><font color="darkgreen">/** creates a variable value on the referenced execution. optionally marks the variable to be stored in history*/</font>
<font color="navy"><b>void</b></font> createVariable(String executionId, String name, Object value, <font color="navy"><b>boolean</b></font> historyEnabled);
&#160; 
<font color="darkgreen">/** creates variable values on the referenced execution. optionally marks the variables to be stored in history*/</font>
<font color="navy"><b>void</b></font> createVariables(String executionId, Map&lt;String, ?&gt; variables, <font color="navy"><b>boolean</b></font> historyEnabled);
</code></pre></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/547022#547022">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in jBPM Development at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2035">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>