<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Sep 10, 2009, at 11:11 AM, Galder Zamarreno wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Hi Vladimir,<br><br>I had a look at the implementation and I'm not sure I understand the <br>need for the reflection visit calls in AbstractConfigurationBeanVisitor. <br>Using reflection makes harder to follow code and it's slower than typed <br>calls and I'm not sure of the reason to use it here.<br></div></blockquote>yes, I would also go for a strongly typed visitor for the same reasons.<br><blockquote type="cite"><div><br>Also, I don't see the need for a standard ConfigurationValidatingVisitor <br>that does such validation. Instead, the way I see it working is <br>SingletonStoreConfig having some kind of callback method being called, <br>i.e. the traversalCompleted() call and within it, SingletonStoreConfig <br>can, using the ComponentRegistry, retrieve the Transport component and <br>see if it's set or not. Or alternatively, SingletonStoreConfig could use <br>the passed InfinispanConfiguration to do its validation.<br></div></blockquote>I would go for the later approach, to do the validation in the start method, to keep the logic where the data is.</div><div>The only situation in which I would use an visitor, is if this validation requires some additional dependencies which are not natural - e.g. a dependency on Transport.</div><div>In this situation I would not like to make SingletonStore(Config) be aware/depend on Transport class (this is not a natural dependency), but I would rather 'externalize' the logic within some code.</div><div>This can be either within a visitor, or within some validator classes that can have access to the ComponentRegistry, and which are called right before starting the cache.<br><blockquote type="cite"><div><font class="Apple-style-span" color="#000000"><br></font>To sum up, I think each AbstractNamedCacheConfigurationBean <br>implementation should, if it requires to, have the ability to validate <br>the configuration via some kind of callback. Such callback should <br>probably is possibliy traversalCompleted() itself.<br><br>WDYT?<br><br>On 09/09/2009 08:21 PM, Vladimir Blagojevic wrote:<br><blockquote type="cite">Hi,<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Galder and I talked about this offline. Time to involve you guys!<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">I just completed visitor pattern for our configuration objects. Visitor<br></blockquote><blockquote type="cite">is passed from root of configuration - InfinispanConfiguration object.<br></blockquote><blockquote type="cite">InfinispanConfiguration class has a new method:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">public void accept(ConfigurationBeanVisitor v)<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">How do we want to integrate this visitor into existing structure?<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">1) We add a new factory method to InfinispanConfiguration with<br></blockquote><blockquote type="cite">additional ConfigurationBeanVisitor parameter<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">2) We leave everything as is and if there is a need to pass some visitor<br></blockquote><blockquote type="cite">we pass it to InfinispanConfiguration instance directly (from<br></blockquote><blockquote type="cite">DefaultCacheManager)<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">DefaultCacheManager will pass ValidationVisitor to<br></blockquote><blockquote type="cite">InfinispanConfiguration that will verify configuration semantically.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Regards,<br></blockquote><blockquote type="cite">Vladimir<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">On 09-09-09 10:19 AM, Galder Zamarreno wrote:<br></blockquote><blockquote type="cite"><blockquote type="cite">Good idea :)<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">On 09/09/2009 04:13 PM, Vladimir Blagojevic wrote:<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Yeah,<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">I was thinking that we can make a visitor for configuration tree and<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">then you can do verification of any node and other things as well. Use<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">cases will come up in the future for sure.<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Cheers<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">On 09-09-09 3:29 AM, Galder Zamarreno (JIRA) wrote:<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">[<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><a href="https://jira.jboss.org/jira/browse/ISPN-145?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12484894">https://jira.jboss.org/jira/browse/ISPN-145?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12484894</a>#action_12484894<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">]<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Galder Zamarreno commented on ISPN-145:<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">---------------------------------------<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Not sure I understand what you mean by generic though. You mean any<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">component to have a validation step of some sort?<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Thanks for taking this on :)<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">No transport and singleton store enabled should not be allowed<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">--------------------------------------------------------------<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Key: ISPN-145<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">URL: <a href="https://jira.jboss.org/jira/browse/ISPN-145">https://jira.jboss.org/jira/browse/ISPN-145</a><br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Project: Infinispan<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Issue Type: Bug<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Components: Loaders and Stores<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Affects Versions: 4.0.0.ALPHA6<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Reporter: Galder Zamarreno<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Assignee: Vladimir Blagojevic<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Priority: Minor<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Fix For: 4.0.0.CR1<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Throw configuration exception if singleton store configured without<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">transport having been configured.<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">It makes no sense to have singleton store enabled when there's no<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">transport.<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">_______________________________________________<br></blockquote><blockquote type="cite">infinispan-dev mailing list<br></blockquote><blockquote type="cite"><a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br></blockquote><blockquote type="cite"><a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev">https://lists.jboss.org/mailman/listinfo/infinispan-dev</a><br></blockquote><br>-- <br>Galder Zamarreņo<br>Sr. Software Engineer<br>Infinispan, JBoss Cache<br>_______________________________________________<br>infinispan-dev mailing list<br><a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>https://lists.jboss.org/mailman/listinfo/infinispan-dev<br></div></blockquote></div><br></body></html>