<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Hi Mauricio, Maciej, <br>
      <br>
      +1 on configuration. <br>
      <br>
      +5 for " facade for process interactions that hides some of the
      steps and expose very simple API to interact with."<br>
      In essence, we don't want the process engine (or anything else) to
      trust the HT component at all -- and vice versa. <br>
      <br>
      Maurcio, I like the API's that you defined in the second document
      (HumanTaskAPIAndDataStructuresProposal), but I'm missing how they
      would be used with the current architecture. Do you have idea's
      about that? (Actually, see the 3rd para after this, for more
      ideas). <br>
      <br>
      Also, I think that the local human task service needs to be pulled
      away from the current code base: at the moment, the local human
      task service is essentially a facade that is based on an
      infrastructure that was not designed for it's use that way. In
      fact, the local human task service <i>was initially designed as a
        demo</i> -- but has grown far beyond that. Luckily, it has an
      API which means we can change the underlying implementation. <br>
      <br>
      In short, I think the use case for the local task service is
      sufficiently different from the rest of the use cases
      (standalone/hornetq, etc.) that it should have it's own
      infrastructure -- almost down to the task functional level. The
      main reason for this is that persistence (especially tx's) are a
      big part of the use case for the local task service -- but the tx
      logic and request handling in human-task wasn't really written
      with that in mind. I would like to consider rewriting the code so
      that persistence and request handling could be even more pluggable
      than they are (depending on local or standalone task service). <br>
      <br>
      Separating the pure human task code out from the other concerns
      (request handling, persistence) will probably also help to create
      the API's that you define. <br>
      <br>
      Lastly, +10 on the API's -- but I really do want them to be
      Interfaces. Where possible, I'd really like to make sure that the
      underlying classes are not accessible to the user and that there's
      a real focus on creating an interface that satisfies a User's need
      -- instead of simply creating functionality for the user and
      exposing it. <br>
      <br>
      Oh yeah, +1 on not forcing users to use the software a particular
      way: they always end up surprising you and using it another way.
      The more ways you can expose an API the better.. <br>
      <br>
      Regards,<br>
      Marco<br>
      <br>
      27-06-12 23:28, Maciej Swiderski:<br>
    </div>
    <blockquote cite="mid:4FEB7AFA.6070904@redhat.com" type="cite">
      <meta content="text/html; charset=ISO-8859-1"
        http-equiv="Content-Type">
      Hi Mauricio,<br>
      <br>
      Do we foresee any use cases where task service will be used
      without process engine? If so, I agree we could make it as generic
      as possible but priority number 1 should be integration with
      process engine to make it simple and intuitive.<br>
      In general I like this separation but I am not convinced about
      task definition service as to me it looks bit over designed to the
      use cases I am aware of. One issue I see with this is that we
      introduce task definition management in human task module which I
      don't think should be concerned about. It should be only runtime
      component and not repository for task definition. If we think
      about storing task definitions that are reusable across processes
      we should store them in guvnor rather than in additional component
      (ht module). Since both designer and form builder is integrated
      with it so no need for yet another integration. This is more of
      tools responsibility and not runtime component. Especially
      important in case of local task service, since how we could
      store/deploy task definition into local task service?<br>
      Same applies for task delegation service, as this kind of
      information could come from another place - repository and be
      utilized by tooling.<br>
      <br>
      Configuration is week point in human task module currently so I
      believe that this is very important element to be improved while
      refactoring (or even redesiging) task module. I would see this as
      single configuration service that allows to configure - in this
      new way - all services with defaulting to convention over
      configuration so well documented convention of configuration
      points is a must.<br>
      <br>
      As it comes to integration between process engine and human task
      it should be as simple as possible. I agree that in some cases use
      of switch yard and camel makes sence but we should not force users
      to include it every time. Simple interactions should be available
      and in my opinion out of the box. For instance, make use of jms
      provider that AS delivers instead of putting additional frameworks
      in between.<br>
      <br>
      If you want to keep the services not aware of process interaction
      then we should deliver facade for process interactions that hides
      some of the steps and expose very simple API to interact with,
      like addTask, completeTask, getTask, getAssignerTasks, etc (part
      of this is probably in task instance service). That will make a
      smooth interaction from the process side which as mentioned
      already is most important, in my opinion.<br>
      <br>
      For CDI, I am not expert here but what about standalone adoptions,
      like swing, or other desktop frameworks, will CDI fit into that?<br>
      <br>
      <br>
      Let's encourage others here to speak up as we need more votes on
      this refactor.<br>
      Maciej <br>
      <br>
      <br>
      On 27.06.2012 20:17, Mauricio Salatino wrote:
      <blockquote
cite="mid:CANzbnyX=izTX5a_ifBfrzAXyJALo5ZKXb+XKC2_9v_fWe912gw@mail.gmail.com"
        type="cite">Thanks Maciej for the questions. I've included
        comments between the bullets
        <div><br>
        </div>
        <div>
          <p
            style="border-spacing:0px;border-collapse:collapse;text-align:left;color:rgb(85,85,85);font-size:12px;font-family:'Lucida

            Sans','Lucida Sans Unicode','Lucida
Grande',Verdana,Arial,Helvetica,sans-serif;margin:0px;list-style:none;padding:0px;outline:0px;border:0px">"Mauricio,

            couple of questions at the very beginning to understand
            correctly your proposal:</p>
          <ul
            style="list-style-position:initial;border-spacing:0px;border-collapse:collapse;text-align:left;margin:0px;padding:0px

            0px 0px 2.25em;outline:0px;border:0px">
            <li style="color:rgb(85,85,85);font-family:'Lucida
              Sans','Lucida Sans Unicode','Lucida
Grande',Verdana,Arial,Helvetica,sans-serif;font-size:12px;background-color:transparent;border:0px;border-collapse:collapse;border-spacing:0px;margin:0px;outline:0px;padding:0px;list-style-type:inherit">Q:

              how does task def service applies to process interactions
              - when task definition will be deployed?<br>
              A: I was trying to not think about the process engine for
              exposing a Human Task Interactions APIs, but I understand
              your question. Right now inside our HTWorkItems we are
              calling the taskClient.add method which in fact is doing a
              deploy and an instantiation of a task based on the
              WorkItem params map. This parameters map is created based
              on the userTask defined in a process and its internal data
              mappings. That's from one side.&nbsp;<br>
              With the form builder, what can be done right now is to
              "decorate" a userTask from a business process and define a
              form based on it. So basically we do something like: pick
              a process, get all the userTasks and for each task we end
              up with a TaskForm.def this TaskForm.def can be associated
              with a TaskDefinition, instead with a TaskInstance,
              promoting reusability as much as we can.<br>
              If we have this TaskDefService, we can make both: the
              WorkItemHandlers and the Form builder to consume the same
              information and reuse that as much as we can. We can
              include the process designer in the loop and make the
              Company Tasks Definitions available for the editor, so the
              user when want to place a new UserTask inside their
              process, can choose from a list of presets instead of
              filling all the mappings, user assignments, presentation
              details, notifications settings, etc.<br>
              <br>
            </li>
            <li style="color:rgb(85,85,85);font-family:'Lucida
              Sans','Lucida Sans Unicode','Lucida
Grande',Verdana,Arial,Helvetica,sans-serif;font-size:12px;background-color:transparent;border:0px;border-collapse:collapse;border-spacing:0px;margin:0px;outline:0px;padding:0px;list-style-type:inherit"><span
                style="background-color:transparent">Q: delegation
                service - since that is on task def level - what about
                sharing this information on concurrent task instances
                since based on the same definition expressions can be
                evaluated to different values<br>
                A: Yes that's the idea. In the static information we can
                have an expresion, in that case the expresion will be
                evaluated with the TaskInstance context and the result
                &nbsp;will be placed in the task instance context, the task
                def information will not be changed, so it can be safely
                shared between instances. All the taskDef related
                structures should contain "templating" information which
                means something for the company. All the runtime status
                will be kept in the task instances. Think about TaskDef,
                DelegationsDef, NotificationDef, as shortcuts for the
                users to not define everything each time that they want
                to instantiate a task.<br>
                <br>
              </span></li>
            <li
style="background-color:transparent;border:0px;border-collapse:collapse;border-spacing:0px;margin:0px;outline:0px;padding:0px;list-style-type:inherit"><font
                color="#555555" face="Lucida Sans, Lucida Sans Unicode,
                Lucida Grande, Verdana, Arial, Helvetica, sans-serif"><span
                  style="font-size:12px">Q:how is this going to be
                  configured - per service or will there be a
                  configuration service as well</span></font><br>
              <font color="#555555" face="Lucida Sans, Lucida Sans
                Unicode, Lucida Grande, Verdana, Arial, Helvetica,
                sans-serif"><span style="font-size:12px">A: good
                  question, we can add this topic for our board session
                  :) I'm not a CDI expert, but based on what I've being
                  reading, you can provide a default set of services
                  that will be automatically&nbsp;instantiated&nbsp;and injected,
                  and then you can provide alternatives. If the user
                  doesn't want the default settings he can defined the
                  alternatives via a vary basic configuration file.
                  Using CDI qualifiers we can, with a pair of
                  annotations, define which set implementations (1
                  configuration) do we want for our whole set of
                  services.&nbsp;</span></font></li>
          </ul>
          <p
            style="border-spacing:0px;text-align:left;outline:0px;padding:0px;min-height:8pt;border-collapse:collapse;color:rgb(85,85,85);font-size:12px;list-style:none;margin:0px;font-family:'Lucida

            Sans','Lucida Sans Unicode','Lucida
            Grande',Verdana,Arial,Helvetica,sans-serif;border:0px"> &nbsp;</p>
          <p
            style="border-spacing:0px;border-collapse:collapse;color:rgb(85,85,85);font-size:12px;font-family:'Lucida

            Sans','Lucida Sans Unicode','Lucida
Grande',Verdana,Arial,Helvetica,sans-serif;margin:0px;list-style:none;padding:0px;outline:0px;border:0px">Would

            be really nice to see how this is going to be utilized from
            following perspectives:</p>
          <ul
            style="list-style-position:initial;border-spacing:0px;border-collapse:collapse;text-align:left;color:rgb(85,85,85);font-size:12px;font-family:'Lucida

            Sans','Lucida Sans Unicode','Lucida
            Grande',Verdana,Arial,Helvetica,sans-serif;margin:0px;padding:0px
            0px 0px 2.25em;outline:0px;border:0px">
            <li
style="background-color:transparent;border:0px;border-collapse:collapse;border-spacing:0px;margin:0px;outline:0px;padding:0px;list-style-type:inherit">Q:

              process engine - how process engine will interact with
              human task services<br>
              A: This should not be a problem of this module, and I
              think that this can be considered as an integration
              problem, so it can be&nbsp;<br>
              fixed with an specialized framework such as switchyard
              and/or camel. I've being reading about the CDI support for
              them.. and&nbsp;<br>
              I think that we can go in that way.&nbsp;<br>
              The Callbacks/Listener Service is intended to store
              information about the Task Owners and their interest to be
              notified about a tasks events. We need to think about this
              a little bit more, because the Process Engine is not the
              Task Owner of a TaskInstance that has being created by a
              business process instance. The business process instance
              is the owner of that task in that case, so we will need to
              keep a reference from that process instance inside this
              service. When I say, reference I mean a business key, an
              ID, an endpoint or something to be able to notify the
              interested ones.&nbsp;</li>
            <li
style="background-color:transparent;border:0px;border-collapse:collapse;border-spacing:0px;margin:0px;outline:0px;padding:0px;list-style-type:inherit">Q:

              task client - how to access tasks and to perform
              operations on them"<br>
              A: via the TaskInstanceService, its the same as our
              TaskClient right now. (but restricted for TaskInstances
              and TaskInstancesQueries, not add, not Comments, not
              attachments, not notifications)</li>
          </ul>
          <div style="text-align:left"> <font color="#555555"
              face="Lucida Sans, Lucida Sans Unicode, Lucida Grande,
              Verdana, Arial, Helvetica, sans-serif"><span
                style="font-size:12px"><br>
              </span></font></div>
          <div style="text-align:left"><br>
          </div>
          <div style="text-align:left"> <font color="#555555"
              face="Lucida Sans, Lucida Sans Unicode, Lucida Grande,
              Verdana, Arial, Helvetica, sans-serif"><span
                style="font-size:12px">Cheers</span></font></div>
          <div style="text-align:left"><font color="#555555"
              face="Lucida Sans, Lucida Sans Unicode, Lucida Grande,
              Verdana, Arial, Helvetica, sans-serif"><span
                style="font-size:12px"><br>
              </span></font></div>
          <br>
          <div class="gmail_quote">On Wed, Jun 27, 2012 at 1:02 PM,
            Mauricio Salatino <span dir="ltr">&lt;<a
                moz-do-not-send="true" href="mailto:salaboy@gmail.com"
                target="_blank">salaboy@gmail.com</a>&gt;</span> wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div>Hi guys,</div>
              <div>I'm back with more wiki pages. I was thinking about
                how to improve the Human Task Module and I came back
                with this wiki page</div>
              <div>that shows some proposals.&nbsp;</div>
              <div>The main idea behind the proposal is to modularize as
                much as we can the features provided by the human task
                module. I've also included</div>
              <div>into the proposal the concept of TaskDefinition which
                will allow us to add a nice integration with the form
                builder (in modeling and in runtime phases).</div>
              <div><br>
              </div>
              <div>I'm trying to move towards CDI to leverage all the
                mechanisms provided by the framework and the fact that
                exposing CDI beans across different platforms is
                extremely easy these days.&nbsp;</div>
              <div><br>
              </div>
              <a moz-do-not-send="true"
href="https://community.jboss.org/wiki/HumanTaskAPIAndDataStructuresProposal"
                target="_blank">https://community.jboss.org/wiki/HumanTaskAPIAndDataStructuresProposal</a><br
                clear="all">
              <div><br>
              </div>
              <div> I understand that the changes proposed in the wiki
                looks quite heavy, but I do believe that we can fit the
                current code base into that structure without loosing
                functionality.</div>
              <div>&nbsp;</div>
              <div><br>
              </div>
              <div>The document is showing APIs and Data Structures
                only. i think that we can assume that all the services
                implementation will represent simple stateless services
                which will&nbsp;</div>
              <div>insert and read information from a database,
                so&nbsp;architecturally&nbsp;speaking from that perspective the
                service implementations should be straight forward.&nbsp;</div>
              <div><br>
              </div>
              <div>I will be filling the Data Structure Sections
                briefly, but I would like to share the main concepts
                with you guys to gather feedback, as always.</div>
              <div><br>
              </div>
              <div>Cheers</div>
              <span><font color="#888888">
                  <div> <br>
                  </div>
                  -- <br>
                  &nbsp;- MyJourney @ <a moz-do-not-send="true"
                    href="http://salaboy.wordpress.com" target="_blank">http://salaboy.wordpress.com</a>
                  <div>&nbsp;- Co-Founder @ <a moz-do-not-send="true"
                      href="http://www.jugargentina.org" target="_blank">http://www.jugargentina.org</a><br>
                    &nbsp;- Co-Founder @ <a moz-do-not-send="true"
                      href="http://www.jbug.com.ar" target="_blank">http://www.jbug.com.ar</a><br>
                    &nbsp;<br>
                    &nbsp;- Salatino "Salaboy" Mauricio -</div>
                  <br>
                </font></span></blockquote>
          </div>
          <br>
          <br clear="all">
          <div><br>
          </div>
          -- <br>
          &nbsp;- MyJourney @ <a moz-do-not-send="true"
            href="http://salaboy.wordpress.com" target="_blank">http://salaboy.wordpress.com</a>
          <div>&nbsp;- Co-Founder @ <a moz-do-not-send="true"
              href="http://www.jugargentina.org" target="_blank">http://www.jugargentina.org</a><br>
            &nbsp;- Co-Founder @ <a moz-do-not-send="true"
              href="http://www.jbug.com.ar" target="_blank">http://www.jbug.com.ar</a><br>
            &nbsp;<br>
            &nbsp;- Salatino "Salaboy" Mauricio -</div>
          <br>
        </div>
        <br>
        <fieldset class="mimeAttachmentHeader"></fieldset>
        <br>
        <pre wrap="">_______________________________________________
jbpm-dev mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:jbpm-dev@lists.jboss.org">jbpm-dev@lists.jboss.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/jbpm-dev">https://lists.jboss.org/mailman/listinfo/jbpm-dev</a>
</pre>
      </blockquote>
      <br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
jbpm-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:jbpm-dev@lists.jboss.org">jbpm-dev@lists.jboss.org</a>
<a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/jbpm-dev">https://lists.jboss.org/mailman/listinfo/jbpm-dev</a>
</pre>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature" cols="72">-- 
jBPM/Drools developer
Utrecht, the Netherlands</pre>
  </body>
</html>