<div dir="ltr"><br><div class="gmail_extra">@Gustavo, Concerning put it should return void, yes ! :D a little copy/paste mistake in the mail from me, sorry !</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 4, 2017 at 6:40 PM, William Burns <span dir="ltr">&lt;<a href="mailto:mudokonman@gmail.com" target="_blank">mudokonman@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 dir="ltr"><br><br><div class="gmail_quote"><span class=""><div dir="ltr">On Tue, Apr 4, 2017 at 11:45 AM Katia Aresti &lt;<a href="mailto:karesti@redhat.com" target="_blank">karesti@redhat.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_-4816806955866563743gmail_msg">Hi all,<div class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg"></div><div class="m_-4816806955866563743gmail_msg">As you probably know, Will and I are working on the vert-x infinispan integration [1], where the primary goal is to make infinispan the default cluster management of vert-x. (yeah!)</div><div class="m_-4816806955866563743gmail_msg">Vert-x needs support for an Async Multimap. Today&#39;s implementation is a wrapper on a normal Cache where only Cache Key&#39;s are used to implement the multi map [2].</div><div class="m_-4816806955866563743gmail_msg">This is not very efficient, so after trying some other alternative implementations [3] that don&#39;t fully work (injection not working), Will and I have come to the conclusion that it might be a good idea to start having our own native CacheMultimap. This first multimap won&#39;t support duplicate values on key&#39;s.</div><div class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg"></div><div class="m_-4816806955866563743gmail_msg">As a quick start, the smallest multimap we need should implement the following interface :<br class="m_-4816806955866563743gmail_msg"></div></div></blockquote><div> </div></span><div>I agree that having a very slim API to start should be better since we know how much trouble we get into implementing a very large API like ConcurrentMap :) </div><span class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_-4816806955866563743gmail_msg"><div class="m_-4816806955866563743gmail_msg"></div><div class="m_-4816806955866563743gmail_msg"><pre style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg"><span style="color:rgb(0,0,128);font-weight:bold" class="m_-4816806955866563743gmail_msg">public interface </span>CacheMultimap&lt;<span style="color:rgb(32,153,157)" class="m_-4816806955866563743gmail_msg">K</span>, <span style="color:rgb(32,153,157)" class="m_-4816806955866563743gmail_msg">V</span>&gt; {<br class="m_-4816806955866563743gmail_msg">   <span style="color:rgb(32,153,157)" class="m_-4816806955866563743gmail_msg">V </span>put(<span style="color:rgb(32,153,157)" class="m_-4816806955866563743gmail_msg">K </span>key, <span style="color:rgb(32,153,157)" class="m_-4816806955866563743gmail_msg">V </span>value);<br class="m_-4816806955866563743gmail_msg"></pre></div></div></blockquote></span><div>This should probably return a boolean or Void. I am leaning towards the first, but I am open either way.</div><span class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_-4816806955866563743gmail_msg"><div class="m_-4816806955866563743gmail_msg"><pre style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg">   Collection&lt;<span style="color:rgb(32,153,157)" class="m_-4816806955866563743gmail_msg">V</span>&gt; get(<span style="color:rgb(32,153,157)" class="m_-4816806955866563743gmail_msg">K </span>key);<br class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg">   <span style="color:rgb(0,0,128);font-weight:bold" class="m_-4816806955866563743gmail_msg">boolean </span>remove(<span style="color:rgb(32,153,157)" class="m_-4816806955866563743gmail_msg">K </span>key, <span style="color:rgb(32,153,157)" class="m_-4816806955866563743gmail_msg">V </span>value);<br class="m_-4816806955866563743gmail_msg"></pre></div></div></blockquote></span><div>We probably want a `boolean remove(K key)` method as well that removes all values mapped to the given key.</div><span class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_-4816806955866563743gmail_msg"><div class="m_-4816806955866563743gmail_msg"><pre style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg">}</pre><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg">CacheMultimapImpl</span> will be a wrapper on a normal Cache, similar to [3].</div><div class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg"></div><div class="m_-4816806955866563743gmail_msg">We could add a new method in <span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg">EmbeddedCacheManager.java</span></div><div class="m_-4816806955866563743gmail_msg"><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg"></span></div><div class="m_-4816806955866563743gmail_msg"><span style="background-color:rgb(255,255,255)" class="m_-4816806955866563743gmail_msg"><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg">&lt;</span><span style="font-family:menlo;font-size:9pt;color:rgb(32,153,157)" class="m_-4816806955866563743gmail_msg">K</span><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg">, </span><span style="font-family:menlo;font-size:9pt;color:rgb(32,153,157)" class="m_-4816806955866563743gmail_msg">V</span><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg">&gt; </span><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg">CacheMultimap</span><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg">&lt;</span><span style="font-family:menlo;font-size:9pt;color:rgb(32,153,157)" class="m_-4816806955866563743gmail_msg">K</span><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg">, </span><span style="font-family:menlo;font-size:9pt;color:rgb(32,153,157)" class="m_-4816806955866563743gmail_msg">V</span><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg">&gt; </span><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg">getCacheMultimap</span><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg">(String cacheName, </span><span style="font-family:menlo;font-size:9pt;color:rgb(0,0,128);font-weight:bold" class="m_-4816806955866563743gmail_msg">boolean </span><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg">createIfAbsent);</span></span></div></div></blockquote><div><br></div></span><div>I was thinking maybe this would exist in a separate module (outside of core)? or class that wraps (similar to DistributedExecutor) instead. My worry is about transactions, since the entry point to that is through Cache interface. The other option is we could add a `getCache` method on the `CacheMultiMap`.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><div dir="ltr" class="m_-4816806955866563743gmail_msg"><div class="m_-4816806955866563743gmail_msg"><span style="background-color:rgb(255,255,255)" class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg"></span></div><div class="m_-4816806955866563743gmail_msg"><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg"></span></div>Implementation will create a cache as always and return a new CacheMultimapImpl(cache). <div class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg"></div><div class="m_-4816806955866563743gmail_msg">What do you think ? Please fell free to suggest any other alternative or idea.<div class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg"></div><div class="m_-4816806955866563743gmail_msg">Cheers</div><div class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg"></div><div class="m_-4816806955866563743gmail_msg">Katia<br class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg">[1] <a href="https://github.com/vert-x3/vertx-infinispan" class="m_-4816806955866563743gmail_msg" target="_blank">https://github.com/vert-x3/<wbr>vertx-infinispan</a><br class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg">[2] <a href="https://github.com/vert-x3/vertx-infinispan/blob/master/src/main/java/io/vertx/ext/cluster/infinispan/impl/InfinispanAsyncMultiMap.java" class="m_-4816806955866563743gmail_msg" target="_blank">https://github.com/vert-x3/<wbr>vertx-infinispan/blob/master/<wbr>src/main/java/io/vertx/ext/<wbr>cluster/infinispan/impl/<wbr>InfinispanAsyncMultiMap.java</a><br class="m_-4816806955866563743gmail_msg"><br class="m_-4816806955866563743gmail_msg">[3] <a href="https://gist.github.com/karesti/194bb998856d4a2828d83754130ed79c" class="m_-4816806955866563743gmail_msg" target="_blank">https://gist.github.com/<wbr>karesti/<wbr>194bb998856d4a2828d83754130ed7<wbr>9c</a><div class="m_-4816806955866563743gmail_msg"><div class="m_-4816806955866563743gmail_msg"><div class="m_-4816806955866563743gmail_msg"><span style="color:rgb(0,0,0);font-family:menlo;font-size:9pt" class="m_-4816806955866563743gmail_msg"></span> </div></div></div></div></div></div></span><span class="">
______________________________<wbr>_________________<br class="m_-4816806955866563743gmail_msg">
infinispan-dev mailing list<br class="m_-4816806955866563743gmail_msg">
<a href="mailto:infinispan-dev@lists.jboss.org" class="m_-4816806955866563743gmail_msg" target="_blank">infinispan-dev@lists.jboss.org</a><br class="m_-4816806955866563743gmail_msg">
<a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" rel="noreferrer" class="m_-4816806955866563743gmail_msg" target="_blank">https://lists.jboss.org/<wbr>mailman/listinfo/infinispan-<wbr>dev</a></span></blockquote></div></div>
<br>______________________________<wbr>_________________<br>
infinispan-dev mailing list<br>
<a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/<wbr>mailman/listinfo/infinispan-<wbr>dev</a><br></blockquote></div><br></div></div>