<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="https://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    Interceptor issue
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="https://community.jboss.org/people/sri2">sri2</a> in <i>Beginner's Corner</i> - <a href="https://community.jboss.org/message/820493#820493">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Hi,</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I created an interceptor extending from <strong>BasicCustomInterceptor </strong>implementing with <strong>MBean </strong>with simple methods.</p><p>Initialized/Uninitiazed in <strong>start </strong>and <strong>stop </strong>overrided methods. It accesses these methods when creating and destroying bean.</p><p>Somehow it has <strong>not </strong>accessed to<strong> visitDistributedExecuteCommand</strong> override method where my logic reside to compute something in distributed mode with numOwners=2. If I override other methods like <strong>visitPutKeyValueCommand </strong>then it accesses.</p><p>To find the issue, I added some couple of methods by putting print out statement along <strong>return invokeNextInterceptor(ctx, command)</strong> Just for testing purpose. These methods are : </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>1)//Not Accessed</p><p>@Override</p><p>&#160;&#160;&#160; public Object visitSizeCommand(InvocationContext ctx, SizeCommand command)&#160; throws Throwable {</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println("Inside visitSizeCommand");</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; return invokeNextInterceptor(ctx, command);&#160;&#160;&#160;&#160;&#160;&#160;&#160; </p><p>&#160;&#160;&#160; }</p><p>2) //Not Accessed</p><p>@Override</p><p>public void visitCollection(InvocationContext ctx,&#160; Collection&lt;? extends VisitableCommand&gt; toVisit) throws Throwable {</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println("Inside visitCollection");</p><p>//&#160;&#160;&#160;&#160;&#160;&#160;&#160; debug("Collection Size: " + toVisit.size() );</p><p> }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>3) //Not Accessed</p><p>@Override</p><p>public&#160; &lt;V&gt; Object visitDistributedExecuteCommand(InvocationContext ctx, DistributedExecuteCommand&lt;V&gt; command) throws Throwable {</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println("++++++++++++Inside visitDistributedExecuteCommand()");</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Object o = invokeNextInterceptor(ctx, command);</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Some logic here</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; return o;</p><p>&#160;&#160;&#160; }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>4) // Accessed</p><p>@Override</p><p>&#160;&#160;&#160;&#160;&#160;&#160; public Object visitPutKeyValueCommand(InvocationContext ctx, PutKeyValueCommand cmd) throws Throwable {</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println("Ignoring this call to enforce read-only behavior");</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return invokeNextInterceptor(ctx, cmd);</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160;&#160;&#160;&#160; }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>5) // Accessed</p><p> @Override</p><p>&#160;&#160;&#160;&#160;&#160;&#160; visitRemoveCommand(InvocationContext ctx, RemoveCommand cmd) throws Throwable {</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println("Visited::::visitRemoveCommand");</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return invokeNextInterceptor(ctx, cmd);</p><p>&#160;&#160;&#160;&#160;&#160;&#160; }</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I'm using 5.3.0.Beta1 version with JDK 1.7.0_04. Interceptor added in config file. Testing with PiApproximationDemo and also with SimpleCache ( book, pay and list ) Infinispan book example.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Please advice how do I make it access to <strong>visitDistributedExecuteCommand </strong>override method. </p><p>And also advice how do I access to individual statistics from each node in distributed environment and show it on RHQ monitor/JConsole/JVisualVM by using MBeans or MXBeans.<strong><br/> </strong></p><p><span>Do I have to write a plug in for RHQ? Or Do I have to write purely JMX code? I have to see each node info in addition to&#160; these statistics from URL </span><a class="jive-link-external-small" href="http://docs.jboss.org/infinispan/5.1/apidocs/jmxComponents.html#Statistics" target="_blank">http://docs.jboss.org/infinispan/5.1/apidocs/jmxComponents.html#Statistics</a><span>.</span></p><p>Any input and code examples are appreciated. Thanks in Advance. </p><p>Sri</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Partial Config file:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160;&#160; &lt;global&gt;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;transport&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;properties&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name="configurationFile" value="jgroups.xml"/&gt;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/properties&gt;&#160;&#160;&#160;&#160;&#160;&#160; </p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/transport&gt;</p><p>&#160;&#160;&#160; &lt;/global&gt;&#160; </p><p>&#160;&#160; &lt;default&gt;&#160;&#160;&#160;&#160;&#160; </p><p>&#160;&#160;&#160;&#160;&#160;&#160; &lt;clustering mode="distribution"&gt;&#160;&#160;&#160;&#160;&#160;&#160; </p><p>&#160;&#160;&#160;&#160;&#160;&#160; &lt;sync/&gt;&#160;&#160;&#160;&#160;&#160;&#160; </p><p>&#160;&#160;&#160;&#160;&#160;&#160; &lt;hash numOwners="2"/&gt;&#160;&#160;&#160; </p><p>&#160;&#160;&#160;&#160;&#160; &lt;/clustering&gt; </p><p>&#160; </p><p>&#160;&#160;&#160;&#160;&#160; &lt;customInterceptors&gt;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;interceptor class="com.xxx.xxx.TestInterceptor" position="FIRST" /&gt;</p><p>&#160;&#160;&#160;&#160;&#160; &lt;/customInterceptors&gt;&#160;&#160;&#160;&#160;&#160; </p><p>&#160;&#160; &lt;/default&gt;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><strong>Output from SimpleCache Example:</strong></p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>May 30, 2013 3:31:11 PM org.infinispan.remoting.transport.jgroups.JGroupsTransport start</p><p>INFO: ISPN000078: Starting JGroups Channel</p><p>May 30, 2013 3:31:11 PM org.jgroups.logging.JDKLogImpl warn</p><p>WARNING: [JGRP00014] TP.discard_incompatible_packets has been deprecated: incompatible packets are discarded anyway</p><p>May 30, 2013 3:31:11 PM org.jgroups.logging.JDKLogImpl warn</p><p>WARNING: [JGRP00014] TP.enable_bundling has been deprecated: will be ignored as bundling is on by default</p><p>May 30, 2013 3:31:11 PM org.jgroups.logging.JDKLogImpl warn</p><p>WARNING: [JGRP00014] UNICAST.setTimeout has been deprecated: not used anymore</p><p>May 30, 2013 3:31:14 PM org.infinispan.remoting.transport.jgroups.JGroupsTransport viewAccepted</p><p>INFO: ISPN000094: Received new cluster view: [xxxx]</p><p>May 30, 2013 3:31:14 PM org.infinispan.remoting.transport.jgroups.JGroupsTransport startJGroupsChannelIfNeeded</p><p>INFO: ISPN000079: Cache local address is xxxx, physical addresses are [xxx]</p><p>May 30, 2013 3:31:14 PM org.infinispan.factories.GlobalComponentRegistry start</p><p>INFO: ISPN000128: Infinispan version: Infinispan 'Tactical Nuclear Penguin' 5.3.0.Beta1</p><p>*************registering MBean: com.xxx.xxx:type=TestInterceptor</p><p>********* Printing Interceptors from interceptorChain</p><p>********* Interceptor name: com.xxx.xxx.TestInterceptor</p><p>********* Interceptor name: org.infinispan.interceptors.InvocationContextInterceptor</p><p>********* Interceptor name: org.infinispan.statetransfer.StateTransferInterceptor</p><p>********* Interceptor name: org.infinispan.statetransfer.TransactionSynchronizerInterceptor</p><p>********* Interceptor name: org.infinispan.interceptors.NotificationInterceptor</p><p>********* Interceptor name: org.infinispan.interceptors.locking.NonTransactionalLockingInterceptor</p><p>********* Interceptor name: org.infinispan.interceptors.EntryWrappingInterceptor</p><p>********* Interceptor name: org.infinispan.interceptors.distribution.NonTxConcurrentDistributionInterceptor</p><p>********* Interceptor name: org.infinispan.interceptors.CallInterceptor</p><p>May 30, 2013 3:31:14 PM org.infinispan.jmx.CacheJmxRegistration start</p><p>INFO: ISPN000031: MBeans were successfully registered to the platform MBean server.</p><p>Ticket booking system</p><p>=====================</p><p>Commands: book, pay, list</p><p>&gt; book</p><p>Enter name aaa</p><p>Enter show 111</p><p>Visited::::visitPutKeyValueCommand </p><p>Booked ticket Ticket{name='aaa', show='111'}</p><p>&gt; book</p><p>Enter name bbb</p><p>Enter show 222</p><p>Visited::::visitPutKeyValueCommand </p><p>Booked ticket Ticket{name='bbb', show='222'}</p><p>&gt; list</p><p>Ticket{name='aaa', show='111'}</p><p>Ticket{name='bbb', show='222'}</p><p>&gt; pay</p><p>Enter ticketid 1</p><p>Visited::::visitRemoveCommand </p><p>Checked out ticket Ticket{name='aaa', show='111'}</p><p>&gt;</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="https://community.jboss.org/message/820493#820493">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in Beginner's Corner at <a href="https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2075">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>