Thanks for the encouraging reply, Brian.&nbsp; My followup is inline, and there&#39;s a proposed patch at the end.<br><br>Bill<br><br><div><span class="gmail_quote">On 4/6/07, <b class="gmail_sendername">Brian Stansberry</b> &lt;
<a href="mailto:brian.stansberry@redhat.com">brian.stansberry@redhat.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Bill Middleton wrote:<br>&gt; A cursory (and likely naive) inspection of DefaultCacheFactory and<br>&gt; CacheImpl seems to indicate that providing my own channel should be<br>&gt; fairly easy to implement, even if an extension won&#39;t quite get the job
<br>&gt; done, since channel is private.&nbsp;&nbsp;The intimidating part is the binding<br>&gt; between the &quot;official&quot; multiplexed channel (mbean) and other<br>&gt; functionality which implies a full app-server, such as the
<br>&gt; TransactionManager.<br><br>Not sure what you mean here by &quot;binding&quot;. Passing a JChannelFactoryMBean<br>to the RuntimeConfig doesn&#39;t carry with it a requirement to pass in a<br>TransactionManager. Think of RuntimeConfig as basically being a
<br>placeholder through which the external environment can pass in complex<br>objects the cache may need and through which callers can get access to a<br>few of the cache internals.</blockquote><div><br>Every test I run does insist upon looking for a TransactionManager, if one isn&#39;t found then a DummyTransactionManager is the &quot;fall back&quot; solution.&nbsp; Granted though, it&#39;s not bound to an app server.&nbsp; 
<br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">&gt; If I were to pass in a channel to CacheImpl,<br>&gt; whether multiplexed or not, I don&#39;t think I&#39;ll mess with
<br>&gt; setUsingMultiplexer() and friends in the Configuration. Since I&#39;m going<br>&gt; to manage the muliplexer functionality myself I guess it makes sense to<br>&gt; let Cache think that it&#39;s just a simple channel.&nbsp;&nbsp;This seems safe
<br>&gt; enough, I hope.<br>&gt;<br><br>Sure, as long as in reality it&#39;s a multiplexed channel, so the cache<br>doesn&#39;t get messages it won&#39;t understand. If you&#39;re writing your own<br>extensions, then presumably you know how the code will be used and can
<br>guard against misuse. So, the barrier for what&#39;s considered &quot;safe&quot; can<br>be a lot lower. :)</blockquote><div><br>My proposed patch doesn&#39;t require a multiplexed channel be passed in.&nbsp; The implementation can pass in either an ordinary JChannel (via new JChannel()) or one that&#39;s created via createMultiplexerChannel().&nbsp; All of the state transfer tests pass in either case.&nbsp; In neither case is the Configuration set using setUsingMultiplexer(true). isUsingMultiplexer is always false.&nbsp; Seems to work ok - all tests pass using an adapted 
StateTransferCompatibilityTest.java, anyhow.<br><br></div>Generally, my patch adds a new constructor, CacheImpl(Channel c).&nbsp; This is called by a new createChannel() method in the DefaultChannelFactory which accepts a channel, configuration, and boolean.&nbsp; If the new constructor is used to construct a ChannelImpl, then a global boolean is set which makes the create() method do the right thing at init-time.&nbsp; 
<br><br>Is this approach way too simple minded?&nbsp; It&#39;s not providing any additional access to the internals of the cache per se, but yes, one must be careful in configuring the channel.&nbsp; Whats still missing here is the ability to fetch the entire Element &lt;protocol_stacks&gt; from the Configuration and pass it directly to the JChannelFactory(Element) constructor, so that the external JGroups stack would be guaranteed to match the one which is specified in the config.
<br><br><br>Bill<br><br>PS -&nbsp; sorry about the indentation in the patch, Eclipse cant quite figure out the scheme that jbosscache is using.<br><br><div><br><br><br></div><br></div><br>