<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic HistoricProcessInstanceQuery statefull invocations in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/historicprocessinstancequery-statefull-invocations/m-p/194467#M147597</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;This remark is related to&amp;nbsp; &lt;/SPAN&gt;&lt;A href="http://forums.activiti.org/en/viewtopic.php?f=3&amp;amp;t=593" rel="nofollow noopener noreferrer"&gt;http://forums.activiti.org/en/viewtopic.php?f=3&amp;amp;t=593&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I was trying to reuse a created processInstanceQuery on activiti 5.16.3.&amp;nbsp; I assumed that finished and unfinished are each other opposites, just like deleted and notDeleted seem to be be each other opposites. So I expected that the code below &lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;final HistoricProcessInstanceQuery processQuery = createQuery(procesDefinitionKey);&lt;BR /&gt;for (int i = 0; i &amp;lt; 3; i++) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Check[" + i + "] There are " + processQuery.finished().list().size() + " finished");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Check[" + i + "] There are " + processQuery.unfinished().list().size() + " unfinished");&lt;BR /&gt;}&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;would print something like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;Check[0] There are 2 finished&lt;BR /&gt;Check[0] There are 0 unfinished&lt;BR /&gt;Check[1] There are 2 finished&lt;BR /&gt;Check[1] There are 0 unfinished&lt;BR /&gt;Check[2] There are 2 finished&lt;BR /&gt;Check[2] There are 0 unfinished&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;instead it prints this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;Check[0] There are 2 finished&lt;BR /&gt;Check[0] There are 0 unfinished&lt;BR /&gt;Check[1] There are 0 finished&lt;BR /&gt;Check[1] There are 0 unfinished&lt;BR /&gt;Check[2] There are 0 finished&lt;BR /&gt;Check[2] There are 0 unfinished&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Looking into the source of HistoricProcessInstanceQueryImpl (Long live open source &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt; ) i see that there are four booleans&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;protected boolean finished = false;&lt;BR /&gt;protected boolean unfinished = false;&lt;BR /&gt;protected boolean deleted = false;&lt;BR /&gt;protected boolean notDeleted = false;&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;were i&amp;nbsp; would expect two. This allows &amp;lt;b&amp;gt;a query to be finished and unfinished, deleted and not deleted at the same time!&amp;lt;/b&amp;gt; This results in strange and very unintuitive behavior.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 30 Jan 2015 09:12:49 GMT</pubDate>
    <dc:creator>deg</dc:creator>
    <dc:date>2015-01-30T09:12:49Z</dc:date>
    <item>
      <title>HistoricProcessInstanceQuery statefull invocations</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/historicprocessinstancequery-statefull-invocations/m-p/194467#M147597</link>
      <description>This remark is related to&amp;nbsp; http://forums.activiti.org/en/viewtopic.php?f=3&amp;amp;t=593I was trying to reuse a created processInstanceQuery on activiti 5.16.3.&amp;nbsp; I assumed that finished and unfinished are each other opposites, just like deleted and notDeleted seem to be be each other opposites. So I exp</description>
      <pubDate>Fri, 30 Jan 2015 09:12:49 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/historicprocessinstancequery-statefull-invocations/m-p/194467#M147597</guid>
      <dc:creator>deg</dc:creator>
      <dc:date>2015-01-30T09:12:49Z</dc:date>
    </item>
    <item>
      <title>Re: HistoricProcessInstanceQuery statefull invocations</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/historicprocessinstancequery-statefull-invocations/m-p/194468#M147598</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hmm you are correct that this is unexpected. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;However, using two booleans here won't work: the query() without anything else, returns both finished and unfinished. So you've got 3 states, bot the boolean can only express two states. An option that then comes to mind is to use a Boolean (big B), so we can use null. But this will have the same problem as you post here: it would remember being set.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The real solution to this is probably to make the query objects immutable on each method call. But that's a huge rewrite that I can't do at the moment given other work … Unless you see another solution that would be quicker to implement?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Feb 2015 16:06:40 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/historicprocessinstancequery-statefull-invocations/m-p/194468#M147598</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2015-02-10T16:06:40Z</dc:date>
    </item>
    <item>
      <title>Re: HistoricProcessInstanceQuery statefull invocations</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/historicprocessinstancequery-statefull-invocations/m-p/194469#M147599</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;The problem now, as i see it, is that one concept is distributed over multiple datamembers. This allows for invalid states to be possible and&amp;nbsp; makes it more "difficult" to be consistent.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;A query can be for a finished, unfinished or any process. In the same way it can be for for a deleted, not deleted or any process. The three "states" or represented by two doubles that are not kept in sync. When i invoke a deleted after an notDeleted the flags should be kept in sync. Which is now not the case. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I can also not "unselect" it. When i execute the code below (newly invented method added)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;final HistoricProcessInstanceQuery processQuery = createQuery(procesDefinitionKey);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (int i = 0; i &amp;lt; 3; i++) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Check[" + i + "] There are " + processQuery.finished().list().size() + " finished");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Check[" + i + "] There are " + processQuery.unfinished().list().size() + " unfinished");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Check[" + i + "] There are " + processQuery.resetFinished().list().size() + "&amp;nbsp; overall");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&amp;lt;/code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I would expect something like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Check[0] There are 0 finished&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Check[0] There are 3 unfinished&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Check[0] There are 3 overall&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Check[1] There are 1 finished&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Check[1] There are 2 unfinished&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Check[1] There are 3 overall&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Check[2] There are 3 finished&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Check[2] There are 0 unfinished&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Check[2] There are 3 overall&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;/code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;To implement this i would probably just use an int. I don't like NULLs &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;protected int finished = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;protected int deleted = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;/code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;with the value 0 meaning not selected, 1 selected, -1 the oppossite of the flags meaning (unfinished, not deleted) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The setters on the QueryBuilder then just relate to the same field. With the addition of a new method that allows resetting the field to its default value.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;But for each concept there is just one internal datamember. So no problems with inconsistent state. A query can not be for a deleted and not deleted process at the same time.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; public HistoricProcessInstanceQuery finished() {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (inOrStatement) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.orQueryObject.finished = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.finished = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; public HistoricProcessInstanceQuery unfinished() {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (inOrStatement) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.orQueryObject.unfinished = -1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.unfinished = -1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; public HistoricProcessInstanceQuery resetFinished() {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (inOrStatement) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.orQueryObject.unfinished = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.unfinished = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; public HistoricProcessInstanceQuery deleted() {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (inOrStatement) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.orQueryObject.deleted = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.deleted = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; public HistoricProcessInstanceQuery notDeleted() {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (inOrStatement) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.orQueryObject.notDeleted = -1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.notDeleted = -1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;public HistoricProcessInstanceQuery resetDeleted() {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (inOrStatement) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.orQueryObject.notDeleted = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.notDeleted = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;/code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I would not make the queries immutable on each method call. Instead i would make immutable what's get passed to the command exeuctor. To me it is just the builder pattern. I build my query, i can constantly update or change my queryBuilder. When i run the query i would pass an immutable query object to the command executor. So the query builder can safely be used and modified again. The Query that was build is immutable. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So instead of this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;public U singleResult() {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.resultType = ResultType.SINGLE_RESULT;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (commandExecutor!=null) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (U) commandExecutor.execute(this);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return executeSingleResult(Context.getCommandContext());&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;/code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;i would probably do something like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;public U singleResult() {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.resultType = ResultType.SINGLE_RESULT;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (commandExecutor!=null) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; final QueryCommand command = this.build()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (U) commandExecutor.execute(command);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return executeSingleResult(Context.getCommandContext());&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;/code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Anyway, just my two cents.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;DEG&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Feb 2015 14:04:10 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/historicprocessinstancequery-statefull-invocations/m-p/194469#M147599</guid>
      <dc:creator>deg</dc:creator>
      <dc:date>2015-02-16T14:04:10Z</dc:date>
    </item>
  </channel>
</rss>

