<?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 Re: Discussion: calling a service from inside a JavaDelegate in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90679#M61791</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;@ kafeitu: The issue is the same for Spring. In Spring, my test case also fails in the old configuration. I didn't mention it, but that commit also fixes the way you described it, with service injection.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;From a quick look, it seems like the original StandaloneProcessEngineConfiguration doesn't configure the 'requires' command interceptor stack properly. It's the same as the requires-new. And it starts a new command context for every command, which seems to be wrong.&lt;BR /&gt;&lt;BR /&gt;Your solution already introduces an 'if (thereIsATxOngoing()) {joinIt();} else {createNew()}' in the command context interceptor, which is needed to obtain the real semantics of 'requires'.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes. That is exactly what I fixed. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;But I was expecting 2 separate command interceptor stacks in StandaloneProcessEngineConfiguration. And I don't see that in your solution. The StandaloneProcessEngineConfiguration still has 2 identical interceptor stacks for requires and requires-new. That's something I don't understand yet.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;The comments in the standalone process engine configuration indicated that this is intented behavior. I traced back history (&lt;/SPAN&gt;&lt;A href="https://github.com/Activiti/Activiti/blob/master/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/StandaloneProcessEngineConfiguration.java" rel="nofollow noopener noreferrer"&gt;https://github.com/Activiti/Activiti/blob/master/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/StandaloneProcessEngineConfiguration.java&lt;/A&gt;&lt;SPAN&gt; and it is something you introduced 2 years ago. I also didn't understand it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Hence in my solution, I created two different stacks, one that reuses the context and one that doesn't.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 26 Sep 2012 07:24:39 GMT</pubDate>
    <dc:creator>jbarrez</dc:creator>
    <dc:date>2012-09-26T07:24:39Z</dc:date>
    <item>
      <title>Discussion: calling a service from inside a JavaDelegate</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90675#M61787</link>
      <description>Hi guys,One thing that is a 'trend' on the forum, is problems sprouting from the fact people try to use one of the services inside their JavaDelegate. The current implementation will simply create a whole new command stack (and new connection/transaction), which leads to strange problems. We've been</description>
      <pubDate>Tue, 25 Sep 2012 15:53:21 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90675#M61787</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2012-09-25T15:53:21Z</dc:date>
    </item>
    <item>
      <title>Re: Discussion: calling a service from inside a JavaDelegate</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90676#M61788</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Joram,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Really good stuff!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I think this definitely solves a lot of issues with building logic that interacts with the Engine in the delegates.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I would think a DelegateHelper would be the most logical approach for providing an entry point to the Activiti interfaces.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards,&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Sep 2012 20:44:51 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90676#M61788</guid>
      <dc:creator>trademak</dc:creator>
      <dc:date>2012-09-25T20:44:51Z</dc:date>
    </item>
    <item>
      <title>Re: Discussion: calling a service from inside a JavaDelegate</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90677#M61789</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Hi guys,&lt;BR /&gt;&lt;BR /&gt;One thing that is a 'trend' on the forum, is problems sprouting from the fact people try to use one of the services inside their JavaDelegate. The current implementation will simply create a whole new command stack (and new connection/transaction), which leads to strange problems. We've been saying to those people that this is wrong usage … but I can't blame them for assuming it. And so I want to fix this. &lt;BR /&gt;&lt;BR /&gt;I'm talking about the following usage:&lt;BR /&gt;&lt;BR /&gt;&lt;CODE&gt;&lt;BR /&gt;public class StartProcessInstanceTestDelegate implements JavaDelegate {&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; public void execute(DelegateExecution execution) throws Exception {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; …&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; runtimeService.startProcessInstanceByKey("someProcess");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; …&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;}&lt;BR /&gt;&lt;/CODE&gt;&lt;BR /&gt;This can currently go wrong in many ways. For example, what if the process crashes further on, then the process started inside this delegate will have been created (because of the new transaction). &lt;BR /&gt;&lt;BR /&gt;The fix for this issue is actually pretty simple, also because the groundwork in the code was already 99% ready for it: when a new CommandContext is created, it is pushed onto a (threadlocal) stack, and at the end it is popped off again. The solution for our problem here, is to check this stack when a 'nested command' (which is what the service invocation is translated to) is executed. When a context is found on the stack, reuse it. This way, the current transaction is used, and all is how you'd expect it from Activiti and how it handles transactions. The exception is of course the 'txRequiresNew' command stack, which would never want to reuse the context.&lt;BR /&gt;&lt;BR /&gt;I implemented the changes needed in &lt;A href="https://github.com/Activiti/Activiti/commit/eba608b2d9023b2a7847e7d1ba819983ca6da882" rel="nofollow noopener noreferrer"&gt;https://github.com/Activiti/Activiti/commit/eba608b2d9023b2a7847e7d1ba819983ca6da882&lt;/A&gt;. All tests and Spring test run with these changes. I do need some help from the cdi guys.&lt;BR /&gt;&lt;BR /&gt;You will see I added two test cases in that commit:&lt;BR /&gt;* CallServiceInServiceTaskTest.testStartProcessFromDelegate : if you check the logs here, you'll see that the connection is being reused. In the old implementation, you see 2 separate connections.&lt;BR /&gt;* CallServiceInServiceTaskTest.testRollBackOnException : this is the interesting one. Here, the behavior will be wrong with the old implementation: one process has an exception, but the other one is still created. In the new implementation, both are rolled back (as you'd expect it).&lt;BR /&gt;&lt;BR /&gt;What do you guys think about this? Do you see any pitfalls I overlooked?&lt;BR /&gt;&lt;BR /&gt;Secondly, you'll see in the test JavaDelegate that I got the runtimeService by calling&lt;BR /&gt;&lt;BR /&gt;&lt;CODE&gt;&lt;BR /&gt;RuntimeService runtimeService = Context.getProcessEngineConfiguration().getRuntimeService();&lt;BR /&gt;&lt;/CODE&gt;&lt;BR /&gt;However, the Context object is an impl object and I'm not thinking about exposing it. As I see it, we can offer two ways to fetch the services:&lt;BR /&gt;&lt;BR /&gt;* Add an API class 'DelegateHelper' which does the call above behind the scenes&lt;BR /&gt;* Expose the services on the DelegateExecution&lt;BR /&gt;&lt;BR /&gt;The second approach feels a bit strange to me, but then again people will find it easier….&lt;BR /&gt;&lt;BR /&gt;WDYT?&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;I suggest you use spring(IOC).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;like this…&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE&gt;&lt;BR /&gt;@Service&lt;BR /&gt;public class StartProcessInstanceTestDelegate implements JavaDelegate {&lt;BR /&gt;@Autowired&lt;BR /&gt;RuntimeService runtimeService;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; runtimeService.startProcessInstanceByKey("someProcess");&lt;BR /&gt;…&lt;BR /&gt;}&lt;BR /&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;SPAN&gt;and set activiti:delegateExpression="${startProcessInstanceTestDelegate}" in foo.bpmn20.xml&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Sep 2012 05:15:19 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90677#M61789</guid>
      <dc:creator>kafeitu</dc:creator>
      <dc:date>2012-09-26T05:15:19Z</dc:date>
    </item>
    <item>
      <title>Re: Discussion: calling a service from inside a JavaDelegate</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90678#M61790</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;From a quick look, it seems like the original StandaloneProcessEngineConfiguration doesn't configure the 'requires' command interceptor stack properly.&amp;nbsp; It's the same as the requires-new.&amp;nbsp; And it starts a new command context for every command, which seems to be wrong.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Your solution already introduces an 'if (thereIsATxOngoing()) {joinIt();} else {createNew()}' in the command context interceptor, which is needed to obtain the real semantics of 'requires'.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;But I was expecting 2 separate command interceptor stacks in StandaloneProcessEngineConfiguration.&amp;nbsp; And I don't see that in your solution.&amp;nbsp; The StandaloneProcessEngineConfiguration still has 2 identical interceptor stacks for requires and requires-new.&amp;nbsp; That's something I don't understand yet.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Sep 2012 07:08:11 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90678#M61790</guid>
      <dc:creator>tombaeyens</dc:creator>
      <dc:date>2012-09-26T07:08:11Z</dc:date>
    </item>
    <item>
      <title>Re: Discussion: calling a service from inside a JavaDelegate</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90679#M61791</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;@ kafeitu: The issue is the same for Spring. In Spring, my test case also fails in the old configuration. I didn't mention it, but that commit also fixes the way you described it, with service injection.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;From a quick look, it seems like the original StandaloneProcessEngineConfiguration doesn't configure the 'requires' command interceptor stack properly. It's the same as the requires-new. And it starts a new command context for every command, which seems to be wrong.&lt;BR /&gt;&lt;BR /&gt;Your solution already introduces an 'if (thereIsATxOngoing()) {joinIt();} else {createNew()}' in the command context interceptor, which is needed to obtain the real semantics of 'requires'.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes. That is exactly what I fixed. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;But I was expecting 2 separate command interceptor stacks in StandaloneProcessEngineConfiguration. And I don't see that in your solution. The StandaloneProcessEngineConfiguration still has 2 identical interceptor stacks for requires and requires-new. That's something I don't understand yet.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;The comments in the standalone process engine configuration indicated that this is intented behavior. I traced back history (&lt;/SPAN&gt;&lt;A href="https://github.com/Activiti/Activiti/blob/master/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/StandaloneProcessEngineConfiguration.java" rel="nofollow noopener noreferrer"&gt;https://github.com/Activiti/Activiti/blob/master/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/StandaloneProcessEngineConfiguration.java&lt;/A&gt;&lt;SPAN&gt; and it is something you introduced 2 years ago. I also didn't understand it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Hence in my solution, I created two different stacks, one that reuses the context and one that doesn't.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Sep 2012 07:24:39 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90679#M61791</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2012-09-26T07:24:39Z</dc:date>
    </item>
    <item>
      <title>Re: Discussion: calling a service from inside a JavaDelegate</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90680#M61792</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Now I see the (true) and (false) in the StandaloneProcessEngineConfiguration.&amp;nbsp; I missed those earlier.&amp;nbsp; That clears things for me.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Sep 2012 07:53:12 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90680#M61792</guid>
      <dc:creator>tombaeyens</dc:creator>
      <dc:date>2012-09-26T07:53:12Z</dc:date>
    </item>
    <item>
      <title>Re: Discussion: calling a service from inside a JavaDelegate</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90681#M61793</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;The current implementation will simply create a whole new command stack (and new connection/transaction),&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;I don't think that is entirely true. It really depends on your environment. If you use a thread-scoped transaction &amp;amp; connection propagation strategy like JTA in combination with a correctly operating JCA, you will get the same db connection if you call the activiti service with REQUIRED propagation semantics (default). You will get a new CommandContext &amp;amp; new DbSqlSession, though. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If you use the "standalone" configuration, you will indeed get a new transaction / connection in the inner command which is indeed undesirable in most situations. In that case, you may end up in situations where the "inner" transaction commits but the "outer" transaction rolls back. The success of the inner transaction is also not predicated upon the success of the outer transaction, you could translate a failure of the inner transaction to a transaction rollback of the outer transaction, in this sense it is classical "REQUIRES_NEW".&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So &lt;/SPAN&gt;&lt;STRONG&gt;currently&lt;/STRONG&gt;&lt;SPAN&gt;, the behavior depends on your environment: &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* in Standalone mode you have REQUIRES_NEW semantics (new TX &amp;amp; new connection) + NEW DbSqlSession&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* in JTA mode you have REQUIRED semantics (same TX + same connection) + NEW DbSqlSession&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Joram, in your new approach, you propose the following:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* in Standalone mode you have REQUIRED semantics &amp;amp; &lt;/SPAN&gt;&lt;STRONG&gt;SAME DbSqlSession&lt;/STRONG&gt;&lt;SPAN&gt; =&amp;gt; same TX &amp;amp; same connection&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* in JTA mode you have REQUIRED semantics &amp;amp; &lt;/SPAN&gt;&lt;STRONG&gt;SAME DbSqlSession&lt;/STRONG&gt;&lt;SPAN&gt; =&amp;gt; same TX &amp;amp; same connection&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If a user does not want REQUIRED semantics, he can use the commandExecutorRequiresNew and get a NEW Transaction + NEW DBsqlSession?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Correct?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 27 Sep 2012 06:08:05 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90681#M61793</guid>
      <dc:creator>meyerd</dc:creator>
      <dc:date>2012-09-27T06:08:05Z</dc:date>
    </item>
    <item>
      <title>Re: Discussion: calling a service from inside a JavaDelegate</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90682#M61794</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;I don't think that is entirely true. It really depends on your environment. If you use a thread-scoped transaction &amp;amp; connection propagation strategy like JTA in combination with a correctly operating JCA, you will get the same db connection if you call the activiti service with REQUIRED propagation semantics (default). You will get a new CommandContext &amp;amp; new DbSqlSession, though.&lt;BR /&gt;If you use the "standalone" configuration, you will indeed get a new transaction / connection in the inner command which is indeed undesirable in most situations. In that case, you may end up in situations where the "inner" transaction commits but the "outer" transaction rolls back. The success of the inner transaction is also not predicated upon the success of the outer transaction, you could translate a failure of the inner transaction to a transaction rollback of the outer transaction, in this sense it is classical "REQUIRES_NEW".&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes, you are completely correct. IN JTA the situation is indeed better (if you configured it correctly). You still get a new commandcontext though, but that probably doesn't cause much problems.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;So currently, the behavior depends on your environment:&lt;BR /&gt;* in Standalone mode you have REQUIRES_NEW semantics (new TX &amp;amp; new connection) + NEW DbSqlSession&lt;BR /&gt;* in JTA mode you have REQUIRED semantics (same TX + same connection) + NEW DbSqlSession&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Correct&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Joram, in your new approach, you propose the following:&lt;BR /&gt;* in Standalone mode you have REQUIRED semantics &amp;amp; SAME DbSqlSession =&amp;gt; same TX &amp;amp; same connection&lt;BR /&gt;* in JTA mode you have REQUIRED semantics &amp;amp; SAME DbSqlSession =&amp;gt; same TX &amp;amp; same connection&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes, indeed correct. Note that this only applies to 'nested commands'. There are only a few of that in Activiti (from the top of my head):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- GetNextIdCmd, but it uses the requires-new stack&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- DecrementJobRetriesCmd (when an exception occurred. Actually not sure if this one uses requiresNew … but it should)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- etc.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;But for the use case I mention above, ie. calling the service from within a delegate, it will use the requires stack.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;If a user does not want REQUIRED semantics, he can use the commandExecutorRequiresNew and get a NEW Transaction + NEW DBsqlSession?&lt;BR /&gt;&lt;BR /&gt;Correct?&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes, indeed. This is a also something on my list: currently, it's pretty hard to fire a custom command (you need some casting). I'd like to see if we can find a better way to expose this, because this is (imho) a very good way to extend the api with 'customer specific' stuff.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 27 Sep 2012 06:45:56 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/discussion-calling-a-service-from-inside-a-javadelegate/m-p/90682#M61794</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2012-09-27T06:45:56Z</dc:date>
    </item>
  </channel>
</rss>

