<?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 Running Activiti in Google App Engine in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172418#M125629</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi All,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I was able to successfully run Activiti in Google App Engine - however, it did require some magic around ExpressionManager/ExpressionFactory. The only issue apart from that is GAE ban on java.awt.* classes, but that could be remediated by disabling createDiagramOnDeploy on ProcessEngineConfiguration.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Would you accept my pull request for ExpressionManager class so we can continue using it without custom binaries, please?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The root of the problem is ExpressionFactoryImpl.loadDefaultProperties() method which contains the following code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-java line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String path = home + File.separator + "lib" + File.separator + "el.properties";&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;File file = new File(path);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (file.exists()) { … }&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;SPAN&gt;Whilst this snippet is usually considered to be safe, GAE's restriction cause this part to fail with SecurityException because it prohibits file operations outside of the deployment boundaries. I was able to successfully avoid the problem by extending ExpressionManager/ExpressionFactory classes and using ExpressionFactoryImpl(Profile profile, Properties properties) constructor that does not involve loadDefaultProperties() call.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;However, the biggest issue was ExpressionManager constructor chain:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-java line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;nbsp; public ExpressionManager() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this(null);&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; public ExpressionManager(Map&amp;lt;Object, Object&amp;gt; beans) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;super(beans, false);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Use the ExpressionFactoryImpl in activiti build in version of juel, with parametrised method expressions enabled&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; expressionFactory = new ExpressionFactoryImpl();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.beans = beans;&lt;BR /&gt;&amp;nbsp; }&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;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This made the whole point of extending the class useless, since I would have to call one of these anyway (or it would be diligently invoked by the JVM anyway). AOP-style bytecode magic to redefine constructor via load-time instrumentation was not an option because it itself is banned on GAE.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So what I unfortunately ended up with was the whole activiti fork I now have to support, for the sake of this miniscule change:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;nbsp; public ExpressionManager() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this(null);&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; public ExpressionManager(boolean initFactory) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this(null, initFactory);&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; public ExpressionManager(Map&amp;lt;Object, Object&amp;gt; beans) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this(beans, true);&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; public ExpressionManager(Map&amp;lt;Object, Object&amp;gt; beans, boolean initFactory) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.beans = beans;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(initFactory) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Use the ExpressionFactoryImpl in activiti build in version of juel, with parametrised method expressions enabled&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; expressionFactory = new ExpressionFactoryImpl();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; }&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;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This change allows disabling ExpressionFactoryImpl initialization so I can supply my own instance in overridden constructor. After extending ExpressionFactoryImpl and modifying initialization routine in loadDefaultProperties() I was finally able to run activiti on GAE.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 04 Apr 2014 02:38:54 GMT</pubDate>
    <dc:creator>ekolesnikov</dc:creator>
    <dc:date>2014-04-04T02:38:54Z</dc:date>
    <item>
      <title>Running Activiti in Google App Engine</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172418#M125629</link>
      <description>Hi All,I was able to successfully run Activiti in Google App Engine - however, it did require some magic around ExpressionManager/ExpressionFactory. The only issue apart from that is GAE ban on java.awt.* classes, but that could be remediated by disabling createDiagramOnDeploy on ProcessEngineConfig</description>
      <pubDate>Fri, 04 Apr 2014 02:38:54 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172418#M125629</guid>
      <dc:creator>ekolesnikov</dc:creator>
      <dc:date>2014-04-04T02:38:54Z</dc:date>
    </item>
    <item>
      <title>Re: Running Activiti in Google App Engine</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172419#M125630</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Pull Request:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://github.com/Activiti/Activiti/pull/244" rel="nofollow noopener noreferrer"&gt;https://github.com/Activiti/Activiti/pull/244&lt;/A&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 04 Apr 2014 03:29:07 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172419#M125630</guid>
      <dc:creator>ekolesnikov</dc:creator>
      <dc:date>2014-04-04T03:29:07Z</dc:date>
    </item>
    <item>
      <title>Re: Running Activiti in Google App Engine</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172420#M125631</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I agree, the instantiation is a bit weird there … using the setter would have been better, as we do everywhere else. But for backwards compatibility, this is definitely better. Thanks!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 05 Apr 2014 07:50:44 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172420#M125631</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2014-04-05T07:50:44Z</dc:date>
    </item>
    <item>
      <title>Re: Running Activiti in Google App Engine</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172421#M125632</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Well, there IS a setter for ExpressionFactory on ExpressionManager - the problem is that you can't avoid initialisation of the default one.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 06 Apr 2014 23:06:01 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172421#M125632</guid>
      <dc:creator>ekolesnikov</dc:creator>
      <dc:date>2014-04-06T23:06:01Z</dc:date>
    </item>
    <item>
      <title>Re: Running Activiti in Google App Engine</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172422#M125633</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;@ekolesnikov: accepted. Thanks!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Apr 2014 08:42:19 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172422#M125633</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2014-04-22T08:42:19Z</dc:date>
    </item>
    <item>
      <title>Re: Running Activiti in Google App Engine</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172423#M125634</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;SPAN&gt;&amp;nbsp;&amp;nbsp; I have written the code like this&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;public class CustomExpressionManager extends ExpressionManager {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; public CustomExpressionManager() {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this(new HashMap(),false);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; public CustomExpressionManager(Map&amp;lt;Object, Object&amp;gt; beans, boolean initFactory) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.beans = beans;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(initFactory) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Use the ExpressionFactoryImpl in activiti build in version of juel, with parametrised method expressions enabled&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Profile profile = null;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Properties properties = new Properties();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; expressionFactory = new ExpressionFactoryImpl(profile,properties);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;and set in spring configuration&amp;nbsp; file as below&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; &amp;lt;property name="ExpressionManager" ref="expressionManager" /&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt; &amp;lt;/bean&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &amp;lt;bean id="expressionManager" class="com.activiti.load.CustomExpressionManager"/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Getting below error when tried to execute in Google app engine&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Caused by: java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\Program Files\Java\jdk1.7.0_67\jre\lib\el.properties" "read")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Can you please help on this&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks and Regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Kiran&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 02 Nov 2014 05:26:39 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172423#M125634</guid>
      <dc:creator>hellokk78</dc:creator>
      <dc:date>2014-11-02T05:26:39Z</dc:date>
    </item>
    <item>
      <title>Re: Running Activiti in Google App Engine</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172424#M125635</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Seems to be related to google app engine restrictions. Some Googling gave me this : &lt;/SPAN&gt;&lt;A href="http://stackoverflow.com/questions/12393589/jersey-linking-support-with-google-app-engine-issue" rel="nofollow noopener noreferrer"&gt;http://stackoverflow.com/questions/12393589/jersey-linking-support-with-google-app-engine-issue&lt;/A&gt;&lt;SPAN&gt;. Seems to be related to Juel versions…&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 03 Nov 2014 10:52:54 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172424#M125635</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2014-11-03T10:52:54Z</dc:date>
    </item>
    <item>
      <title>Re: Running Activiti in Google App Engine</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172425#M125636</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 am very interested in deploying activiti in Google Apps Engine. But it seems there isn't a step by step tutorial on how to achieve this deployment. I've tried to checkout the source code and build it in a Google Apps Engine project but without success. I have no clue where to start.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Would you please explain how you've set up the Google App Engine project so that you can deploy activiti? What kind of adjustments did you have to do in order for this to work.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I would really appreciate your help!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 27 Jan 2015 11:52:59 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/running-activiti-in-google-app-engine/m-p/172425#M125636</guid>
      <dc:creator>zedidas</dc:creator>
      <dc:date>2015-01-27T11:52:59Z</dc:date>
    </item>
  </channel>
</rss>

