﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;font size=4&gt;天快黑了的日志&lt;/font&gt;-随笔分类-Question</title><link>http://www.blogjava.net/zhvfeng/category/46044.html</link><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;i&gt;分享知识、分享快乐&lt;/i&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 25 Aug 2010 03:45:10 GMT</lastBuildDate><pubDate>Wed, 25 Aug 2010 03:45:10 GMT</pubDate><ttl>60</ttl><item><title>谁能解决多个MDB读取JBoss Topic上的BytesMessage出现的奇怪问题</title><link>http://www.blogjava.net/zhvfeng/archive/2010/08/24/329795.html</link><dc:creator>天快黑了</dc:creator><author>天快黑了</author><pubDate>Tue, 24 Aug 2010 07:54:00 GMT</pubDate><guid>http://www.blogjava.net/zhvfeng/archive/2010/08/24/329795.html</guid><wfw:comment>http://www.blogjava.net/zhvfeng/comments/329795.html</wfw:comment><comments>http://www.blogjava.net/zhvfeng/archive/2010/08/24/329795.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhvfeng/comments/commentRss/329795.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhvfeng/services/trackbacks/329795.html</trackback:ping><description><![CDATA[2个不同的MDB监听JBoss 4.2.3 上的同一个Topic (集成JBoss Messaging 1.4.2 SP1)，Topic上的消息是BytesMessage。发一个消息到Topic上，2个MDB都会收到这个消息。<br />
<br />
但奇怪的是只有一个MDB能正常读取BytesMesage，另一个MDB读取BytesMessage.<font style="background-color: #c0c0c0">readBytes</font>()始终返回-1<br />
<br />
同样的测试程序，在WebLogic上就正常。<br />
<br />
JBoss怎么会发送同一个BytesMessage对象到所有的subscriber？有人解决过同样的问题吗？ <br />
<br />
<br />
google了很长时间，也尝试了很多方法，似乎没什么好的办法。一种方法是避免使用BytesMessage, 还有一种方法就是使用反射，直接复制JBoss的BytesMessage实现。<br />
<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_35_358_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_358_Open_Text.style.display='none'; Codehighlighter1_35_358_Closed_Image.style.display='inline'; Codehighlighter1_35_358_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_35_358_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_35_358_Closed_Text.style.display='none'; Codehighlighter1_35_358_Open_Image.style.display='inline'; Codehighlighter1_35_358_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;onMessage(Message&nbsp;msg)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_35_358_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_35_358_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;BytesMessageProxy&nbsp;msgProxy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(BytesMessageProxy)msg;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;clazz&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MessageProxy.</span><span style="color: #0000ff">class</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Field&nbsp;field&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;clazz.getDeclaredField(</span><span style="color: #000000">"</span><span style="color: #000000">message</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field.setAccessible(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JBossMessage&nbsp;rawMsg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(JBossMessage)field.get(msgProxy);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BytesMessage&nbsp;newMsg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(BytesMessage)rawMsg.doCopy();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;read&nbsp;data&nbsp;from&nbsp;newMsg</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" /></span><span style="color: #000000">}</span></span></div>
<img src ="http://www.blogjava.net/zhvfeng/aggbug/329795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhvfeng/" target="_blank">天快黑了</a> 2010-08-24 15:54 <a href="http://www.blogjava.net/zhvfeng/archive/2010/08/24/329795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谁能帮忙解释一下为什么这个程序会死锁？</title><link>http://www.blogjava.net/zhvfeng/archive/2010/08/04/327956.html</link><dc:creator>天快黑了</dc:creator><author>天快黑了</author><pubDate>Wed, 04 Aug 2010 09:40:00 GMT</pubDate><guid>http://www.blogjava.net/zhvfeng/archive/2010/08/04/327956.html</guid><wfw:comment>http://www.blogjava.net/zhvfeng/comments/327956.html</wfw:comment><comments>http://www.blogjava.net/zhvfeng/archive/2010/08/04/327956.html#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://www.blogjava.net/zhvfeng/comments/commentRss/327956.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhvfeng/services/trackbacks/327956.html</trackback:ping><description><![CDATA[<p>&#160;大家不用关心程序实际逻辑是否正确，只是好奇，为什么这个程序会hang住不运行了？而且CPU会占用100%</p>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&#160;java.util.HashMap;<br />
<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&#160;TestLock&#160;{<br />
<br />
</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&#160;HashMap&#160;map&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;HashMap();<br />
<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;TestLock()&#160;{<br />
Thread&#160;t1&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Thread()&#160;{<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&#160;run()&#160;{<br />
</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&#160;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">50000</span><span style="color: #000000; ">;&#160;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&#160;{<br />
map.put(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Integer(i),&#160;i);<br />
}<br />
System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">t1&#160;over</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
}<br />
};<br />
<br />
Thread&#160;t2&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Thread()&#160;{<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&#160;run()&#160;{<br />
</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&#160;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">50000</span><span style="color: #000000; ">;&#160;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&#160;{<br />
map.put(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Integer(i),&#160;i);<br />
}<br />
<br />
System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">t2&#160;over</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
}<br />
};<br />
<br />
<br />
t1.start();<br />
t2.start();<br />
<br />
}<br />
<br />
<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&#160;main(String[]&#160;args)&#160;{&#160;&#160;&#160;&#160;<br />
</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;TestLock();<br />
}<br />
}<br />
</span></div>
<br />
<br />
Dump thread会看到，程序hang到：<br />
<br />
<p><font style="background-color: #c0c0c0">"Thread-1" prio=6 tid=0x00c70bd8 nid=0x914 runnable [0x02ebf000..0x02ebfc68]<br />
at java.util.HashMap.put(HashMap.java:420)<br />
at TestLock$2.run(TestLock.java:20)</font></p>
<p><font style="background-color: #c0c0c0">"Thread-0" prio=6 tid=0x00c70a50 nid=0x578 runnable [0x02e7f000..0x02e7fb68]<br />
at java.util.HashMap.put(HashMap.java:420)<br />
at TestLock$1.run(TestLock.java:11)<br />
</font></p>
 <img src ="http://www.blogjava.net/zhvfeng/aggbug/327956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhvfeng/" target="_blank">天快黑了</a> 2010-08-04 17:40 <a href="http://www.blogjava.net/zhvfeng/archive/2010/08/04/327956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>