jruby-activemq 5.5.1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (302) hide show
  1. data/History.md +6 -0
  2. data/LICENSE +619 -0
  3. data/README.md +15 -0
  4. data/Rakefile +34 -0
  5. data/apache-activemq-5.5.1/LICENSE +619 -0
  6. data/apache-activemq-5.5.1/NOTICE +85 -0
  7. data/apache-activemq-5.5.1/README.txt +63 -0
  8. data/apache-activemq-5.5.1/WebConsole-README.txt +42 -0
  9. data/apache-activemq-5.5.1/activemq-all-5.5.1.jar +0 -0
  10. data/apache-activemq-5.5.1/bin/activemq +653 -0
  11. data/apache-activemq-5.5.1/bin/activemq-admin +155 -0
  12. data/apache-activemq-5.5.1/bin/linux-x86-32/activemq +543 -0
  13. data/apache-activemq-5.5.1/bin/linux-x86-32/libwrapper.so +0 -0
  14. data/apache-activemq-5.5.1/bin/linux-x86-32/wrapper +0 -0
  15. data/apache-activemq-5.5.1/bin/linux-x86-32/wrapper.conf +139 -0
  16. data/apache-activemq-5.5.1/bin/linux-x86-64/activemq +543 -0
  17. data/apache-activemq-5.5.1/bin/linux-x86-64/libwrapper.so +0 -0
  18. data/apache-activemq-5.5.1/bin/linux-x86-64/wrapper +0 -0
  19. data/apache-activemq-5.5.1/bin/linux-x86-64/wrapper.conf +139 -0
  20. data/apache-activemq-5.5.1/bin/macosx/activemq +537 -0
  21. data/apache-activemq-5.5.1/bin/macosx/libwrapper.jnilib +0 -0
  22. data/apache-activemq-5.5.1/bin/macosx/wrapper +0 -0
  23. data/apache-activemq-5.5.1/bin/macosx/wrapper.conf +139 -0
  24. data/apache-activemq-5.5.1/bin/run.jar +0 -0
  25. data/apache-activemq-5.5.1/bin/wrapper.jar +0 -0
  26. data/apache-activemq-5.5.1/conf/activemq-command.xml +52 -0
  27. data/apache-activemq-5.5.1/conf/activemq-demo.xml +289 -0
  28. data/apache-activemq-5.5.1/conf/activemq-dynamic-network-broker1.xml +108 -0
  29. data/apache-activemq-5.5.1/conf/activemq-dynamic-network-broker2.xml +109 -0
  30. data/apache-activemq-5.5.1/conf/activemq-jdbc.xml +98 -0
  31. data/apache-activemq-5.5.1/conf/activemq-scalability.xml +77 -0
  32. data/apache-activemq-5.5.1/conf/activemq-security.xml +132 -0
  33. data/apache-activemq-5.5.1/conf/activemq-specjms.xml +118 -0
  34. data/apache-activemq-5.5.1/conf/activemq-static-network-broker1.xml +100 -0
  35. data/apache-activemq-5.5.1/conf/activemq-static-network-broker2.xml +100 -0
  36. data/apache-activemq-5.5.1/conf/activemq-stomp.xml +133 -0
  37. data/apache-activemq-5.5.1/conf/activemq-throughput.xml +82 -0
  38. data/apache-activemq-5.5.1/conf/activemq.xml +136 -0
  39. data/apache-activemq-5.5.1/conf/broker-localhost.cert +0 -0
  40. data/apache-activemq-5.5.1/conf/broker.ks +0 -0
  41. data/apache-activemq-5.5.1/conf/broker.ts +0 -0
  42. data/apache-activemq-5.5.1/conf/camel.xml +66 -0
  43. data/apache-activemq-5.5.1/conf/client.ks +0 -0
  44. data/apache-activemq-5.5.1/conf/client.ts +0 -0
  45. data/apache-activemq-5.5.1/conf/credentials-enc.properties +22 -0
  46. data/apache-activemq-5.5.1/conf/credentials.properties +22 -0
  47. data/apache-activemq-5.5.1/conf/jetty-realm.properties +20 -0
  48. data/apache-activemq-5.5.1/conf/jetty.xml +112 -0
  49. data/apache-activemq-5.5.1/conf/jmx.access +18 -0
  50. data/apache-activemq-5.5.1/conf/jmx.password +18 -0
  51. data/apache-activemq-5.5.1/conf/log4j.properties +75 -0
  52. data/apache-activemq-5.5.1/conf/logging.properties +25 -0
  53. data/apache-activemq-5.5.1/data/activemq.log +0 -0
  54. data/apache-activemq-5.5.1/docs/index.html +22 -0
  55. data/apache-activemq-5.5.1/example/build.xml +317 -0
  56. data/apache-activemq-5.5.1/example/conf/activemq.xml +41 -0
  57. data/apache-activemq-5.5.1/example/conf/log4j.properties +39 -0
  58. data/apache-activemq-5.5.1/example/conf/resin-web.xml +35 -0
  59. data/apache-activemq-5.5.1/example/conf/web.xml +40 -0
  60. data/apache-activemq-5.5.1/example/perfharness/perfharness-activemq.sh +49 -0
  61. data/apache-activemq-5.5.1/example/ruby/README.txt +27 -0
  62. data/apache-activemq-5.5.1/example/ruby/catstomp.rb +49 -0
  63. data/apache-activemq-5.5.1/example/ruby/listener.rb +51 -0
  64. data/apache-activemq-5.5.1/example/ruby/publisher.rb +67 -0
  65. data/apache-activemq-5.5.1/example/ruby/stompcat.rb +50 -0
  66. data/apache-activemq-5.5.1/example/src/CommandLineSupport.java +120 -0
  67. data/apache-activemq-5.5.1/example/src/ConsumerTool.java +353 -0
  68. data/apache-activemq-5.5.1/example/src/EmbeddedBroker.java +41 -0
  69. data/apache-activemq-5.5.1/example/src/Log4jJMSAppenderExample.java +70 -0
  70. data/apache-activemq-5.5.1/example/src/ProducerAndConsumerTool.java +51 -0
  71. data/apache-activemq-5.5.1/example/src/ProducerTool.java +247 -0
  72. data/apache-activemq-5.5.1/example/src/RequesterTool.java +257 -0
  73. data/apache-activemq-5.5.1/example/src/StompExample.java +59 -0
  74. data/apache-activemq-5.5.1/example/src/TopicListener.java +118 -0
  75. data/apache-activemq-5.5.1/example/src/TopicPublisher.java +205 -0
  76. data/apache-activemq-5.5.1/example/src/jndi.properties +17 -0
  77. data/apache-activemq-5.5.1/example/src/log4j-jms.properties +31 -0
  78. data/apache-activemq-5.5.1/example/transactions/README.txt +40 -0
  79. data/apache-activemq-5.5.1/example/transactions/build.xml +113 -0
  80. data/apache-activemq-5.5.1/example/transactions/src/Retailer.java +107 -0
  81. data/apache-activemq-5.5.1/example/transactions/src/Supplier.java +135 -0
  82. data/apache-activemq-5.5.1/example/transactions/src/TransactionsDemo.java +47 -0
  83. data/apache-activemq-5.5.1/example/transactions/src/Vendor.java +302 -0
  84. data/apache-activemq-5.5.1/lib/a.sh +3 -0
  85. data/apache-activemq-5.5.1/lib/activation-1.1.jar +0 -0
  86. data/apache-activemq-5.5.1/lib/activemq-camel-5.5.1.jar +0 -0
  87. data/apache-activemq-5.5.1/lib/activemq-console-5.5.1.jar +0 -0
  88. data/apache-activemq-5.5.1/lib/activemq-core-5.5.1.jar +0 -0
  89. data/apache-activemq-5.5.1/lib/activemq-jaas-5.5.1.jar +0 -0
  90. data/apache-activemq-5.5.1/lib/activemq-protobuf-1.1.jar +0 -0
  91. data/apache-activemq-5.5.1/lib/activemq-rar.txt +20 -0
  92. data/apache-activemq-5.5.1/lib/activemq-web-5.5.1.jar +0 -0
  93. data/apache-activemq-5.5.1/lib/camel-core-2.7.0.jar +0 -0
  94. data/apache-activemq-5.5.1/lib/camel-jetty-2.7.0.jar +0 -0
  95. data/apache-activemq-5.5.1/lib/camel-jms-2.7.0.jar +0 -0
  96. data/apache-activemq-5.5.1/lib/camel-spring-2.7.0.jar +0 -0
  97. data/apache-activemq-5.5.1/lib/geronimo-j2ee-management_1.1_spec-1.0.1.jar +0 -0
  98. data/apache-activemq-5.5.1/lib/geronimo-jms_1.1_spec-1.1.1.jar +0 -0
  99. data/apache-activemq-5.5.1/lib/geronimo-jta_1.0.1B_spec-1.0.1.jar +0 -0
  100. data/apache-activemq-5.5.1/lib/jaxb-api-2.1.jar +0 -0
  101. data/apache-activemq-5.5.1/lib/jaxb-impl-2.1.6.jar +0 -0
  102. data/apache-activemq-5.5.1/lib/jcl-over-slf4j-1.5.11.jar +0 -0
  103. data/apache-activemq-5.5.1/lib/kahadb-5.5.1.jar +0 -0
  104. data/apache-activemq-5.5.1/lib/optional/activeio-core-3.1.2.jar +0 -0
  105. data/apache-activemq-5.5.1/lib/optional/activemq-jmdns_1.0-5.5.1.jar +0 -0
  106. data/apache-activemq-5.5.1/lib/optional/activemq-optional-5.5.1.jar +0 -0
  107. data/apache-activemq-5.5.1/lib/optional/activemq-pool-5.5.1.jar +0 -0
  108. data/apache-activemq-5.5.1/lib/optional/activemq-spring-5.5.1.jar +0 -0
  109. data/apache-activemq-5.5.1/lib/optional/activemq-xmpp-5.5.1.jar +0 -0
  110. data/apache-activemq-5.5.1/lib/optional/commons-beanutils-1.6.1.jar +0 -0
  111. data/apache-activemq-5.5.1/lib/optional/commons-codec-1.2.jar +0 -0
  112. data/apache-activemq-5.5.1/lib/optional/commons-collections-3.2.1.jar +0 -0
  113. data/apache-activemq-5.5.1/lib/optional/commons-dbcp-1.2.2.jar +0 -0
  114. data/apache-activemq-5.5.1/lib/optional/commons-httpclient-3.1.jar +0 -0
  115. data/apache-activemq-5.5.1/lib/optional/commons-lang-2.4.jar +0 -0
  116. data/apache-activemq-5.5.1/lib/optional/commons-net-2.0.jar +0 -0
  117. data/apache-activemq-5.5.1/lib/optional/commons-pool-1.5.4.jar +0 -0
  118. data/apache-activemq-5.5.1/lib/optional/geronimo-j2ee-connector_1.5_spec-2.0.0.jar +0 -0
  119. data/apache-activemq-5.5.1/lib/optional/jasypt-1.7.jar +0 -0
  120. data/apache-activemq-5.5.1/lib/optional/jettison-1.2.jar +0 -0
  121. data/apache-activemq-5.5.1/lib/optional/josql-1.5.jar +0 -0
  122. data/apache-activemq-5.5.1/lib/optional/log4j-1.2.14.jar +0 -0
  123. data/apache-activemq-5.5.1/lib/optional/slf4j-log4j12-1.5.11.jar +0 -0
  124. data/apache-activemq-5.5.1/lib/optional/spring-aop-3.0.3.RELEASE.jar +0 -0
  125. data/apache-activemq-5.5.1/lib/optional/spring-asm-3.0.3.RELEASE.jar +0 -0
  126. data/apache-activemq-5.5.1/lib/optional/spring-beans-3.0.3.RELEASE.jar +0 -0
  127. data/apache-activemq-5.5.1/lib/optional/spring-context-3.0.3.RELEASE.jar +0 -0
  128. data/apache-activemq-5.5.1/lib/optional/spring-core-3.0.3.RELEASE.jar +0 -0
  129. data/apache-activemq-5.5.1/lib/optional/spring-expression-3.0.3.RELEASE.jar +0 -0
  130. data/apache-activemq-5.5.1/lib/optional/spring-jms-3.0.3.RELEASE.jar +0 -0
  131. data/apache-activemq-5.5.1/lib/optional/spring-oxm-tiger-1.5.8.jar +0 -0
  132. data/apache-activemq-5.5.1/lib/optional/spring-tx-3.0.3.RELEASE.jar +0 -0
  133. data/apache-activemq-5.5.1/lib/optional/stax2-api-3.0.1.jar +0 -0
  134. data/apache-activemq-5.5.1/lib/optional/velocity-1.6.2.jar +0 -0
  135. data/apache-activemq-5.5.1/lib/optional/woodstox-core-asl-4.0.7.jar +0 -0
  136. data/apache-activemq-5.5.1/lib/optional/xbean-spring-3.7.jar +0 -0
  137. data/apache-activemq-5.5.1/lib/optional/xpp3-1.1.4c.jar +0 -0
  138. data/apache-activemq-5.5.1/lib/optional/xstream-1.3.1.jar +0 -0
  139. data/apache-activemq-5.5.1/lib/slf4j-api-1.5.11.jar +0 -0
  140. data/apache-activemq-5.5.1/lib/stax-1.2.0.jar +0 -0
  141. data/apache-activemq-5.5.1/lib/stax-api-1.0.1.jar +0 -0
  142. data/apache-activemq-5.5.1/lib/web/commons-management-1.0.jar +0 -0
  143. data/apache-activemq-5.5.1/lib/web/core-3.1.1.jar +0 -0
  144. data/apache-activemq-5.5.1/lib/web/geronimo-servlet_2.5_spec-1.2.jar +0 -0
  145. data/apache-activemq-5.5.1/lib/web/jdom-1.0.jar +0 -0
  146. data/apache-activemq-5.5.1/lib/web/jetty-all-server-7.1.6.v20100715.jar +0 -0
  147. data/apache-activemq-5.5.1/lib/web/jetty-websocket-7.1.6.v20100715.jar +0 -0
  148. data/apache-activemq-5.5.1/lib/web/jsp-2.1-glassfish-2.1.v20100127.jar +0 -0
  149. data/apache-activemq-5.5.1/lib/web/jsp-api-2.1-glassfish-2.1.v20100127.jar +0 -0
  150. data/apache-activemq-5.5.1/lib/web/rome-0.8.jar +0 -0
  151. data/apache-activemq-5.5.1/lib/web/sitemesh-2.2.1.jar +0 -0
  152. data/apache-activemq-5.5.1/lib/web/spring-web-3.0.3.RELEASE.jar +0 -0
  153. data/apache-activemq-5.5.1/lib/web/spring-webmvc-3.0.3.RELEASE.jar +0 -0
  154. data/apache-activemq-5.5.1/user-guide.html +119 -0
  155. data/apache-activemq-5.5.1/webapps/admin/404.html +137 -0
  156. data/apache-activemq-5.5.1/webapps/admin/500.html +138 -0
  157. data/apache-activemq-5.5.1/webapps/admin/META-INF/LICENSE +1026 -0
  158. data/apache-activemq-5.5.1/webapps/admin/META-INF/NOTICE +107 -0
  159. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/WebConsoleStarter.class +0 -0
  160. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/controller/CopyMessage.class +0 -0
  161. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/controller/CreateDestination.class +0 -0
  162. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/controller/CreateSubscriber.class +0 -0
  163. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/controller/DeleteDestination.class +0 -0
  164. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/controller/DeleteJob.class +0 -0
  165. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/controller/DeleteMessage.class +0 -0
  166. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/controller/DeleteSubscriber.class +0 -0
  167. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/controller/MoveMessage.class +0 -0
  168. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/controller/PurgeDestination.class +0 -0
  169. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/controller/SendMessage.class +0 -0
  170. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/filter/ApplicationContextFilter$1.class +0 -0
  171. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/filter/ApplicationContextFilter$2.class +0 -0
  172. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/filter/ApplicationContextFilter.class +0 -0
  173. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/classes/org/apache/activemq/web/handler/BindingBeanNameUrlHandlerMapping.class +0 -0
  174. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/decorators.xml +30 -0
  175. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/dispatcher-servlet.xml +62 -0
  176. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/jspf/headertags.jspf +21 -0
  177. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/jspf/old.jspf +21 -0
  178. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/tags/form/checkbox.tag +18 -0
  179. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/tags/form/forEachMapEntry.tag +29 -0
  180. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/tags/form/option.tag +20 -0
  181. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/tags/form/short.tag +29 -0
  182. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/tags/form/text.tag +30 -0
  183. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/tags/form/tooltip.tag +29 -0
  184. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/tags/form/uri.tag +18 -0
  185. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/tags/jms/forEachConnection.tag +35 -0
  186. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/tags/jms/forEachMessage.tag +34 -0
  187. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/tags/jms/formatTimestamp.tag +29 -0
  188. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/tags/jms/persistent.tag +27 -0
  189. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/web.xml +187 -0
  190. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/webconsole-default.xml +26 -0
  191. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/webconsole-embedded.xml +45 -0
  192. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/webconsole-invm.xml +41 -0
  193. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/webconsole-jndi.xml +39 -0
  194. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/webconsole-properties.xml +39 -0
  195. data/apache-activemq-5.5.1/webapps/admin/WEB-INF/webconsole-query.xml +25 -0
  196. data/apache-activemq-5.5.1/webapps/admin/browse.jsp +64 -0
  197. data/apache-activemq-5.5.1/webapps/admin/connection.jsp +138 -0
  198. data/apache-activemq-5.5.1/webapps/admin/connections.jsp +85 -0
  199. data/apache-activemq-5.5.1/webapps/admin/decorators/main.jsp +165 -0
  200. data/apache-activemq-5.5.1/webapps/admin/decorators/panel.jsp +31 -0
  201. data/apache-activemq-5.5.1/webapps/admin/decorators/printable.jsp +31 -0
  202. data/apache-activemq-5.5.1/webapps/admin/graph.jsp +67 -0
  203. data/apache-activemq-5.5.1/webapps/admin/images/activemq-logo.png +0 -0
  204. data/apache-activemq-5.5.1/webapps/admin/images/asf-logo.png +0 -0
  205. data/apache-activemq-5.5.1/webapps/admin/images/big-bullet.png +0 -0
  206. data/apache-activemq-5.5.1/webapps/admin/images/black-footer-bottom.png +0 -0
  207. data/apache-activemq-5.5.1/webapps/admin/images/black-footer-left.png +0 -0
  208. data/apache-activemq-5.5.1/webapps/admin/images/black-footer-right.png +0 -0
  209. data/apache-activemq-5.5.1/webapps/admin/images/bottom-red-bar.png +0 -0
  210. data/apache-activemq-5.5.1/webapps/admin/images/checker-bg.png +0 -0
  211. data/apache-activemq-5.5.1/webapps/admin/images/content-left.png +0 -0
  212. data/apache-activemq-5.5.1/webapps/admin/images/content-right.png +0 -0
  213. data/apache-activemq-5.5.1/webapps/admin/images/feed_atom.png +0 -0
  214. data/apache-activemq-5.5.1/webapps/admin/images/feed_rss.png +0 -0
  215. data/apache-activemq-5.5.1/webapps/admin/images/left-box-bottom.png +0 -0
  216. data/apache-activemq-5.5.1/webapps/admin/images/left-box-right.png +0 -0
  217. data/apache-activemq-5.5.1/webapps/admin/images/left-box-top.png +0 -0
  218. data/apache-activemq-5.5.1/webapps/admin/images/oval-arrow.png +0 -0
  219. data/apache-activemq-5.5.1/webapps/admin/images/right-box-bottom.png +0 -0
  220. data/apache-activemq-5.5.1/webapps/admin/images/right-box-left.png +0 -0
  221. data/apache-activemq-5.5.1/webapps/admin/images/right-box-top.png +0 -0
  222. data/apache-activemq-5.5.1/webapps/admin/images/small-bullet-gray.png +0 -0
  223. data/apache-activemq-5.5.1/webapps/admin/images/small-bullet-red.png +0 -0
  224. data/apache-activemq-5.5.1/webapps/admin/images/spacer.gif +0 -0
  225. data/apache-activemq-5.5.1/webapps/admin/images/top-red-bar.png +0 -0
  226. data/apache-activemq-5.5.1/webapps/admin/images/white-header-left.png +0 -0
  227. data/apache-activemq-5.5.1/webapps/admin/images/white-header-right.png +0 -0
  228. data/apache-activemq-5.5.1/webapps/admin/images/white-header-top.png +0 -0
  229. data/apache-activemq-5.5.1/webapps/admin/index.jsp +65 -0
  230. data/apache-activemq-5.5.1/webapps/admin/js/common.js +121 -0
  231. data/apache-activemq-5.5.1/webapps/admin/js/css.js +145 -0
  232. data/apache-activemq-5.5.1/webapps/admin/js/mochi/MochiKit.js +4804 -0
  233. data/apache-activemq-5.5.1/webapps/admin/js/mochi/__package__.js +14 -0
  234. data/apache-activemq-5.5.1/webapps/admin/js/plotkit/Base.js +332 -0
  235. data/apache-activemq-5.5.1/webapps/admin/js/plotkit/Canvas.js +707 -0
  236. data/apache-activemq-5.5.1/webapps/admin/js/plotkit/Layout.js +588 -0
  237. data/apache-activemq-5.5.1/webapps/admin/js/plotkit/SVG.js +677 -0
  238. data/apache-activemq-5.5.1/webapps/admin/js/plotkit/SweetCanvas.js +281 -0
  239. data/apache-activemq-5.5.1/webapps/admin/js/plotkit/SweetSVG.js +196 -0
  240. data/apache-activemq-5.5.1/webapps/admin/js/plotkit/dummy.svg +15 -0
  241. data/apache-activemq-5.5.1/webapps/admin/js/plotkit/iecanvas.htc +389 -0
  242. data/apache-activemq-5.5.1/webapps/admin/js/prettify.js +1424 -0
  243. data/apache-activemq-5.5.1/webapps/admin/js/standardista-table-sorting.js +434 -0
  244. data/apache-activemq-5.5.1/webapps/admin/message.jsp +185 -0
  245. data/apache-activemq-5.5.1/webapps/admin/network.jsp +52 -0
  246. data/apache-activemq-5.5.1/webapps/admin/queueConsumers.jsp +79 -0
  247. data/apache-activemq-5.5.1/webapps/admin/queueGraph.jsp +68 -0
  248. data/apache-activemq-5.5.1/webapps/admin/queues.jsp +78 -0
  249. data/apache-activemq-5.5.1/webapps/admin/scheduled.jsp +67 -0
  250. data/apache-activemq-5.5.1/webapps/admin/send.jsp +173 -0
  251. data/apache-activemq-5.5.1/webapps/admin/styles/prettify.css +44 -0
  252. data/apache-activemq-5.5.1/webapps/admin/styles/site.css +206 -0
  253. data/apache-activemq-5.5.1/webapps/admin/styles/sorttable.css +70 -0
  254. data/apache-activemq-5.5.1/webapps/admin/styles/type-settings.css +177 -0
  255. data/apache-activemq-5.5.1/webapps/admin/subscribers.jsp +158 -0
  256. data/apache-activemq-5.5.1/webapps/admin/test/dummy.jsp +52 -0
  257. data/apache-activemq-5.5.1/webapps/admin/test/index.jsp +84 -0
  258. data/apache-activemq-5.5.1/webapps/admin/test/systemProperties.jsp +53 -0
  259. data/apache-activemq-5.5.1/webapps/admin/topics.jsp +66 -0
  260. data/apache-activemq-5.5.1/webapps/admin/xml/queues.jsp +34 -0
  261. data/apache-activemq-5.5.1/webapps/admin/xml/topics.jsp +29 -0
  262. data/apache-activemq-5.5.1/webapps/demo/META-INF/LICENSE +494 -0
  263. data/apache-activemq-5.5.1/webapps/demo/META-INF/NOTICE +82 -0
  264. data/apache-activemq-5.5.1/webapps/demo/WEB-INF/web.xml +111 -0
  265. data/apache-activemq-5.5.1/webapps/demo/chat.css +76 -0
  266. data/apache-activemq-5.5.1/webapps/demo/chat.html +219 -0
  267. data/apache-activemq-5.5.1/webapps/demo/index.html +181 -0
  268. data/apache-activemq-5.5.1/webapps/demo/js/amq.js +307 -0
  269. data/apache-activemq-5.5.1/webapps/demo/js/amq_dojo_adapter.js +84 -0
  270. data/apache-activemq-5.5.1/webapps/demo/js/amq_jquery_adapter.js +88 -0
  271. data/apache-activemq-5.5.1/webapps/demo/js/amq_prototype_adapter.js +84 -0
  272. data/apache-activemq-5.5.1/webapps/demo/js/chat.js +209 -0
  273. data/apache-activemq-5.5.1/webapps/demo/js/dojo.js +16 -0
  274. data/apache-activemq-5.5.1/webapps/demo/js/jquery-1.4.2.min.js +154 -0
  275. data/apache-activemq-5.5.1/webapps/demo/js/prototype.js +4874 -0
  276. data/apache-activemq-5.5.1/webapps/demo/portfolio/portfolio.html +87 -0
  277. data/apache-activemq-5.5.1/webapps/demo/portfolio/portfolio.js +91 -0
  278. data/apache-activemq-5.5.1/webapps/demo/sandbox/index.html +31 -0
  279. data/apache-activemq-5.5.1/webapps/demo/sandbox/portfolio.html +93 -0
  280. data/apache-activemq-5.5.1/webapps/demo/sandbox/portfolio.js +49 -0
  281. data/apache-activemq-5.5.1/webapps/demo/sandbox/util.js +52 -0
  282. data/apache-activemq-5.5.1/webapps/demo/sandbox/webmq.js +149 -0
  283. data/apache-activemq-5.5.1/webapps/demo/send.html +51 -0
  284. data/apache-activemq-5.5.1/webapps/demo/style.css +440 -0
  285. data/apache-activemq-5.5.1/webapps/demo/test/amq_test.html +311 -0
  286. data/apache-activemq-5.5.1/webapps/demo/test/assets/README +4 -0
  287. data/apache-activemq-5.5.1/webapps/demo/test/assets/jsunittest.js +1017 -0
  288. data/apache-activemq-5.5.1/webapps/demo/test/assets/unittest.css +54 -0
  289. data/apache-activemq-5.5.1/webapps/favicon.ico +0 -0
  290. data/apache-activemq-5.5.1/webapps/fileserver/META-INF/LICENSE +203 -0
  291. data/apache-activemq-5.5.1/webapps/fileserver/META-INF/NOTICE +5 -0
  292. data/apache-activemq-5.5.1/webapps/fileserver/WEB-INF/classes/org/apache/activemq/util/FilenameGuardFilter$GuardedHttpServletRequest.class +0 -0
  293. data/apache-activemq-5.5.1/webapps/fileserver/WEB-INF/classes/org/apache/activemq/util/FilenameGuardFilter.class +0 -0
  294. data/apache-activemq-5.5.1/webapps/fileserver/WEB-INF/classes/org/apache/activemq/util/IOHelper.class +0 -0
  295. data/apache-activemq-5.5.1/webapps/fileserver/WEB-INF/classes/org/apache/activemq/util/RestFilter.class +0 -0
  296. data/apache-activemq-5.5.1/webapps/fileserver/WEB-INF/web.xml +56 -0
  297. data/apache-activemq-5.5.1/webapps/fileserver/index.html +30 -0
  298. data/apache-activemq-5.5.1/webapps/index.html +145 -0
  299. data/apache-activemq-5.5.1/webapps/styles/site.css +206 -0
  300. data/apache-activemq-5.5.1/webapps/styles/type-settings.css +177 -0
  301. data/lib/activemq.rb +11 -0
  302. metadata +382 -0
@@ -0,0 +1,113 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Licensed to the Apache Software Foundation (ASF) under one or more
4
+ contributor license agreements. See the NOTICE file distributed with
5
+ this work for additional information regarding copyright ownership.
6
+ The ASF licenses this file to You under the Apache License, Version 2.0
7
+ (the "License"); you may not use this file except in compliance with
8
+ the License. You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
+ -->
18
+ <project name="transactions" default="help" basedir=".">
19
+
20
+ <property name="class.dir" value="target/classes" />
21
+ <property name="activemq.home" value="../.." />
22
+
23
+ <!-- example program defaults -->
24
+ <property name="url" value="tcp://localhost:61616" />
25
+ <target name="help">
26
+ <echo>
27
+ For the full demo:
28
+ ant transactions_demo -Durl=tcp://hostname:1234
29
+ For the indicual components:
30
+ ant retailer -Durl=tcp://hostname:1234
31
+ ant vendor -Durl=tcp://hostname:1234
32
+ ant hdsupplier -Durl=tcp://hostname:1234
33
+ ant monitorsupplier -Durl=tcp://hostname:1234
34
+ </echo>
35
+ </target>
36
+
37
+ <target name="clean">
38
+ <delete dir="target" quiet="true" />
39
+ <delete dir="${class.dir}" quiet="true" />
40
+ </target>
41
+
42
+ <target name="init">
43
+ <mkdir dir="${class.dir}" />
44
+
45
+ <path id="javac.classpath">
46
+ <pathelement path="${class.dir}" />
47
+ <pathelement path="../conf" />
48
+ <fileset dir="${activemq.home}/lib">
49
+ <include name="**/*.jar" />
50
+ </fileset>
51
+ </path>
52
+ </target>
53
+
54
+ <target name="compile" depends="init" description="Compile all Java">
55
+ <javac srcdir="src" destdir="${class.dir}" debug="true">
56
+ <classpath refid="javac.classpath" />
57
+ </javac>
58
+ </target>
59
+
60
+ <target name="transactions_demo" depends="compile" description="Runs the full demo">
61
+ <java classname="TransactionsDemo" fork="yes">
62
+ <classpath refid="javac.classpath" />
63
+ <jvmarg value="-server" />
64
+ <sysproperty key="activemq.home" value="${activemq.home}"/>
65
+ <arg value="${url}" />
66
+ <arg value="${user}" />
67
+ <arg value="${password}" />
68
+ </java>
69
+ </target>
70
+
71
+ <target name="retailer" depends="compile" description="Runs the retailer">
72
+ <java classname="Retailer" fork="yes">
73
+ <classpath refid="javac.classpath" />
74
+ <jvmarg value="-server" />
75
+ <sysproperty key="activemq.home" value="${activemq.home}"/>
76
+ <arg value="${url}" />
77
+ <arg value="${user}" />
78
+ <arg value="${password}" />
79
+ </java>
80
+ </target>
81
+ <target name="vendor" depends="compile" description="Runs the vendor">
82
+ <java classname="Vendor" fork="yes">
83
+ <classpath refid="javac.classpath" />
84
+ <jvmarg value="-server" />
85
+ <sysproperty key="activemq.home" value="${activemq.home}"/>
86
+ <arg value="${url}" />
87
+ <arg value="${user}" />
88
+ <arg value="${password}" />
89
+ </java>
90
+ </target>
91
+ <target name="hdsupplier" depends="compile" description="Runs the Hard Drive Supplier">
92
+ <java classname="Supplier" fork="yes">
93
+ <classpath refid="javac.classpath" />
94
+ <jvmarg value="-server" />
95
+ <sysproperty key="activemq.home" value="${activemq.home}"/>
96
+ <arg value="HardDrive" />
97
+ <arg value="${url}" />
98
+ <arg value="${user}" />
99
+ <arg value="${password}" />
100
+ </java>
101
+ </target>
102
+ <target name="monitorsupplier" depends="compile" description="Runs the Monitor Supplier">
103
+ <java classname="Supplier" fork="yes">
104
+ <classpath refid="javac.classpath" />
105
+ <jvmarg value="-server" />
106
+ <sysproperty key="activemq.home" value="${activemq.home}"/>
107
+ <arg value="Monitor" />
108
+ <arg value="${url}" />
109
+ <arg value="${user}" />
110
+ <arg value="${password}" />
111
+ </java>
112
+ </target>
113
+ </project>
@@ -0,0 +1,107 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one or more
3
+ * contributor license agreements. See the NOTICE file distributed with
4
+ * this work for additional information regarding copyright ownership.
5
+ * The ASF licenses this file to You under the Apache License, Version 2.0
6
+ * (the "License"); you may not use this file except in compliance with
7
+ * the License. You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import org.apache.activemq.ActiveMQConnectionFactory;
18
+ import javax.jms.Connection;
19
+ import javax.jms.Destination;
20
+ import javax.jms.JMSException;
21
+ import javax.jms.MapMessage;
22
+ import javax.jms.MessageConsumer;
23
+ import javax.jms.MessageProducer;
24
+ import javax.jms.Session;
25
+ import javax.jms.TemporaryQueue;
26
+
27
+ /**
28
+ * The Retailer orders computers from the Vendor by sending a message via
29
+ * the VendorOrderQueue. It then syncronously receives the reponse message
30
+ * and reports if the order was successful or not.
31
+ */
32
+ public class Retailer implements Runnable {
33
+ private String url;
34
+ private String user;
35
+ private String password;
36
+
37
+ public Retailer(String url, String user, String password) {
38
+ this.url = url;
39
+ this.user = user;
40
+ this.password = password;
41
+ }
42
+
43
+ public void run() {
44
+ ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url);
45
+ try {
46
+ Connection connection = connectionFactory.createConnection();
47
+
48
+ // The Retailer's session is non-trasacted.
49
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
50
+ Destination vendorOrderQueue = session.createQueue("VendorOrderQueue");
51
+ TemporaryQueue retailerConfirmQueue = session.createTemporaryQueue();
52
+
53
+ MessageProducer producer = session.createProducer(vendorOrderQueue);
54
+ MessageConsumer replyConsumer = session.createConsumer(retailerConfirmQueue);
55
+
56
+ connection.start();
57
+
58
+ for (int i = 0; i < 5; i++) {
59
+ MapMessage message = session.createMapMessage();
60
+ message.setString("Item", "Computer(s)");
61
+ int quantity = (int)(Math.random() * 4) + 1;
62
+ message.setInt("Quantity", quantity);
63
+ message.setJMSReplyTo(retailerConfirmQueue);
64
+ producer.send(message);
65
+ System.out.println("Retailer: Ordered " + quantity + " computers.");
66
+
67
+ MapMessage reply = (MapMessage) replyConsumer.receive();
68
+ if (reply.getBoolean("OrderAccepted")) {
69
+ System.out.println("Retailer: Order Filled");
70
+ } else {
71
+ System.out.println("Retailer: Order Not Filled");
72
+ }
73
+ }
74
+
75
+ // Send a non-MapMessage to signal the end
76
+ producer.send(session.createMessage());
77
+
78
+ replyConsumer.close();
79
+ connection.close();
80
+
81
+ } catch (JMSException e) {
82
+ e.printStackTrace();
83
+ }
84
+ }
85
+
86
+ public static void main(String[] args) {
87
+ String url = "tcp://localhost:61616";
88
+ String user = null;
89
+ String password = null;
90
+
91
+ if (args.length >= 1) {
92
+ url = args[0];
93
+ }
94
+
95
+ if (args.length >= 2) {
96
+ user = args[1];
97
+ }
98
+
99
+ if (args.length >= 3) {
100
+ password = args[2];
101
+ }
102
+
103
+ Retailer r = new Retailer(url, user, password);
104
+
105
+ new Thread(r, "Retailer").start();
106
+ }
107
+ }
@@ -0,0 +1,135 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one or more
3
+ * contributor license agreements. See the NOTICE file distributed with
4
+ * this work for additional information regarding copyright ownership.
5
+ * The ASF licenses this file to You under the Apache License, Version 2.0
6
+ * (the "License"); you may not use this file except in compliance with
7
+ * the License. You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import java.util.Random;
18
+
19
+ import javax.jms.Connection;
20
+ import javax.jms.Destination;
21
+ import javax.jms.JMSException;
22
+ import javax.jms.MapMessage;
23
+ import javax.jms.Message;
24
+ import javax.jms.MessageConsumer;
25
+ import javax.jms.MessageProducer;
26
+ import javax.jms.Session;
27
+
28
+ import org.apache.activemq.ActiveMQConnectionFactory;
29
+
30
+ /**
31
+ * The Supplier synchronously receives the order from the Vendor and
32
+ * randomly responds with either the number ordered, or some lower
33
+ * quantity.
34
+ */
35
+ public class Supplier implements Runnable {
36
+ private String url;
37
+ private String user;
38
+ private String password;
39
+ private final String ITEM;
40
+ private final String QUEUE;
41
+
42
+ public Supplier(String item, String queue, String url, String user, String password) {
43
+ this.url = url;
44
+ this.user = user;
45
+ this.password = password;
46
+ this.ITEM = item;
47
+ this.QUEUE = queue;
48
+ }
49
+
50
+ public void run() {
51
+ ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url);
52
+ Session session = null;
53
+ Destination orderQueue;
54
+ try {
55
+ Connection connection = connectionFactory.createConnection();
56
+
57
+ session = connection.createSession(true, Session.SESSION_TRANSACTED);
58
+ orderQueue = session.createQueue(QUEUE);
59
+ MessageConsumer consumer = session.createConsumer(orderQueue);
60
+
61
+ connection.start();
62
+
63
+ while (true) {
64
+ Message message = consumer.receive();
65
+ MessageProducer producer = session.createProducer(message.getJMSReplyTo());
66
+ MapMessage orderMessage;
67
+ if (message instanceof MapMessage) {
68
+ orderMessage = (MapMessage) message;
69
+ } else {
70
+ // End of Stream
71
+ producer.send(session.createMessage());
72
+ session.commit();
73
+ producer.close();
74
+ break;
75
+ }
76
+
77
+ int quantity = orderMessage.getInt("Quantity");
78
+ System.out.println(ITEM + " Supplier: Vendor ordered " + quantity + " " + orderMessage.getString("Item"));
79
+
80
+ MapMessage outMessage = session.createMapMessage();
81
+ outMessage.setInt("VendorOrderNumber", orderMessage.getInt("VendorOrderNumber"));
82
+ outMessage.setString("Item", ITEM);
83
+
84
+ quantity = Math.min(
85
+ orderMessage.getInt("Quantity"),
86
+ new Random().nextInt(orderMessage.getInt("Quantity") * 10));
87
+ outMessage.setInt("Quantity", quantity);
88
+
89
+ producer.send(outMessage);
90
+ System.out.println(ITEM + " Supplier: Sent " + quantity + " " + ITEM + "(s)");
91
+ session.commit();
92
+ System.out.println(ITEM + " Supplier: committed transaction");
93
+ producer.close();
94
+ }
95
+ connection.close();
96
+ } catch (JMSException e) {
97
+ e.printStackTrace();
98
+ }
99
+ }
100
+
101
+ public static void main(String[] args) {
102
+ String url = "tcp://localhost:61616";
103
+ String user = null;
104
+ String password = null;
105
+ String item = "HardDrive";
106
+
107
+ if (args.length >= 1) {
108
+ item = args[0];
109
+ }
110
+ String queue;
111
+ if ("HardDrive".equals(item)) {
112
+ queue = "StorageOrderQueue";
113
+ } else if ("Monitor".equals(item)) {
114
+ queue = "MonitorOrderQueue";
115
+ } else {
116
+ throw new IllegalArgumentException("Item must be either HardDrive or Monitor");
117
+ }
118
+
119
+ if (args.length >= 2) {
120
+ url = args[1];
121
+ }
122
+
123
+ if (args.length >= 3) {
124
+ user = args[2];
125
+ }
126
+
127
+ if (args.length >= 4) {
128
+ password = args[3];
129
+ }
130
+
131
+ Supplier s = new Supplier(item, queue, url, user, password);
132
+
133
+ new Thread(s, "Supplier " + item).start();
134
+ }
135
+ }
@@ -0,0 +1,47 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one or more
3
+ * contributor license agreements. See the NOTICE file distributed with
4
+ * this work for additional information regarding copyright ownership.
5
+ * The ASF licenses this file to You under the Apache License, Version 2.0
6
+ * (the "License"); you may not use this file except in compliance with
7
+ * the License. You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ public class TransactionsDemo {
18
+
19
+ public static void main(String[] args) {
20
+ String url = "tcp://localhost:61616";
21
+ String user = null;
22
+ String password = null;
23
+
24
+ if (args.length >= 1) {
25
+ url = args[0];
26
+ }
27
+
28
+ if (args.length >= 2) {
29
+ user = args[1];
30
+ }
31
+
32
+ if (args.length >= 3) {
33
+ password = args[2];
34
+ }
35
+
36
+ Retailer r = new Retailer(url, user, password);
37
+ Vendor v = new Vendor(url, user, password);
38
+ Supplier s1 = new Supplier("HardDrive", "StorageOrderQueue", url, user, password);
39
+ Supplier s2 = new Supplier("Monitor", "MonitorOrderQueue", url, user, password);
40
+
41
+ new Thread(r, "Retailer").start();
42
+ new Thread(v, "Vendor").start();
43
+ new Thread(s1, "Supplier 1").start();
44
+ new Thread(s2, "Supplier 2").start();
45
+ }
46
+
47
+ }
@@ -0,0 +1,302 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one or more
3
+ * contributor license agreements. See the NOTICE file distributed with
4
+ * this work for additional information regarding copyright ownership.
5
+ * The ASF licenses this file to You under the Apache License, Version 2.0
6
+ * (the "License"); you may not use this file except in compliance with
7
+ * the License. You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import java.util.HashMap;
18
+ import java.util.Map;
19
+ import java.util.Random;
20
+
21
+ import javax.jms.Connection;
22
+ import javax.jms.Destination;
23
+ import javax.jms.JMSException;
24
+ import javax.jms.MapMessage;
25
+ import javax.jms.Message;
26
+ import javax.jms.MessageConsumer;
27
+ import javax.jms.MessageListener;
28
+ import javax.jms.MessageProducer;
29
+ import javax.jms.Session;
30
+ import javax.jms.TemporaryQueue;
31
+
32
+ import org.apache.activemq.ActiveMQConnectionFactory;
33
+
34
+ /**
35
+ * The Vendor synchronously, and in a single transaction, receives the
36
+ * order from VendorOrderQueue and sends messages to the two Suppliers via
37
+ * MonitorOrderQueue and StorageOrderQueue.
38
+ * The responses are received asynchronously; when both responses come
39
+ * back, the order confirmation message is sent back to the Retailer.
40
+ */
41
+ public class Vendor implements Runnable, MessageListener {
42
+ private String url;
43
+ private String user;
44
+ private String password;
45
+ private Session asyncSession;
46
+ private int numSuppliers = 2;
47
+ private Object supplierLock = new Object();
48
+
49
+ public Vendor(String url, String user, String password) {
50
+ this.url = url;
51
+ this.user = user;
52
+ this.password = password;
53
+ }
54
+
55
+ public void run() {
56
+ ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url);
57
+ Session session = null;
58
+ Destination orderQueue;
59
+ Destination monitorOrderQueue;
60
+ Destination storageOrderQueue;
61
+ TemporaryQueue vendorConfirmQueue;
62
+ MessageConsumer orderConsumer = null;
63
+ MessageProducer monitorProducer = null;
64
+ MessageProducer storageProducer = null;
65
+
66
+ try {
67
+ Connection connection = connectionFactory.createConnection();
68
+
69
+ session = connection.createSession(true, Session.SESSION_TRANSACTED);
70
+ orderQueue = session.createQueue("VendorOrderQueue");
71
+ monitorOrderQueue = session.createQueue("MonitorOrderQueue");
72
+ storageOrderQueue = session.createQueue("StorageOrderQueue");
73
+
74
+ orderConsumer = session.createConsumer(orderQueue);
75
+ monitorProducer = session.createProducer(monitorOrderQueue);
76
+ storageProducer = session.createProducer(storageOrderQueue);
77
+
78
+ Connection asyncconnection = connectionFactory.createConnection();
79
+ asyncSession = asyncconnection.createSession(true, Session.SESSION_TRANSACTED);
80
+
81
+ vendorConfirmQueue = asyncSession.createTemporaryQueue();
82
+ MessageConsumer confirmConsumer = asyncSession.createConsumer(vendorConfirmQueue);
83
+ confirmConsumer.setMessageListener(this);
84
+
85
+ asyncconnection.start();
86
+
87
+ connection.start();
88
+
89
+
90
+ while (true) {
91
+ Order order = null;
92
+ try {
93
+ Message inMessage = orderConsumer.receive();
94
+ MapMessage message;
95
+ if (inMessage instanceof MapMessage) {
96
+ message = (MapMessage) inMessage;
97
+
98
+ } else {
99
+ // end of stream
100
+ Message outMessage = session.createMessage();
101
+ outMessage.setJMSReplyTo(vendorConfirmQueue);
102
+ monitorProducer.send(outMessage);
103
+ storageProducer.send(outMessage);
104
+ session.commit();
105
+ break;
106
+ }
107
+
108
+ // Randomly throw an exception in here to simulate a Database error
109
+ // and trigger a rollback of the transaction
110
+ if (new Random().nextInt(3) == 0) {
111
+ throw new JMSException("Simulated Database Error.");
112
+ }
113
+
114
+ order = new Order(message);
115
+
116
+ MapMessage orderMessage = session.createMapMessage();
117
+ orderMessage.setJMSReplyTo(vendorConfirmQueue);
118
+ orderMessage.setInt("VendorOrderNumber", order.getOrderNumber());
119
+ int quantity = message.getInt("Quantity");
120
+ System.out.println("Vendor: Retailer ordered " + quantity + " " + message.getString("Item"));
121
+
122
+ orderMessage.setInt("Quantity", quantity);
123
+ orderMessage.setString("Item", "Monitor");
124
+ monitorProducer.send(orderMessage);
125
+ System.out.println("Vendor: ordered " + quantity + " Monitor(s)");
126
+
127
+ orderMessage.setString("Item", "HardDrive");
128
+ storageProducer.send(orderMessage);
129
+ System.out.println("Vendor: ordered " + quantity + " Hard Drive(s)");
130
+
131
+ session.commit();
132
+ System.out.println("Vendor: Comitted Transaction 1");
133
+
134
+ } catch (JMSException e) {
135
+ System.out.println("Vendor: JMSException Occured: " + e.getMessage());
136
+ e.printStackTrace();
137
+ session.rollback();
138
+ System.out.println("Vendor: Rolled Back Transaction.");
139
+ }
140
+ }
141
+
142
+ synchronized (supplierLock) {
143
+ while (numSuppliers > 0) {
144
+ try {
145
+ supplierLock.wait();
146
+ } catch (InterruptedException e) {
147
+ e.printStackTrace();
148
+ }
149
+ }
150
+ }
151
+
152
+ connection.close();
153
+ asyncconnection.close();
154
+
155
+ } catch (JMSException e) {
156
+ e.printStackTrace();
157
+ }
158
+
159
+ }
160
+
161
+ public void onMessage(Message message) {
162
+ if (!(message instanceof MapMessage)) {
163
+ synchronized(supplierLock) {
164
+ numSuppliers--;
165
+ supplierLock.notifyAll();
166
+ }
167
+ try {
168
+ asyncSession.commit();
169
+ return;
170
+ } catch (JMSException e) {
171
+ e.printStackTrace();
172
+ }
173
+ }
174
+
175
+ int orderNumber = -1;
176
+ try {
177
+ MapMessage componentMessage = (MapMessage) message;
178
+
179
+ orderNumber = componentMessage.getInt("VendorOrderNumber");
180
+ Order order = Order.getOrder(orderNumber);
181
+ order.processSubOrder(componentMessage);
182
+ asyncSession.commit();
183
+
184
+ if (! "Pending".equals(order.getStatus())) {
185
+ System.out.println("Vendor: Completed processing for order " + orderNumber);
186
+
187
+ MessageProducer replyProducer = asyncSession.createProducer(order.getMessage().getJMSReplyTo());
188
+ MapMessage replyMessage = asyncSession.createMapMessage();
189
+ if ("Fulfilled".equals(order.getStatus())) {
190
+ replyMessage.setBoolean("OrderAccepted", true);
191
+ System.out.println("Vendor: sent " + order.quantity + " computer(s)");
192
+ } else {
193
+ replyMessage.setBoolean("OrderAccepted", false);
194
+ System.out.println("Vendor: unable to send " + order.quantity + " computer(s)");
195
+ }
196
+ replyProducer.send(replyMessage);
197
+ asyncSession.commit();
198
+ System.out.println("Vender: committed transaction 2");
199
+ }
200
+ } catch (JMSException e) {
201
+ e.printStackTrace();
202
+ }
203
+ }
204
+
205
+ public static class Order {
206
+ private static Map<Integer, Order> pendingOrders = new HashMap<Integer, Order>();
207
+ private static int nextOrderNumber = 1;
208
+
209
+ private int orderNumber;
210
+ private int quantity;
211
+ private MapMessage monitor = null;
212
+ private MapMessage storage = null;
213
+ private MapMessage message;
214
+ private String status;
215
+
216
+ public Order(MapMessage message) {
217
+ this.orderNumber = nextOrderNumber++;
218
+ this.message = message;
219
+ try {
220
+ this.quantity = message.getInt("Quantity");
221
+ } catch (JMSException e) {
222
+ e.printStackTrace();
223
+ this.quantity = 0;
224
+ }
225
+ status = "Pending";
226
+ pendingOrders.put(orderNumber, this);
227
+ }
228
+
229
+ public Object getStatus() {
230
+ return status;
231
+ }
232
+
233
+ public int getOrderNumber() {
234
+ return orderNumber;
235
+ }
236
+
237
+ public static int getOutstandingOrders() {
238
+ return pendingOrders.size();
239
+ }
240
+
241
+ public static Order getOrder(int number) {
242
+ return pendingOrders.get(number);
243
+ }
244
+
245
+ public MapMessage getMessage() {
246
+ return message;
247
+ }
248
+
249
+ public void processSubOrder(MapMessage message) {
250
+ String itemName = null;
251
+ try {
252
+ itemName = message.getString("Item");
253
+ } catch (JMSException e) {
254
+ e.printStackTrace();
255
+ }
256
+
257
+ if ("Monitor".equals(itemName)) {
258
+ monitor = message;
259
+ } else if ("HardDrive".equals(itemName)) {
260
+ storage = message;
261
+ }
262
+
263
+ if (null != monitor && null != storage) {
264
+ // Received both messages
265
+ try {
266
+ if (quantity > monitor.getInt("Quantity")) {
267
+ status = "Cancelled";
268
+ } else if (quantity > storage.getInt("Quantity")) {
269
+ status = "Cancelled";
270
+ } else {
271
+ status = "Fulfilled";
272
+ }
273
+ } catch (JMSException e) {
274
+ e.printStackTrace();
275
+ status = "Cancelled";
276
+ }
277
+ }
278
+ }
279
+ }
280
+
281
+ public static void main(String[] args) {
282
+ String url = "tcp://localhost:61616";
283
+ String user = null;
284
+ String password = null;
285
+
286
+ if (args.length >= 1) {
287
+ url = args[0];
288
+ }
289
+
290
+ if (args.length >= 2) {
291
+ user = args[1];
292
+ }
293
+
294
+ if (args.length >= 3) {
295
+ password = args[2];
296
+ }
297
+
298
+ Vendor v = new Vendor(url, user, password);
299
+
300
+ new Thread(v, "Vendor").start();
301
+ }
302
+ }