<?xml version="1.0"?>
<rss version="2.0">
  <channel><title>JMS interface</title><link>http://bill.welliver.org//space/pike/JMS interface</link><description>It's pretty easy to take advantage of Java products from within Pike thanks to the Java module. The interface isn't completely seamless, but it's far easier than reinventing the wheel.&lt;p class="paragraph"/&gt;
&lt;b class="bold"&gt;News&lt;/b&gt;&lt;p class="paragraph"/&gt;
&lt;i class="ital"&gt;17 February 2007&lt;/i&gt;: The &lt;a href="/space/pike/Fins"&gt;Fins&lt;/a&gt; application framework now has support for asynchronous message handling using JMS. So now, the barrier to using JMS and Pike is even lower!.&lt;p class="paragraph"/&gt;
I was able to create a message producer and consumer with the &lt;a href="ActiveMQ" class="wiki_link_external" &gt;http://activemq.codehaus.org&lt;/a&gt; JMS server; it took about an hour (assuming you understand how JMS works!), and seems to work well enough. Because JMS is a specification, you can use any JMS compliant message broker here, like TIBCO EMS, MQSeries or OpenJMS.&lt;p class="paragraph"/&gt;
This simple message consumer uses JNDI to get the queue connection. It simply waits on for incoming messages to be delivered, then prints them out.&lt;p class="paragraph"/&gt;
Now Pike can play along with all of your other messaging enabled applications!&#xD;
&lt;div class="code"&gt;&lt;pre&gt;&lt;pre&gt;&#xD;
&lt;font color=red&gt;//&#xD;
&lt;/font&gt;&lt;font color=red&gt;// simple message consumer using JNDI and JMS&#xD;
&lt;/font&gt;&lt;font color=red&gt;//&#xD;
&lt;/font&gt;&lt;b&gt;&lt;font color=darkgreen&gt;int &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;main&lt;/font&gt;&lt;/b&gt;()&#xD;
{&lt;p class="paragraph"/&gt;
&lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;x&lt;/font&gt;&lt;/b&gt; = Java.pkg&amp;#91;&lt;i&gt;&lt;font color=darkred&gt;"javax/naming/InitialContext"&lt;/font&gt;&lt;/i&gt;]();&#xD;
&lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;factory&lt;/font&gt;&lt;/b&gt; = x-&amp;gt;_method(&lt;i&gt;&lt;font color=darkred&gt;"lookup"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"(Ljava/lang/String;)Ljava/lang/Object;"&lt;/font&gt;&lt;/i&gt;)(&lt;i&gt;&lt;font color=darkred&gt;"ConnectionFactory"&lt;/font&gt;&lt;/i&gt;);&#xD;
&lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;t&lt;/font&gt;&lt;/b&gt; = x-&amp;gt;_method(&lt;i&gt;&lt;font color=darkred&gt;"lookup"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"(Ljava/lang/String;)Ljava/lang/Object;"&lt;/font&gt;&lt;/i&gt;)(&lt;i&gt;&lt;font color=darkred&gt;"MyQueue"&lt;/font&gt;&lt;/i&gt;);&#xD;
&lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;qc&lt;/font&gt;&lt;/b&gt; = factory-&amp;gt;createQueueConnection();&#xD;
&lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;s&lt;/font&gt;&lt;/b&gt; = qc-&amp;gt;createQueueSession(0, 0);&#xD;
&lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;sub&lt;/font&gt;&lt;/b&gt; = s-&amp;gt;createReceiver(t);&#xD;
write(&lt;i&gt;&lt;font color=darkred&gt;"getting ready to receive&amp;amp;#110;"&lt;/font&gt;&lt;/i&gt;);&#xD;
qc-&amp;gt;start();&#xD;
&lt;b&gt;&lt;font color=darkblue&gt;do&lt;/font&gt;&lt;/b&gt;{&#xD;
  &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;m&lt;/font&gt;&lt;/b&gt; = sub-&amp;gt;receive();&lt;p class="paragraph"/&gt;
  &lt;b&gt;&lt;font color=darkblue&gt;if&lt;/font&gt;&lt;/b&gt;(m)&#xD;
  {&#xD;
    write(&lt;i&gt;&lt;font color=darkred&gt;"--&amp;gt; message %O to %O: %O&amp;amp;#110;"&lt;/font&gt;&lt;/i&gt;, &#xD;
      (&lt;b&gt;&lt;font color=darkgreen&gt;string&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;&lt;/font&gt;&lt;/b&gt;)m-&amp;gt;getJMSMessageID(), &#xD;
      (&lt;b&gt;&lt;font color=darkgreen&gt;string&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;&lt;/font&gt;&lt;/b&gt;)m-&amp;gt;getJMSDestination()-&amp;gt;toString(), &#xD;
      (&lt;b&gt;&lt;font color=darkgreen&gt;string&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;&lt;/font&gt;&lt;/b&gt;)m-&amp;gt;getText()); &#xD;
  }&#xD;
} &lt;b&gt;&lt;font color=darkblue&gt;while&lt;/font&gt;&lt;/b&gt;(1);&#xD;
&lt;b&gt;&lt;font color=darkblue&gt;return&lt;/font&gt;&lt;/b&gt; 0;&#xD;
}&lt;p class="paragraph"/&gt;
&lt;/pre&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p class="paragraph"/&gt;
&#xD;
Here's the message producer:&lt;p class="paragraph"/&gt;
&lt;div class="code"&gt;&lt;pre&gt;&lt;pre&gt;&#xD;
&lt;font color=red&gt;// &#xD;
&lt;/font&gt;&lt;font color=red&gt;// simple message producer using JNDI and JMS&#xD;
&lt;/font&gt;&lt;font color=red&gt;//&#xD;
&lt;/font&gt;&lt;b&gt;&lt;font color=darkgreen&gt;int &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;main&lt;/font&gt;&lt;/b&gt;()&#xD;
{&lt;p class="paragraph"/&gt;
&lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;x&lt;/font&gt;&lt;/b&gt; = Java.pkg&amp;#91;&lt;i&gt;&lt;font color=darkred&gt;"javax/naming/InitialContext"&lt;/font&gt;&lt;/i&gt;]();&#xD;
&lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;factory&lt;/font&gt;&lt;/b&gt; = x-&amp;gt;_method(&lt;i&gt;&lt;font color=darkred&gt;"lookup"&lt;/font&gt;&lt;/i&gt;,     &lt;i&gt;&lt;font color=darkred&gt;"(Ljava/lang/String;)Ljava/lang/Object;"&lt;/font&gt;&lt;/i&gt;)(&lt;i&gt;&lt;font color=darkred&gt;"ConnectionFactory"&lt;/font&gt;&lt;/i&gt;);&#xD;
&lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;t&lt;/font&gt;&lt;/b&gt; = x-&amp;gt;_method(&lt;i&gt;&lt;font color=darkred&gt;"lookup"&lt;/font&gt;&lt;/i&gt;,     &lt;i&gt;&lt;font color=darkred&gt;"(Ljava/lang/String;)Ljava/lang/Object;"&lt;/font&gt;&lt;/i&gt;)(&lt;i&gt;&lt;font color=darkred&gt;"MyQueue"&lt;/font&gt;&lt;/i&gt;);&#xD;
write(&lt;i&gt;&lt;font color=darkred&gt;"topic: %O&amp;amp;#110;"&lt;/font&gt;&lt;/i&gt;, (&lt;b&gt;&lt;font color=darkgreen&gt;string&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;&lt;/font&gt;&lt;/b&gt;)t-&amp;gt;toString());&#xD;
&lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;qc&lt;/font&gt;&lt;/b&gt; = factory-&amp;gt;createQueueConnection();&#xD;
&lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;s&lt;/font&gt;&lt;/b&gt; = qc-&amp;gt;createQueueSession(0,0); &#xD;
&lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;sub&lt;/font&gt;&lt;/b&gt; = s-&amp;gt;createSender(t);&#xD;
write(&lt;i&gt;&lt;font color=darkred&gt;"getting ready to send&amp;amp;#110;"&lt;/font&gt;&lt;/i&gt;);&#xD;
&lt;b&gt;&lt;font color=darkgreen&gt;int &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;i=0&lt;/font&gt;&lt;/b&gt;;&#xD;
&lt;b&gt;&lt;font color=darkblue&gt;do&lt;/font&gt;&lt;/b&gt;{&#xD;
  &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;m&lt;/font&gt;&lt;/b&gt; = s-&amp;gt;createTextMessage();&#xD;
  m-&amp;gt;setText(&lt;i&gt;&lt;font color=darkred&gt;"this is a test "&lt;/font&gt;&lt;/i&gt; &lt;ins class="inserted"&gt; i++ &lt;/ins&gt;&lt;i&gt;&lt;font color=darkred&gt;".&amp;amp;#110;"&lt;/font&gt;&lt;/i&gt;);&#xD;
  sub-&amp;gt;send(m);&#xD;
  sleep(1);&#xD;
} &lt;b&gt;&lt;font color=darkblue&gt;while&lt;/font&gt;&lt;/b&gt;(1);&#xD;
&lt;b&gt;&lt;font color=darkblue&gt;return&lt;/font&gt;&lt;/b&gt; 0;&#xD;
}&#xD;
&lt;/pre&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p class="paragraph"/&gt;
&#xD;
For those of you who like to do things the hard way (perhaps squeezing a little extra performance in the process, here's the full-up manual version. You'll note that the low level interface to Java is a very close mapping of JNI:&lt;p class="paragraph"/&gt;
&lt;div class="code"&gt;&lt;pre&gt;&lt;pre&gt;&#xD;
#define FINDCLASS(X) (jvm-&amp;gt;find_class(X)||(jvm-&amp;gt;exception_describe(),jvm-&amp;gt;exception_clear(),error(&lt;i&gt;&lt;font color=darkred&gt;"Failed to load class "&lt;/font&gt;&lt;/i&gt; X &lt;i&gt;&lt;font color=darkred&gt;".&amp;amp;#110;"&lt;/font&gt;&lt;/i&gt;),0))&lt;p class="paragraph"/&gt;
static &lt;b&gt;&lt;font color=darkblue&gt;constant&lt;/font&gt;&lt;/b&gt; jvm = Java.machine;&lt;p class="paragraph"/&gt;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;initial_context_class&lt;/font&gt;&lt;/b&gt; = FINDCLASS(&lt;i&gt;&lt;font color=darkred&gt;"javax/naming/InitialContext"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;queue_connection_factory_class&lt;/font&gt;&lt;/b&gt; = FINDCLASS(&lt;i&gt;&lt;font color=darkred&gt;"javax/jms/QueueConnectionFactory"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;queue_connection_class&lt;/font&gt;&lt;/b&gt; = FINDCLASS(&lt;i&gt;&lt;font color=darkred&gt;"javax/jms/QueueConnection"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;queue_session_class&lt;/font&gt;&lt;/b&gt; = FINDCLASS(&lt;i&gt;&lt;font color=darkred&gt;"javax/jms/QueueSession"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;queue_receiver_class&lt;/font&gt;&lt;/b&gt; = FINDCLASS(&lt;i&gt;&lt;font color=darkred&gt;"javax/jms/QueueReceiver"&lt;/font&gt;&lt;/i&gt;);&lt;p class="paragraph"/&gt;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;message_class&lt;/font&gt;&lt;/b&gt; = FINDCLASS(&lt;i&gt;&lt;font color=darkred&gt;"javax/jms/TextMessage"&lt;/font&gt;&lt;/i&gt;);&lt;p class="paragraph"/&gt;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;initial_context_init&lt;/font&gt;&lt;/b&gt; = initial_context_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"&amp;lt;init&amp;gt;"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"()V"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;initial_context_lookup&lt;/font&gt;&lt;/b&gt; = initial_context_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"lookup"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"(Ljava/lang/String;)Ljava/lang/Object;"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;qcf_create_queue_connection&lt;/font&gt;&lt;/b&gt; = queue_connection_factory_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"createQueueConnection"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"()Ljavax/jms/QueueConnection;"&lt;/font&gt;&lt;/i&gt;);&lt;p class="paragraph"/&gt;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;qc_create_queue_session&lt;/font&gt;&lt;/b&gt; = queue_connection_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"createQueueSession"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"(ZI)Ljavax/jms/QueueSession;"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;qs_create_receiver&lt;/font&gt;&lt;/b&gt; = queue_session_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"createReceiver"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"(Ljavax/jms/Queue;)Ljavax/jms/QueueReceiver;"&lt;/font&gt;&lt;/i&gt;);&lt;p class="paragraph"/&gt;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;r_receive&lt;/font&gt;&lt;/b&gt; = queue_receiver_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"receive"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"()Ljavax/jms/Message;"&lt;/font&gt;&lt;/i&gt;);&lt;p class="paragraph"/&gt;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;c_start&lt;/font&gt;&lt;/b&gt; = queue_connection_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"start"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"()V"&lt;/font&gt;&lt;/i&gt;);&lt;p class="paragraph"/&gt;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;m_get_message_id&lt;/font&gt;&lt;/b&gt; = message_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"getJMSMessageID"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"()Ljava/lang/String;"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;m_get_destination&lt;/font&gt;&lt;/b&gt; = message_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"getJMSDestination"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"()Ljavax/jms/Destination;"&lt;/font&gt;&lt;/i&gt;);&lt;p class="paragraph"/&gt;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;m_get_text&lt;/font&gt;&lt;/b&gt; = message_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"getText"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"()Ljava/lang/String;"&lt;/font&gt;&lt;/i&gt;);&lt;p class="paragraph"/&gt;
&lt;font color=red&gt;/* for exception handling */&lt;/font&gt;&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;stringwriter_class&lt;/font&gt;&lt;/b&gt; = FINDCLASS(&lt;i&gt;&lt;font color=darkred&gt;"java/io/StringWriter"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;printwriter_class&lt;/font&gt;&lt;/b&gt; = FINDCLASS(&lt;i&gt;&lt;font color=darkred&gt;"java/io/PrintWriter"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;throwable_class&lt;/font&gt;&lt;/b&gt; = FINDCLASS(&lt;i&gt;&lt;font color=darkred&gt;"java/lang/Throwable"&lt;/font&gt;&lt;/i&gt;);&lt;p class="paragraph"/&gt;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;stringwriter_init&lt;/font&gt;&lt;/b&gt; = &lt;b&gt;&lt;font color=darkgreen&gt;string&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;writer_class-&amp;gt;get_method&lt;/font&gt;&lt;/b&gt;(&lt;i&gt;&lt;font color=darkred&gt;"&amp;lt;init&amp;gt;"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"()V"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;printwriter_init&lt;/font&gt;&lt;/b&gt; = printwriter_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"&amp;lt;init&amp;gt;"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"(Ljava/io/Writer;)V"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;printwriter_flush&lt;/font&gt;&lt;/b&gt; = printwriter_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"flush"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"()V"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;throwable_printstacktrace&lt;/font&gt;&lt;/b&gt; = throwable_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"printStackTrace"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"(Ljava/io/PrintWriter;)V"&lt;/font&gt;&lt;/i&gt;);&#xD;
static &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;throwable_getmessage&lt;/font&gt;&lt;/b&gt; = throwable_class-&amp;gt;get_method(&lt;i&gt;&lt;font color=darkred&gt;"getMessage"&lt;/font&gt;&lt;/i&gt;, &lt;i&gt;&lt;font color=darkred&gt;"()Ljava/lang/String;"&lt;/font&gt;&lt;/i&gt;);&lt;p class="paragraph"/&gt;
&lt;p class="paragraph"/&gt;
static &lt;b&gt;&lt;font color=darkgreen&gt;void &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;check_exception&lt;/font&gt;&lt;/b&gt;()&#xD;
{&#xD;
  &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;e&lt;/font&gt;&lt;/b&gt; = jvm-&amp;gt;exception_occurred();&#xD;
  &lt;b&gt;&lt;font color=darkblue&gt;if&lt;/font&gt;&lt;/b&gt;(e) {&#xD;
    jvm-&amp;gt;exception_clear();&#xD;
    &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;sw&lt;/font&gt;&lt;/b&gt; = &lt;b&gt;&lt;font color=darkgreen&gt;string&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;writer_class-&amp;gt;alloc&lt;/font&gt;&lt;/b&gt;();&#xD;
    &lt;b&gt;&lt;font color=darkgreen&gt;string&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;writer_init&lt;/font&gt;&lt;/b&gt;(sw);&#xD;
    &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;pw&lt;/font&gt;&lt;/b&gt; = printwriter_class-&amp;gt;alloc();&#xD;
    printwriter_init(pw, sw);&#xD;
    throwable_printstacktrace(e, pw);&#xD;
    printwriter_flush(pw);&#xD;
    &lt;b&gt;&lt;font color=darkgreen&gt;array &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;bt&lt;/font&gt;&lt;/b&gt; = backtrace();&#xD;
    &lt;font color=red&gt;// FIXME: KLUDGE: Sometimes the cast fails for some reason.  &#xD;
&lt;/font&gt;    &lt;b&gt;&lt;font color=darkgreen&gt;string &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;s&lt;/font&gt;&lt;/b&gt; = &lt;i&gt;&lt;font color=darkred&gt;"Unknown Java exception (StringWriter failed)"&lt;/font&gt;&lt;/i&gt;;&#xD;
    &lt;b&gt;&lt;font color=darkblue&gt;catch&lt;/font&gt;&lt;/b&gt; {&#xD;
      s = (&lt;b&gt;&lt;font color=darkgreen&gt;string&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;&lt;/font&gt;&lt;/b&gt;)sw;&#xD;
    };&#xD;
    &lt;b&gt;&lt;font color=darkblue&gt;throw&lt;/font&gt;&lt;/b&gt;(({s, bt&amp;#91;..sizeof(bt)-2]}));&#xD;
  }&#xD;
}&lt;p class="paragraph"/&gt;
&lt;b&gt;&lt;font color=darkgreen&gt;int &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;main&lt;/font&gt;&lt;/b&gt;()&#xD;
{&lt;p class="paragraph"/&gt;
  &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;initial_context&lt;/font&gt;&lt;/b&gt; = initial_context_class-&amp;gt;alloc();&lt;p class="paragraph"/&gt;
  initial_context_init-&amp;gt;call_nonvirtual(initial_context);&#xD;
  check_exception();&lt;p class="paragraph"/&gt;
  &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;factory&lt;/font&gt;&lt;/b&gt; = initial_context_lookup-&amp;gt;call_nonvirtual(initial_context, &lt;i&gt;&lt;font color=darkred&gt;"ConnectionFactory"&lt;/font&gt;&lt;/i&gt;);&#xD;
  check_exception();&lt;p class="paragraph"/&gt;
  &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;queue&lt;/font&gt;&lt;/b&gt; = initial_context_lookup-&amp;gt;call_nonvirtual(initial_context, &lt;i&gt;&lt;font color=darkred&gt;"MyQueue"&lt;/font&gt;&lt;/i&gt;);&#xD;
  check_exception();&lt;p class="paragraph"/&gt;
  &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;qc&lt;/font&gt;&lt;/b&gt; = qcf_create_queue_connection-&amp;gt;call_nonvirtual(factory);&#xD;
  check_exception();&lt;p class="paragraph"/&gt;
  &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;qs&lt;/font&gt;&lt;/b&gt; = qc_create_queue_session-&amp;gt;call_nonvirtual(qc, 0, 0);&#xD;
  check_exception();&lt;p class="paragraph"/&gt;
  &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;receiver&lt;/font&gt;&lt;/b&gt; = qs_create_receiver-&amp;gt;call_nonvirtual(qs, queue);&#xD;
  check_exception();&lt;p class="paragraph"/&gt;
  write(&lt;i&gt;&lt;font color=darkred&gt;"getting ready to receive&amp;amp;#110;"&lt;/font&gt;&lt;/i&gt;);&lt;p class="paragraph"/&gt;
  c_start-&amp;gt;call_nonvirtual(qc);&#xD;
  check_exception();&lt;p class="paragraph"/&gt;
  do&#xD;
  {&#xD;
    &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;m&lt;/font&gt;&lt;/b&gt; = r_receive-&amp;gt;call_nonvirtual(receiver);&#xD;
    &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;id&lt;/font&gt;&lt;/b&gt; = m_get_message_id(m);&#xD;
    &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;dest&lt;/font&gt;&lt;/b&gt; = m_get_destination(m);&#xD;
    &lt;b&gt;&lt;font color=darkgreen&gt;object &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;text&lt;/font&gt;&lt;/b&gt; = m_get_text(m);&#xD;
    write(&lt;i&gt;&lt;font color=darkred&gt;"--&amp;gt; message %O to %O: %O&amp;amp;#110;"&lt;/font&gt;&lt;/i&gt;, (&lt;b&gt;&lt;font color=darkgreen&gt;string&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;&lt;/font&gt;&lt;/b&gt;)id, (&lt;b&gt;&lt;font color=darkgreen&gt;string&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;&lt;/font&gt;&lt;/b&gt;)dest, (&lt;b&gt;&lt;font color=darkgreen&gt;string&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=darkbrown&gt;&lt;/font&gt;&lt;/b&gt;)text);&#xD;
  } &lt;b&gt;&lt;font color=darkblue&gt;while&lt;/font&gt;&lt;/b&gt; (1);&lt;p class="paragraph"/&gt;
  &lt;b&gt;&lt;font color=darkblue&gt;return&lt;/font&gt;&lt;/b&gt; 0;&lt;p class="paragraph"/&gt;
}&lt;p class="paragraph"/&gt;
&lt;/pre&gt;&lt;/pre&gt;&lt;/div&gt;
</description><generator>Fins 0.9.7</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs></channel>
</rss>
