<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>VmPipeSessionCrossCommunicationTest xref</title>
<link type="text/css" rel="stylesheet" href="../../../../../stylesheet.css" />
</head>
<body>
<pre>

<a name="1" href="#1">1</a>   <em class="jxr_comment">/*</em>
<a name="2" href="#2">2</a>   <em class="jxr_comment"> * Licensed to the Apache Software Foundation (ASF) under one</em>
<a name="3" href="#3">3</a>   <em class="jxr_comment"> * or more contributor license agreements.  See the NOTICE file</em>
<a name="4" href="#4">4</a>   <em class="jxr_comment"> * distributed with this work for additional information</em>
<a name="5" href="#5">5</a>   <em class="jxr_comment"> * regarding copyright ownership.  The ASF licenses this file</em>
<a name="6" href="#6">6</a>   <em class="jxr_comment"> * to you under the Apache License, Version 2.0 (the</em>
<a name="7" href="#7">7</a>   <em class="jxr_comment"> * "License"); you may not use this file except in compliance</em>
<a name="8" href="#8">8</a>   <em class="jxr_comment"> * with the License.  You may obtain a copy of the License at</em>
<a name="9" href="#9">9</a>   <em class="jxr_comment"> *</em>
<a name="10" href="#10">10</a>  <em class="jxr_comment"> *   <a href="http://www.apache.org/licenses/LICENSE-2.0" target="alexandria_uri">http://www.apache.org/licenses/LICENSE-2.0</a></em>
<a name="11" href="#11">11</a>  <em class="jxr_comment"> *</em>
<a name="12" href="#12">12</a>  <em class="jxr_comment"> * Unless required by applicable law or agreed to in writing,</em>
<a name="13" href="#13">13</a>  <em class="jxr_comment"> * software distributed under the License is distributed on an</em>
<a name="14" href="#14">14</a>  <em class="jxr_comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</em>
<a name="15" href="#15">15</a>  <em class="jxr_comment"> * KIND, either express or implied.  See the License for the</em>
<a name="16" href="#16">16</a>  <em class="jxr_comment"> * specific language governing permissions and limitations</em>
<a name="17" href="#17">17</a>  <em class="jxr_comment"> * under the License.</em>
<a name="18" href="#18">18</a>  <em class="jxr_comment"> */</em>
<a name="19" href="#19">19</a>  <strong class="jxr_keyword">package</strong> org.apache.mina.transport.vmpipe;
<a name="20" href="#20">20</a>  
<a name="21" href="#21">21</a>  <strong class="jxr_keyword">import</strong> java.lang.management.ManagementFactory;
<a name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> java.lang.management.ThreadInfo;
<a name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> java.lang.management.ThreadMXBean;
<a name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.CountDownLatch;
<a name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.TimeUnit;
<a name="26" href="#26">26</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.atomic.AtomicReference;
<a name="27" href="#27">27</a>  
<a name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> junit.framework.TestCase;
<a name="29" href="#29">29</a>  
<a name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.future.ConnectFuture;
<a name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.service.IoAcceptor;
<a name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.service.IoConnector;
<a name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.service.IoHandlerAdapter;
<a name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.session.IoSession;
<a name="35" href="#35">35</a>  
<a name="36" href="#36">36</a>  <em class="jxr_javadoccomment">/**</em>
<a name="37" href="#37">37</a>  <em class="jxr_javadoccomment"> * TODO Add documentation</em>
<a name="38" href="#38">38</a>  <em class="jxr_javadoccomment"> * </em>
<a name="39" href="#39">39</a>  <em class="jxr_javadoccomment"> * @author The Apache MINA Project (dev@mina.apache.org)</em>
<a name="40" href="#40">40</a>  <em class="jxr_javadoccomment"> * @version $Rev: $, $Date:  $</em>
<a name="41" href="#41">41</a>  <em class="jxr_javadoccomment"> */</em>
<a name="42" href="#42">42</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/mina/transport/vmpipe/VmPipeSessionCrossCommunicationTest.html">VmPipeSessionCrossCommunicationTest</a> <strong class="jxr_keyword">extends</strong> TestCase {
<a name="43" href="#43">43</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testOneSessionTalkingBackAndForthDoesNotDeadlock() <strong class="jxr_keyword">throws</strong> Exception {
<a name="44" href="#44">44</a>          <strong class="jxr_keyword">final</strong> VmPipeAddress address = <strong class="jxr_keyword">new</strong> VmPipeAddress(1);
<a name="45" href="#45">45</a>          <strong class="jxr_keyword">final</strong> IoConnector connector = <strong class="jxr_keyword">new</strong> VmPipeConnector();
<a name="46" href="#46">46</a>          <strong class="jxr_keyword">final</strong> AtomicReference&lt;IoSession&gt; c1 = <strong class="jxr_keyword">new</strong> AtomicReference&lt;IoSession&gt;();
<a name="47" href="#47">47</a>          <strong class="jxr_keyword">final</strong> CountDownLatch latch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
<a name="48" href="#48">48</a>          <strong class="jxr_keyword">final</strong> CountDownLatch messageCount = <strong class="jxr_keyword">new</strong> CountDownLatch(2);
<a name="49" href="#49">49</a>          IoAcceptor acceptor = <strong class="jxr_keyword">new</strong> VmPipeAcceptor();
<a name="50" href="#50">50</a>  
<a name="51" href="#51">51</a>          acceptor.setHandler(<strong class="jxr_keyword">new</strong> IoHandlerAdapter() {
<a name="52" href="#52">52</a>              @Override
<a name="53" href="#53">53</a>              <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> messageReceived(IoSession session, Object message) <strong class="jxr_keyword">throws</strong> Exception {
<a name="54" href="#54">54</a>                  <em class="jxr_comment">//System.out.println(Thread.currentThread().getName() + ": " + message);</em>
<a name="55" href="#55">55</a>  
<a name="56" href="#56">56</a>                  <strong class="jxr_keyword">if</strong> (<span class="jxr_string">"start"</span>.equals(message)) {
<a name="57" href="#57">57</a>                      session.write(<span class="jxr_string">"open new"</span>);
<a name="58" href="#58">58</a>                  } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (<span class="jxr_string">"re-use c1"</span>.equals(message)) {
<a name="59" href="#59">59</a>                      session.write(<span class="jxr_string">"tell me something on c1 now"</span>);
<a name="60" href="#60">60</a>                  } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (((String) message).startsWith(<span class="jxr_string">"please don't deadlock"</span>)) {
<a name="61" href="#61">61</a>                      messageCount.countDown();
<a name="62" href="#62">62</a>                  } <strong class="jxr_keyword">else</strong> {
<a name="63" href="#63">63</a>                      fail(<span class="jxr_string">"unexpected message received "</span> + message);
<a name="64" href="#64">64</a>                  }
<a name="65" href="#65">65</a>              }
<a name="66" href="#66">66</a>          });
<a name="67" href="#67">67</a>          acceptor.bind(address);
<a name="68" href="#68">68</a>  
<a name="69" href="#69">69</a>          connector.setHandler(<strong class="jxr_keyword">new</strong> IoHandlerAdapter() {
<a name="70" href="#70">70</a>              @Override
<a name="71" href="#71">71</a>              <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> messageReceived(IoSession session, Object message) <strong class="jxr_keyword">throws</strong> Exception {
<a name="72" href="#72">72</a>                  <em class="jxr_comment">//System.out.println(Thread.currentThread().getName() + ": " + message);</em>
<a name="73" href="#73">73</a>  
<a name="74" href="#74">74</a>                  <strong class="jxr_keyword">if</strong> (<span class="jxr_string">"open new"</span>.equals(message)) {
<a name="75" href="#75">75</a>                      <em class="jxr_comment">//System.out.println("opening c2 from " + Thread.currentThread().getName());</em>
<a name="76" href="#76">76</a>  
<a name="77" href="#77">77</a>                      IoConnector c2 = <strong class="jxr_keyword">new</strong> VmPipeConnector();
<a name="78" href="#78">78</a>                      c2.setHandler(<strong class="jxr_keyword">new</strong> IoHandlerAdapter() {
<a name="79" href="#79">79</a>                          @Override
<a name="80" href="#80">80</a>                          <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> sessionOpened(IoSession session) <strong class="jxr_keyword">throws</strong> Exception {
<a name="81" href="#81">81</a>                              session.write(<span class="jxr_string">"re-use c1"</span>);
<a name="82" href="#82">82</a>                          }
<a name="83" href="#83">83</a>  
<a name="84" href="#84">84</a>                          @Override
<a name="85" href="#85">85</a>                          <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> messageReceived(IoSession session, Object message) <strong class="jxr_keyword">throws</strong> Exception {
<a name="86" href="#86">86</a>                              <em class="jxr_comment">//System.out.println(Thread.currentThread().getName() + ": " + message);</em>
<a name="87" href="#87">87</a>  
<a name="88" href="#88">88</a>                              <strong class="jxr_keyword">if</strong> (<span class="jxr_string">"tell me something on c1 now"</span>.equals(message)) {
<a name="89" href="#89">89</a>                                  latch.countDown();
<a name="90" href="#90">90</a>                                  c1.get().write(<span class="jxr_string">"please don't deadlock via c1"</span>);
<a name="91" href="#91">91</a>                              } <strong class="jxr_keyword">else</strong> {
<a name="92" href="#92">92</a>                                  fail(<span class="jxr_string">"unexpected message received "</span> + message);
<a name="93" href="#93">93</a>                              }
<a name="94" href="#94">94</a>                          }
<a name="95" href="#95">95</a>                      });
<a name="96" href="#96">96</a>  
<a name="97" href="#97">97</a>                      ConnectFuture c2Future = c2.connect(address);
<a name="98" href="#98">98</a>  
<a name="99" href="#99">99</a>                      c2Future.await();
<a name="100" href="#100">100</a> 
<a name="101" href="#101">101</a>                     latch.await();
<a name="102" href="#102">102</a> 
<a name="103" href="#103">103</a>                     c2Future.getSession().write(<span class="jxr_string">"please don't deadlock via c2"</span>);
<a name="104" href="#104">104</a>                 } <strong class="jxr_keyword">else</strong> {
<a name="105" href="#105">105</a>                     fail(<span class="jxr_string">"unexpeced message received "</span> + message);
<a name="106" href="#106">106</a>                 }
<a name="107" href="#107">107</a>             }
<a name="108" href="#108">108</a>         });
<a name="109" href="#109">109</a> 
<a name="110" href="#110">110</a>         ConnectFuture future = connector.connect(address);
<a name="111" href="#111">111</a> 
<a name="112" href="#112">112</a>         future.await();
<a name="113" href="#113">113</a> 
<a name="114" href="#114">114</a>         c1.set(future.getSession());
<a name="115" href="#115">115</a>         c1.get().write(<span class="jxr_string">"start"</span>);
<a name="116" href="#116">116</a> 
<a name="117" href="#117">117</a>         ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
<a name="118" href="#118">118</a> 
<a name="119" href="#119">119</a>         <strong class="jxr_keyword">while</strong> (!messageCount.await(100, TimeUnit.MILLISECONDS)) {
<a name="120" href="#120">120</a>             <strong class="jxr_keyword">long</strong>[] threads = threadMXBean.findMonitorDeadlockedThreads();
<a name="121" href="#121">121</a> 
<a name="122" href="#122">122</a>             <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">null</strong> != threads) {
<a name="123" href="#123">123</a>                 StringBuffer sb = <strong class="jxr_keyword">new</strong> StringBuffer(256);
<a name="124" href="#124">124</a>                 ThreadInfo[] infos = threadMXBean.getThreadInfo(threads, Integer.MAX_VALUE);
<a name="125" href="#125">125</a> 
<a name="126" href="#126">126</a>                 <strong class="jxr_keyword">for</strong> (ThreadInfo info : infos) {
<a name="127" href="#127">127</a>                     sb.append(info.getThreadName())
<a name="128" href="#128">128</a>                             .append(<span class="jxr_string">" blocked on "</span>)
<a name="129" href="#129">129</a>                             .append(info.getLockName())
<a name="130" href="#130">130</a>                             .append(<span class="jxr_string">" owned by "</span>)
<a name="131" href="#131">131</a>                             .append(info.getLockOwnerName())
<a name="132" href="#132">132</a>                             .append(<span class="jxr_string">"\n"</span>);
<a name="133" href="#133">133</a>                 }
<a name="134" href="#134">134</a> 
<a name="135" href="#135">135</a>                 <strong class="jxr_keyword">for</strong> (ThreadInfo info : infos) {
<a name="136" href="#136">136</a>                     sb.append(<span class="jxr_string">"\nStack for "</span>).append(info.getThreadName()).append(<span class="jxr_string">"\n"</span>);
<a name="137" href="#137">137</a>                     <strong class="jxr_keyword">for</strong> (StackTraceElement element : info.getStackTrace()) {
<a name="138" href="#138">138</a>                         sb.append(<span class="jxr_string">"\t"</span>).append(element).append(<span class="jxr_string">"\n"</span>);
<a name="139" href="#139">139</a>                     }
<a name="140" href="#140">140</a>                 }
<a name="141" href="#141">141</a> 
<a name="142" href="#142">142</a>                 fail(<span class="jxr_string">"deadlocked! \n"</span> + sb);
<a name="143" href="#143">143</a>             }
<a name="144" href="#144">144</a>         }
<a name="145" href="#145">145</a> 
<a name="146" href="#146">146</a>         acceptor.setCloseOnDeactivation(false);
<a name="147" href="#147">147</a>         acceptor.dispose();
<a name="148" href="#148">148</a>     }
<a name="149" href="#149">149</a> }
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

