⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jms6.html

📁 j2eePDF格式的电子书
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="wp86538"> </a><div class="pSmartList1"><li><code class="cCode">ControlQueue</code>, an additional queue</li></div><a name="wp86539"> </a><div class="pSmartList1"><li><code class="cCode">jms/DurableTopicConnectionFactory</code>, a connection factory with a client ID (see <a  href="JMS6.html#wp81941">Creating Durable Subscriptions</a> for more information)</li></div></ul></div><a name="wp86528"> </a><p class="pBody">Use the Admin Console to create the new queue and connection factory as follows:</p><div class="pSmartList1"><ol type="1" class="pSmartList1"><a name="wp97047"> </a><div class="pSmartList1"><li>Create a physical destination of type <code class="cCode">queue</code> with the name <code class="cCode">ControlQueueP</code>.</li></div><a name="wp97048"> </a><div class="pSmartList1"><li>Create a destination resource with the name <code class="cCode">ControlQueue</code> and type <code class="cCode">javax.jms.Queue</code>. Add the property <code class="cCode">Name</code> with the value <code class="cCode">ControlQueueP</code>.</li></div><a name="wp97051"> </a><div class="pSmartList1"><li>Create a connection factory with the name <code class="cCode">jms/DurableTopicConnectionFactory</code> and type <code class="cCode">javax.jms.TopicConnectionFactory</code>. Add the property <code class="cCode">ClientId</code> with the value <code class="cCode">MyID</code>.</li></div></ol></div><a name="wp86549"> </a><p class="pBody">If you did not do so previously, compile the source file:</p><div class="pPreformattedRelative"><pre class="pPreformattedRelative">asant build<a name="wp87028"> </a></pre></div><a name="wp87029"> </a><p class="pBody">To package the program, perform the following steps:</p><div class="pSmartList1"><ol type="1" class="pSmartList1"><a name="wp92610"> </a><div class="pSmartList1"><li>If you did not do so before, start <code class="cCode">deploytool</code>.</li></div><a name="wp92613"> </a><div class="pSmartList1"><li>Choose File<span style="font-family: Symbol"><img src="images/arrwrite.gif" border="0" alt="Right Arrow"></span>New<span style="font-family: Symbol"><img src="images/arrwrite.gif" border="0" alt="Right Arrow"></span>Application Client to start the Application Client Wizard.</li></div><a name="wp92614"> </a><div class="pSmartList1"><li>Select the radio button labeled Create New Stand-Alone AppClient Module.</li></div><a name="wp92615"> </a><div class="pSmartList1"><li>Click Browse next to the AppClient Location field and navigate to the <code class="cCode">&lt;</code><code class="cVariable">INSTALL</code><code class="cCode">&gt;/j2eetutorial14/examples/jms/advanced/</code> directory.</li></div><a name="wp92616"> </a><div class="pSmartList1"><li>Type <code class="cCode">AckEquivExample</code> in the File Name field and click Choose Module File.</li></div><a name="wp92617"> </a><div class="pSmartList1"><li>Verify that <code class="cCode">AckEquivExample</code> appears in the AppClient Name field.</li></div><a name="wp92618"> </a><div class="pSmartList1"><li>Click the Edit button next to the Contents text area. </li></div><a name="wp92619"> </a><div class="pSmartList1"><li>In the dialog box, locate the <code class="cCode">build</code> directory. Select the seven classes whose names begin with <code class="cCode">AckEquivExample</code> from the Available Files tree and click Add.</li></div><a name="wp92684"> </a><div class="pSmartList1"><li>Select the two classes whose names begin with <code class="cCode">SampleUtilities</code> from the Available Files tree and click Add, then OK.</li></div><a name="wp96826"> </a><div class="pSmartList1"><li>Click Next.</li></div><a name="wp92620"> </a><div class="pSmartList1"><li>In the General screen, select <code class="cCode">AckEquivExample</code> in the Main Class combo box.</li></div><a name="wp92621"> </a><div class="pSmartList1"><li>Click Next.</li></div><a name="wp92622"> </a><div class="pSmartList1"><li>Click Finish.</li></div></ol></div><a name="wp92606"> </a><p class="pBody">To run the program, use the following command:</p><div class="pPreformattedRelative"><pre class="pPreformattedRelative">appclient -client AckEquivExample.jar<a name="wp83617"> </a></pre></div><a name="wp83618"> </a><p class="pBody">The program output looks like this:</p><div class="pPreformattedRelative"><pre class="pPreformattedRelative">Queue name is ControlQueueQueue name is jms/QueueTopic name is jms/TopicConnection factory name is jms/DurableTopicConnectionFactory  SENDER: Created client-acknowledge session  SENDER: Sending message: Here is a client-acknowledge message  RECEIVER: Created client-acknowledge session  RECEIVER: Processing message: Here is a client-acknowledge message  RECEIVER: Now I'll acknowledge the messagePUBLISHER: Created auto-acknowledge sessionSUBSCRIBER: Created auto-acknowledge sessionPUBLISHER: Receiving synchronize messages from ControlQueue; count = 1SUBSCRIBER: Sending synchronize message to ControlQueuePUBLISHER: Received synchronize message;  expect 0 morePUBLISHER: Publishing message: Here is an auto-acknowledge message 1PUBLISHER: Publishing message: Here is an auto-acknowledge message 2SUBSCRIBER: Processing message: Here is an auto-acknowledge message 1PUBLISHER: Publishing message: Here is an auto-acknowledge message 3SUBSCRIBER: Processing message: Here is an auto-acknowledge message 2SUBSCRIBER: Processing message: Here is an auto-acknowledge message 3<a name="wp92698"> </a></pre></div><a name="wp97273"> </a><p class="pBody">After you run the program, you can delete the physical destination <code class="cCode">ControlQueueP</code> and the destination resource <code class="cCode">ControlQueue</code>.</p><a name="wp81843"> </a><h4 class="pHeading3">Specifying Message Persistence</h4><a name="wp81844"> </a><p class="pBody">The JMS API supports two delivery modes for messages to specify whether messages are lost if the JMS provider fails. These delivery modes are fields of the <code class="cCode">DeliveryMode</code> interface.</p><div class="pSmartList1"><ul class="pSmartList1"><a name="wp81846"> </a><div class="pSmartList1"><li>The <code class="cCode">PERSISTENT</code> delivery mode, which is the default, instructs the JMS provider to take extra care to ensure that a message is not lost in transit in case of a JMS provider failure. A message sent with this delivery mode is logged to stable storage when it is sent.</li></div><a name="wp81848"> </a><div class="pSmartList1"><li>The <code class="cCode">NON_PERSISTENT</code> delivery mode does not require the JMS provider to store the message or otherwise guarantee that it is not lost if the provider fails. </li></div></ul></div><a name="wp81849"> </a><p class="pBody">You can specify the delivery mode in either of two ways.</p><div class="pSmartList1"><ul class="pSmartList1"><a name="wp81850"> </a><div class="pSmartList1"><li>You can use the <code class="cCode">setDeliveryMode</code> method of the <code class="cCode">MessageProducer</code> interface to set the delivery mode for all messages sent by that producer. For example, the following call sets the delivery mode to <code class="cCode">NON_PERSISTENT</code> for a producer:</li></div><a name="wp81851"> </a><p class="pBodyRelative"><code class="cCode">producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);</code></p><a name="wp81852"> </a><div class="pSmartList1"><li>You can use the long form of the <code class="cCode">send</code> or the <code class="cCode">publish</code> method to set the delivery mode for a specific message. The second argument sets the delivery mode. For example, the following <code class="cCode">send</code> call sets the delivery mode for <code class="cCode">message</code> to <code class="cCode">NON_PERSISTENT</code>:</li></div><a name="wp81853"> </a><p class="pBodyRelative"><code class="cCode">producer.send(message, DeliveryMode.NON_PERSISTENT, 3, <br />&nbsp;&nbsp;10000);</code></p><a name="wp81854"> </a><p class="pBodyRelative">The third and fourth arguments set the priority level and expiration time, which are described in the next two subsections.</p></ul></div><a name="wp81855"> </a><p class="pBody">If you do not specify a delivery mode, the default is <code class="cCode">PERSISTENT</code>. Using the <code class="cCode">NON_PERSISTENT</code> delivery mode may improve performance and reduce storage overhead, but you should use it only if your application can afford to miss messages.</p><a name="wp81860"> </a><h4 class="pHeading3">Setting Message Priority Levels</h4><a name="wp81861"> </a><p class="pBody">You can use message priority levels to instruct the JMS provider to deliver urgent messages first. You can set the priority level in either of two ways.</p><div class="pSmartList1"><ul class="pSmartList1"><a name="wp81862"> </a><div class="pSmartList1"><li>You can use the <code class="cCode">setPriority</code> method of the <code class="cCode">MessageProducer</code> interface to set the priority level for all messages sent by that producer. For example, the following call sets a priority level of 7 for a producer:</li></div><a name="wp81863"> </a><p class="pBodyRelative"><code class="cCode">producer.setPriority(7);</code></p><a name="wp81864"> </a><div class="pSmartList1"><li>You can use the long form of the <code class="cCode">send</code> or the <code class="cCode">publish</code> method to set the priority level for a specific message. The third argument sets the priority level. For example, the following <code class="cCode">send</code> call sets the priority level for <code class="cCode">message</code> to 3:</li></div><a name="wp81865"> </a><p class="pBodyRelative"><code class="cCode">producer.send(message, DeliveryMode.NON_PERSISTENT, 3, <br />&nbsp;&nbsp;10000);</code></p></ul></div><a name="wp81866"> </a><p class="pBody">The ten levels of priority range from 0 (lowest) to 9 (highest). If you do not specify a priority level, the default level is 4. A JMS provider tries to deliver higher-priority messages before lower-priority ones but does not have to deliver messages in exact order of priority.</p><a name="wp81871"> </a><h4 class="pHeading3">Allowing Messages to Expire</h4><a name="wp81872"> </a><p class="pBody">By default, a message never expires. If a message will become obsolete after a certain period, however, you may want to set an expiration time. You can do this in either of two ways.</p><div class="pSmartList1"><ul class="pSmartList1"><a name="wp81873"> </a><div class="pSmartList1"><li>You can use the <code class="cCode">setTimeToLive</code> method of the <code class="cCode">MessageProducer</code> interface to set a default expiration time for all messages sent by that producer. For example, the following call sets a time to live of one minute for a producer:</li></div><a name="wp81874"> </a><p class="pBodyRelative"><code class="cCode">producer.setTimeToLive(60000);</code></p><a name="wp81875"> </a><div class="pSmartList1"><li>You can use the long form of the <code class="cCode">send</code> or the <code class="cCode">publish</code> method to set an expiration time for a specific message. The fourth argument sets the expiration time in milliseconds. For example, the following <code class="cCode">send</code> call sets a time to live of 10 seconds:</li></div><a name="wp81876"> </a><p class="pBodyRelative"><code class="cCode">producer.send(message, DeliveryMode.NON_PERSISTENT, 3, <br />&nbsp;&nbsp;10000);</code></p></ul></div><a name="wp81877"> </a><p class="pBody">If the specified <code class="cVariable">timeToLive</code> value is <code class="cCode">0</code>, the message never expires.</p><a name="wp81878"> </a><p class="pBody">When the message is sent, the specified <code class="cVariable">timeToLive</code> is added to the current time to give the expiration time. Any message not delivered before the specified expiration time is destroyed. The destruction of obsolete messages conserves storage and computing resources. </p><a name="wp81884"> </a><h4 class="pHeading3">

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -