<?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 Versioning bpmn file independently of VCS in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/versioning-bpmn-file-independently-of-vcs/m-p/172859#M126043</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I would like to share with you guys part of a proof of concept I implemented, in order to have your point of view.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The final goal :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Pairing a set of rules to a workflow while being able to modify the workflow without redeploying the application.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have been focusing on the versioning of the bpmn file so far (so I'm not talking about the deployed version).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I know that the normal way of managing the version of the file is to rely on the Version Control System, but one of the requirement is for the bpmn file to know about its version number. Meaning that the file should contain the manually added version.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So this is my implementation :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In the bpmn file I added a textAnnotation element identified by "versionNumber", that contains our customized value :&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;textAnnotation id="versionNumber"&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;text&amp;gt;1.2&amp;lt;/text&amp;gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/textAnnotation&amp;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;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Before each deployment I'm parsing the file in order to make sure that the value is there and is correct.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The deployment won't happen if it's not the case.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This value is easily stored and can be retrieved thanks to the following method.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-java line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@RequestMapping(value = "/artifactVersion", method = RequestMethod.GET, produces = "application/json")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public ResponseEntity&amp;lt;Object&amp;gt; getArtifactVersion(String key){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringBuilder response = new StringBuilder();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ProcessEngine processEngine = getProcessEngine(); //private method&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RepositoryService repositoryService = processEngine.getRepositoryService();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String lastDeployedId = getLatestDeployedProcessId(key);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BpmnModel model = repositoryService.getBpmnModel(lastDeployedId);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TextAnnotation versionArtifact = (TextAnnotation) model.getArtifact("versionNumber");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response.append("Artifact version of bpmn file: " + versionArtifact.getText());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return new ResponseEntity&amp;lt;Object&amp;gt;(response.toString(), HttpStatus.OK);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch (Exception t) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response.append(t);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return new ResponseEntity&amp;lt;Object&amp;gt;(response.toString(), HttpStatus.BAD_REQUEST);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch (Throwable t) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response.append(t);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return new ResponseEntity&amp;lt;Object&amp;gt;(response.toString(), HttpStatus.INTERNAL_SERVER_ERROR);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;/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;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;/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;I don't think this is a practice that you recommend but it's in my mind a good enough solution. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I would like to hear from more experienced developers about the limits of this solution and of course about any alternatives to this implementation.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks a lot in advance,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Yohann&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 03 Mar 2014 20:52:00 GMT</pubDate>
    <dc:creator>zze_one</dc:creator>
    <dc:date>2014-03-03T20:52:00Z</dc:date>
    <item>
      <title>Versioning bpmn file independently of VCS</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/versioning-bpmn-file-independently-of-vcs/m-p/172859#M126043</link>
      <description>Hi,I would like to share with you guys part of a proof of concept I implemented, in order to have your point of view.The final goal &lt;IMG id="smileytongue" class="emoticon emoticon-smileytongue" src="https://migration33.stage.lithium.com/i/smilies/16x16_smiley-tongue.png" alt="Smiley Tongue" title="Smiley Tongue" /&gt;airing a set of rules to a workflow while being able to modify the workflow without redeploying the application.I have been focusing on the versioning of the bpmn fil</description>
      <pubDate>Mon, 03 Mar 2014 20:52:00 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/versioning-bpmn-file-independently-of-vcs/m-p/172859#M126043</guid>
      <dc:creator>zze_one</dc:creator>
      <dc:date>2014-03-03T20:52:00Z</dc:date>
    </item>
    <item>
      <title>Re: Versioning bpmn file independently of VCS</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/versioning-bpmn-file-independently-of-vcs/m-p/172860#M126044</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Looks good to me. The only downside is that you cannot forget to update the version tag manually of course.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 10 Mar 2014 10:31:32 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/versioning-bpmn-file-independently-of-vcs/m-p/172860#M126044</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2014-03-10T10:31:32Z</dc:date>
    </item>
    <item>
      <title>Re: Versioning bpmn file independently of VCS</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/versioning-bpmn-file-independently-of-vcs/m-p/172861#M126045</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Indeed. I'm controlling this aspect before deploying the file. Thanks Joram.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 10 Mar 2014 13:13:42 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/versioning-bpmn-file-independently-of-vcs/m-p/172861#M126045</guid>
      <dc:creator>zze_one</dc:creator>
      <dc:date>2014-03-10T13:13:42Z</dc:date>
    </item>
    <item>
      <title>Re: Versioning bpmn file independently of VCS</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/versioning-bpmn-file-independently-of-vcs/m-p/172862#M126046</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello gents,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;We would like to reuse some code you created in BpmnParse.execute().&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is what we would have:&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;private String getProcessKey(String contentBPMN) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BpmnXMLConverter converter = new BpmnXMLConverter();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BpmnModel bpmnModel = converter.convertToBpmnModel(new StringStreamSource(contentBPMN), true, true);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return bpmnModel.getMainProcess().getId();&lt;/SPAN&gt;&lt;BR /&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;But a copy / paste will remove all dependencies on the next evolutions you guys are gonna make. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;So I do have a quick question for you.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Do you know if the current implementation of the parser will stay the same in the next versions of Activiti ? &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;My concern is really about the usability of the code in a near future. It may not be a good fit anymore depending on the direction Activiti is taking.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks in advance,&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 06 Jun 2014 15:38:23 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/versioning-bpmn-file-independently-of-vcs/m-p/172862#M126046</guid>
      <dc:creator>zze_one</dc:creator>
      <dc:date>2014-06-06T15:38:23Z</dc:date>
    </item>
    <item>
      <title>Re: Versioning bpmn file independently of VCS</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/versioning-bpmn-file-independently-of-vcs/m-p/172863#M126047</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;That bit of code won't change any time soon. We've settled on the BpmnModel approach, took us a lot of time and we're not planning on changing it.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Jun 2014 10:00:37 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/versioning-bpmn-file-independently-of-vcs/m-p/172863#M126047</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2014-06-17T10:00:37Z</dc:date>
    </item>
  </channel>
</rss>

