<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<style>






#aqm-original p.x_MsoNormal, #aqm-original li.x_MsoNormal, #aqm-original div.x_MsoNormal {
margin-top:0cm;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:0cm;
        line-height:112%;
        font-size:10.0pt;
        font-family:"Arial",sans-serif
} /* style */

#aqm-original h1 {
margin-top:18.0pt;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:21.25pt;
        text-indent:-21.25pt;
        line-height:112%;
        page-break-after:avoid;
        font-size:20.0pt;
        font-family:"Arial Narrow",sans-serif;
        color:#003E76
} /* style */

#aqm-original h1.x_CxSpFirst {
margin-top:18.0pt;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:21.25pt;
        margin-bottom:.0001pt;
        text-indent:-21.25pt;
        line-height:112%;
        page-break-after:avoid;
        font-size:20.0pt;
        font-family:"Arial Narrow",sans-serif;
        color:#003E76
} /* style */

#aqm-original h1.x_CxSpMiddle {
margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:21.25pt;
        margin-bottom:.0001pt;
        text-indent:-21.25pt;
        line-height:112%;
        page-break-after:avoid;
        font-size:20.0pt;
        font-family:"Arial Narrow",sans-serif;
        color:#003E76
} /* style */

#aqm-original h1.x_CxSpLast {
margin-top:0cm;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:21.25pt;
        text-indent:-21.25pt;
        line-height:112%;
        page-break-after:avoid;
        font-size:20.0pt;
        font-family:"Arial Narrow",sans-serif;
        color:#003E76
} /* style */

#aqm-original h2 {
margin-top:2.0pt;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:0cm;
        margin-bottom:.0001pt;
        line-height:112%;
        page-break-after:avoid;
        font-size:13.0pt;
        font-family:"Arial Narrow",sans-serif;
        color:#002E58;
        font-weight:normal
} /* style */

#aqm-original p.x_MsoListBullet, #aqm-original li.x_MsoListBullet, #aqm-original div.x_MsoListBullet {
margin-top:0cm;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:21.25pt;
        text-indent:-21.25pt;
        line-height:112%;
        font-size:10.0pt;
        font-family:"Arial",sans-serif
} /* style */

#aqm-original p.x_MsoListBullet2, #aqm-original li.x_MsoListBullet2, #aqm-original div.x_MsoListBullet2 {
margin-top:0cm;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:42.5pt;
        text-indent:-21.25pt;
        line-height:112%;
        font-size:10.0pt;
        font-family:"Arial",sans-serif
} /* style */

#aqm-original p.x_MsoListBullet3, #aqm-original li.x_MsoListBullet3, #aqm-original div.x_MsoListBullet3 {
margin-top:0cm;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:63.75pt;
        text-indent:-21.25pt;
        line-height:112%;
        font-size:10.0pt;
        font-family:"Arial",sans-serif
} /* style */

#aqm-original p.x_MsoListBullet4, #aqm-original li.x_MsoListBullet4, #aqm-original div.x_MsoListBullet4 {
margin-top:0cm;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:85.0pt;
        text-indent:-21.25pt;
        line-height:112%;
        font-size:10.0pt;
        font-family:"Arial",sans-serif
} /* style */

#aqm-original p.x_MsoListBullet5, #aqm-original li.x_MsoListBullet5, #aqm-original div.x_MsoListBullet5 {
margin-top:0cm;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:106.25pt;
        text-indent:-21.25pt;
        line-height:112%;
        font-size:10.0pt;
        font-family:"Arial",sans-serif
} /* style */

#aqm-original p.x_MsoTitle, #aqm-original li.x_MsoTitle, #aqm-original div.x_MsoTitle {
margin-top:18.0pt;
        margin-right:102.05pt;
        margin-bottom:6.0pt;
        margin-left:0cm;
        line-height:112%;
        font-size:26.0pt;
        font-family:"Arial Narrow",sans-serif;
        color:#003E76;
        text-transform:uppercase;
        font-weight:bold
} /* style */

#aqm-original p.x_MsoTitleCxSpFirst, #aqm-original li.x_MsoTitleCxSpFirst, #aqm-original div.x_MsoTitleCxSpFirst {
margin-top:18.0pt;
        margin-right:102.05pt;
        margin-bottom:0cm;
        margin-left:0cm;
        margin-bottom:.0001pt;
        line-height:112%;
        font-size:26.0pt;
        font-family:"Arial Narrow",sans-serif;
        color:#003E76;
        text-transform:uppercase;
        font-weight:bold
} /* style */

#aqm-original p.x_MsoTitleCxSpMiddle, #aqm-original li.x_MsoTitleCxSpMiddle, #aqm-original div.x_MsoTitleCxSpMiddle {
margin-top:0cm;
        margin-right:102.05pt;
        margin-bottom:0cm;
        margin-left:0cm;
        margin-bottom:.0001pt;
        line-height:112%;
        font-size:26.0pt;
        font-family:"Arial Narrow",sans-serif;
        color:#003E76;
        text-transform:uppercase;
        font-weight:bold
} /* style */

#aqm-original p.x_MsoTitleCxSpLast, #aqm-original li.x_MsoTitleCxSpLast, #aqm-original div.x_MsoTitleCxSpLast {
margin-top:0cm;
        margin-right:102.05pt;
        margin-bottom:6.0pt;
        margin-left:0cm;
        line-height:112%;
        font-size:26.0pt;
        font-family:"Arial Narrow",sans-serif;
        color:#003E76;
        text-transform:uppercase;
        font-weight:bold
} /* style */

#aqm-original a:link, #aqm-original span.x_MsoHyperlink {
color:#009DEC;
        text-decoration:underline
} /* style */

#aqm-original a:visited, #aqm-original span.x_MsoHyperlinkFollowed {
color:#933973;
        text-decoration:underline
} /* style */

#aqm-original span.x_TitelZchn {
font-family:"Arial Narrow",sans-serif;
        color:#003E76;
        text-transform:uppercase;
        font-weight:bold
} /* style */

#aqm-original span.x_berschrift1Zchn {
font-family:"Arial Narrow",sans-serif;
        color:#003E76;
        font-weight:bold
} /* style */

#aqm-original span.x_berschrift2Zchn {
font-family:"Arial Narrow",sans-serif;
        color:#002E58
} /* style */

#aqm-original span.x_E-MailFormatvorlage27 {
font-family:"Arial",sans-serif;
        color:windowtext
} /* style */

#aqm-original .x_MsoChpDefault {
font-size:10.0pt;
        font-family:"Arial",sans-serif
} /* style */

#aqm-original .x_MsoPapDefault {
margin-bottom:6.0pt;
        line-height:112%
} /* style */

@page WordSection1
        {margin:70.85pt 70.85pt 2.0cm 70.85pt}
#aqm-original div.x_WordSection1 {

} /* style */

#aqm-original ol {
margin-bottom:0cm
} /* style */

#aqm-original ul {
margin-bottom:0cm
} /* style */


</style>
<style type="text/css" style="display:none;"> #aqm-original P {
margin-top:0;margin-bottom:0;
} /* style */
 </style>
</head>
<body>
<div dir="auto">
<div dir="auto">Hi Keith, </div><div dir="auto"><br></div><div dir="auto">I saw rabbitmq was being used in the grouper solution too. </div><div dir="auto"><br></div><div dir="auto">We are using Apache Artemis which also supports both. </div><div dir="auto"><br></div><div dir="auto">I'm just experimenting now :) </div><div dir="auto"><br></div><div dir="auto">Regards, </div><div dir="auto">Chris </div><div dir='auto'><br></div>
<div id="aqm-original" style="color: black;">

<!-- body start -->
<div dir="ltr" class="aqm-original-body">
<div style="color: black;">
<p style="color: black; font-size: 10pt; font-family: sans-serif; margin: 8pt 0;">Am 27. April 2020 15:47:33 schrieb Keith Hazelton <hazelton@internet2.edu>:</p>
<blockquote type="cite" class="gmail_quote" style="margin: 0 0 0 0.75ex; border-left: 1px solid #808080; padding-left: 0.75ex;">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Chris, Pavol,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
RabbitMQ can support both AMQP and JMS, see details at <a href="https://www.rabbitmq.com/jms-client.html" id="LPlnk677328">
https://www.rabbitmq.com/jms-client.html</a> <br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
          --Keith Hazelton<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><span style="font-family: Calibri, sans-serif; color: #000000;"><b>From:</b> midPoint <midpoint-bounces@lists.evolveum.com> on behalf of Pavol Mederly <mederly@evolveum.com><br>
<b>Sent:</b> Monday, April 27, 2020 4:06 AM<br>
<b>To:</b> midpoint@lists.evolveum.com <midpoint@lists.evolveum.com><br>
<b>Subject:</b> Re: [midPoint] How to connect a resource that only really implements a sync method for a particular object class</span>
<div> </div>
</div>
<div>
<p>Hello Chris,</p>
<p>we have recently implemented this "messaging-only" approach for Grouper-midPoint integration demo prepared for Internet2 InCommon Trusted Access Platform.</p>
<p>It does not use ConnId resources, mainly because of the architectural mismatch regarding "sync token" concept; and the acknowledgment of processed messages. (This is not to say that ConnId cannot be used in this case! It just does not fit perfectly.)<br>
</p>
<p>Instead it uses a new mechanism called asynchronous update. (Now I see it's not much documented... but some ideas are here:
<a href="https://wiki.evolveum.com/display/midPoint/Messaging+Resources#MessagingResources-SourceResources">
https://wiki.evolveum.com/display/midPoint/Messaging+Resources#MessagingResources-SourceResources</a>).</p>
<p>The connector we use has two parts:</p>
<ol>
<li>fully functional REST connector that works synchronously,</li><li>asynchronous connector that receives and processes AMQP messages.</li></ol>
<p>This is the configuration: <a href="https://github.internet2.edu/docker/midPoint_container/blob/master/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/resource-grouper.xml">
https://github.internet2.edu/docker/midPoint_container/blob/master/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/resource-grouper.xml</a>. (With the related custom function library:
<a href="https://github.internet2.edu/docker/midPoint_container/blob/master/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/functionLibraries/function-library-grouper.xml">
https://github.internet2.edu/docker/midPoint_container/blob/master/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/functionLibraries/function-library-grouper.xml</a>).</p>
<p>Now, back to your question:</p>
<ol>
<li>What we have done corresponds to your option "a". Besides asynchronous part there is also a fully functional synchronous part. The main reason of its existence is that we need to be able to do occasional full reconciliation - something that is not possible
 with pure messaging approach. Note that we have the caching turned on even if we have this option. We need to be able to quickly determine group membership information from the cached group information.<br>
</li><li>But your "b" way should be also possible. You should be able to simply declare connector as "not supporting queries" and rely on shadow caching. We have some tests in this respect, see e.g.
<a href="https://github.com/Evolveum/midpoint/blob/a30ecaafa648564f619c3d7e3936a66300c3b61e/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/async/TestAsyncUpdateUcf.java">
https://github.com/Evolveum/midpoint/blob/a30ecaafa648564f619c3d7e3936a66300c3b61e/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/async/TestAsyncUpdateUcf.java</a>.</li></ol>
<p>Note that the "asynchronous update" feature is somewhat experimental for now. But it seems to be working well. It supports AMQP sources only but was designed to be easily adaptable to other types of data sources. JMS is obvious first candidate.</p>
<p>Best regards,<br>
</p>
<pre class="x_moz-signature" cols="72">Pavol Mederly
Software developer
evolveum.com
</pre>
<div class="x_moz-cite-prefix">On 26/04/2020 16:32, Chris Woods wrote:<br>
</div>
<blockquote type="cite">


<div class="x_WordSection1">
<p class="x_MsoNormal"><span lang="EN-US">Dear all,</span></p>
<p class="x_MsoNormal"><span lang="EN-US">we have just finished implementing the Org Management code for our SAP HCM connector. We receive the messages via JMS and have implemented the sync code for that. All working fine too – the focus objects (Organisations)
 are created ok. The only issue is, there is no query method available as this is purely JMS based – so trying to perform recalculation on an organization throws a connectorexception regarding the non-implementation for this objectclass.
</span></p>
<p class="x_MsoNormal"><span lang="EN-US">What options do we have? a) implement a query method for this objectclass (ok, this will obviously fix the problem – but require more work) b) Make a new instance of the connector only for this objectclass and switch
 on shadow caching c) something else that I haven’t thought of?</span></p>
<p class="x_MsoNormal"><span lang="EN-US">Does this maybe need converting to a task rather than syncing through the connector?</span></p>
<p class="x_MsoNormal"><span lang="EN-US">Any ideas greatly appreciated </span><span lang="EN-US" style="font-family:Wingdings">J</span><span lang="EN-US"></span></p>
<p class="x_MsoNormal"><span lang="EN-US">Regards</span></p>
<p class="x_MsoNormal" style="margin-bottom:0cm; margin-bottom:.0001pt; line-height:normal">
<b><span lang="EN-US" style="color:#009DEC; text-transform:uppercase">CHRIS WOODS</span></b></p>
<p class="x_MsoNormal" style="margin-bottom:0cm; margin-bottom:.0001pt; line-height:normal">
<span lang="EN-US" style="color:#003C74">Identity Management</span></p>
<p class="x_MsoNormal" style="margin-bottom:0cm; margin-bottom:.0001pt; line-height:normal">
<span lang="EN-US" style="color:#003C74">Information and Business Technology</span></p>
<p class="x_MsoNormal" style="margin-bottom:0cm; margin-bottom:.0001pt; line-height:normal">
<span lang="EN-US" style="color:#003C74"> </span></p>
<p class="x_MsoNormal" style="margin-bottom:0cm; margin-bottom:.0001pt; line-height:normal">
<span style="color:#003C74">Rohde & Schwarz GmbH & Co. KG</span></p>
<p class="x_MsoNormal" style="margin-bottom:0cm; margin-bottom:.0001pt; line-height:normal">
<span style="color:#003C74">Mühldofstraße 15| 81671 München </span></p>
<p class="x_MsoNormal" style="margin-bottom:0cm; margin-bottom:.0001pt; line-height:normal">
<span style="color:#003C74">Telefon: +49 89 4129 15735 </span></p>
<p class="x_MsoNormal" style="margin-bottom:0cm; margin-bottom:.0001pt; line-height:normal">
<span style="color:#003C74">Internet: </span><span style="color:#003E76"><a href="https://www.rohde-schwarz.com/"><span style="color:#009DEC">https://www.rohde-schwarz.com</span></a></span><span style="color:#003C74"></span></p>
<p class="x_MsoNormal"> </p>
</div>
<br>
<fieldset class="x_mimeAttachmentHeader"></fieldset>
<pre class="x_moz-quote-pre">_______________________________________________
midPoint mailing list
<a class="x_moz-txt-link-abbreviated" href="mailto:midPoint@lists.evolveum.com">midPoint@lists.evolveum.com</a>
<a class="x_moz-txt-link-freetext" href="https://lists.evolveum.com/mailman/listinfo/midpoint">https://lists.evolveum.com/mailman/listinfo/midpoint</a>
</pre>
</blockquote>
</div>

<div>_______________________________________________</div>
<div>midPoint mailing list</div>
<div><a class="aqm-autolink aqm-autowrap" href="mailto:midPoint%40lists.evolveum.com">midPoint@lists.evolveum.com</a></div>
<div><a class="aqm-autolink aqm-autowrap" href="https://lists.evolveum.com/mailman/listinfo/midpoint">https://lists.evolveum.com/mailman/listinfo/midpoint</a></div></blockquote>
</div>
</div>
<!-- body end -->

</div><div dir="auto"><br></div>
</div></body>
</html>