http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/using-jms.xml ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/using-jms.xml b/docs/user-manual/zh/using-jms.xml new file mode 100644 index 0000000..254a787 --- /dev/null +++ b/docs/user-manual/zh/using-jms.xml @@ -0,0 +1,273 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- ============================================================================= --> +<!-- Copyright © 2009 Red Hat, Inc. and others. --> +<!-- --> +<!-- The text of and illustrations in this document are licensed by Red Hat under --> +<!-- a Creative Commons AttributionâShare Alike 3.0 Unported license ("CC-BY-SA"). --> +<!-- --> +<!-- An explanation of CC-BY-SA is available at --> +<!-- --> +<!-- http://creativecommons.org/licenses/by-sa/3.0/. --> +<!-- --> +<!-- In accordance with CC-BY-SA, if you distribute this document or an adaptation --> +<!-- of it, you must provide the URL for the original version. --> +<!-- --> +<!-- Red Hat, as the licensor of this document, waives the right to enforce, --> +<!-- and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent --> +<!-- permitted by applicable law. --> +<!-- ============================================================================= --> +<chapter id="using-jms"> + <title>使ç¨JMS</title> + <para>å¾å¤ç¨æ·å欢使JMSï¼å æ¤HornetQæä¾äºJMSæå¡ã</para> + <para>JMSæ¯ä¸ä¸ªæ®é使ç¨APIæ åï¼ç»å¤§å¤æ°çæ¶æ¯ç³»ç»é½æä¾JMSæ¥å£ãå¦æä½ å¯¹JMSè¿ä¸çæï¼å»ºè®®ä½ å åèä¸ä¸ + Sunç<ulink url="http://java.sun.com/products/jms/tutorial/1_3_1-fcs/doc/jms_tutorialTOC.html"> + JMS æç¨</ulink>ã</para> + <para>HornetQè¿æä¾äºè®¸å¤çJMSç示ä¾ç¨åºï¼examplesï¼ãæ¯å¦ç®åçJMS QueueåTopicç示ä¾ï¼å°±å¾éååå¦è åä¸ºäº + 解HornetQ JMSçèµ·ç¹ã<xref linkend="examples"/>对è¿äºç¤ºä¾ä½äºè¯¦ç»ç说æã</para> + <para>ä¸é¢æ们å°å¸¦é¢è¯»è ä¸æ¥æ¥å°é ç½®HornetQçJMSæå¡ï¼å¹¶å建ä¸ä¸ªç®åçJMSç¨åºãæ们è¿å°å±ç¤ºå¦ä½å¨æ²¡æJNDIçæ åµä¸ + æ¥ä½¿ç¨HornetQä¸çJMSã</para> + <section> + <title>ä¸ä¸ªç®åç订è´ç³»ç»</title> + <para>æ¬ç« æ们å°ç¨ä¸ä¸ªç®åç订è´ç³»ç»å为ä¸ä¸ªä¾åã尽管å®ååç®åï¼ä½æ¯å®è½å¤å¾å¥½å°å大家å±ç¤ºJMSç设置å使ç¨ã</para> + <para>æ¬ä¾ä¸æä¸ä¸ªå为 <literal>OrderQueue</literal>JMSéåï¼è¿å°æä¸ä¸ª <literal>MessageProducer</literal> + ç¨æ¥åéååé订è´æ¶æ¯ãåéå°éåçæ¶æ¯ç±ä¸ä¸ª <literal>MessageConsumer</literal> æ¥æ¥æ¶ã</para> + <para>æ们æç¨çéåæ¯<literal>æä¹ ï¼durableï¼</literal>çéåï¼ä¹å°±æ¯è¯´è¿ä¸ªéåä¸åæå¡å¨æ éçå½±åãå½æå¡å¨ + åçæ ééæ°å¯å¨åï¼è¿ä¸ªéåä»ç¶åå¨ãæ们éè¦æè¿ä¸ªéåäºå é¨ç½²å¥½ãåæ³å°±æ¯å°éååå°JMSçé ç½®æ件ä¸ãå½æå¡å¯å¨ + æ¶å°é ç½®æ件ä¸çéåèªå¨é¨ç½²å¥½ã</para> + </section> + <section id="using-jms.server.configuration"> + <title>JMSæå¡çé ç½®</title> + <para><literal>hornetq-jms.xml</literal>æ件å å«äºéè¦å建ä¸é¨ç½²çJMS Queueï¼TopicåConnectionFactory + çå®ä¾ã该æä»¶å¿ é¡»è¦æå®å¨classpathä¸ãä»è¿ä¸ªæ件ä¸é¨ç½²å¥½ç对象é½å¯ä»¥ç¨JNDIæ¥æ¾å°ã</para> + <para>JMS客æ·ç«¯å¯ä»¥å©ç¨JMS ConnectionFactory对象æ¥å建ä¸æå¡å¨çè¿æ¥ãConnectionFactoryä¸æå ³äºæå¡å¨å°åç + ä¿¡æ¯ä»¥ååç§åæ°ãé常使ç¨è¿äºåæ°çé»è®¤å¼å³å¯ã</para> + <para>è¿éæ们å°è¦å¨æå¡å¨ç«¯é¨ç½²ä¸ä¸ªJMSéååä¸ä¸ªJMS ConnectionFactory ï¼è¿æ¥å·¥åï¼ãå½ç¶å®å ¨å¯ä»¥é¨ç½²å¤ä¸ªJMS对象ã + ä¸é¢ç»åºäºå ·ä½çé ç½®å 容ï¼</para> + <programlisting> +<configuration xmlns="urn:hornetq" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="urn:hornetq ../schemas/hornetq-jms.xsd "> + + <connection-factory name="ConnectionFactory"> + <connectors> + <connector-ref connector-name="netty"/> + </connectors> + <entries> + <entry name="ConnectionFactory"/> + </entries> + </connection-factory> + + <queue name="OrderQueue"> + <entry name="queues/OrderQueue"/> + </queue> + +</configuration> + </programlisting> + <para>å¨æ¬æ件ä¸æ们é¨ç½²äºä¸ä¸ªå为 <literal>ConnectionFactory</literal> çä¸ä¸ªè¿æ¥å·¥åï¼å¹¶ä¸å°å ¶ç»å®å° + JNDIä¸ãå¦æéè¦å¯ä»¥å°ä¸ä¸ªè¿æ¥å·¥åç»å®ä¸ºå¤ä¸ªå称ãåªéè¦å°ç»å®çååå å ¥å° <literal>entry</literal> + ä¸å³å¯ã</para> + <note> + <para>å¨JMS ConnectionFactoryçé ç½®ä¸å¼ç¨äºä¸ä¸ªå为 <literal>netty</literal>ç<literal>connector</literal>ã + å®å®é ä¸æåçæ¯HornetQæ ¸å¿ä¸é¨ç½²çä¸ä¸ªè¿æ¥å¨ï¼connectorï¼ãå®çé ç½®å¨HornetQçæ ¸å¿é ç½®æ件 + <literal>hornetq-configuration.xml</literal> ä¸ãå®å®ä¹äºéç¨ä½ç§ä¼ è¾ä¸æå¡å¨è¿æ¥ã</para> + </note> + </section> + <section id="using-jms.configure.factory.types"> + <title>è¿æ¥å·¥åçç±»å</title> + <para>å¨JMS APIææ¡£ä¸æå ç§ä¸åç±»åçè¿æ¥å·¥åä¾ç¨æ·ä½¿ç¨ãHornetQ为ç¨æ·æä¾äºé ç½®è¿æ¥å·¥åç±»åçåæ°ãç¨æ·å¯ä»¥éè¿ + é ç½®è¿æ¥å·¥åçâsignature"å±æ§å"xa"åæ°æ¥å¾å°æ³è¦çç±»åãâsingature"å±æ§æ¯å符串类åï¼å®æä¸ä¸ªå¯éå¼ï¼ + <emphasis>generic</emphasis>ã<emphasis>queue</emphasis>å<emphasis>topic</emphasis>; + <literal>xa</literal>æ¯ä¸ä¸ªå¸å°ååæ°ãä¸è¡¨ç»åºäºä¸åç±»åè¿æ¥å·¥å对åºçé ç½®å¼ï¼</para> + <table frame="topbot" id="using-jms.table.configure.factory.types"> + <title>è¿æ¥å·¥åç±»åçé ç½®</title> + <tgroup cols="3"> + <colspec colname="signature" colnum="1"/> + <colspec colname="xa" colnum="2"/> + <colspec colname="cftype" colnum="3"/> + <thead> + <row> + <entry>signature</entry> + <entry>xa</entry> + <entry>è¿æ¥å·¥åçç±»å</entry> + </row> + </thead> + <tbody> + <row> + <entry>generic (é»è®¤)</entry> + <entry>false (é»è®¤)</entry> + <entry>javax.jms.ConnectionFactory</entry> + </row> + <row> + <entry>generic</entry> + <entry>true</entry> + <entry>javax.jms.XAConnectionFactory</entry> + </row> + <row> + <entry>queue</entry> + <entry>false</entry> + <entry>javax.jms.QueueConnectionFactory</entry> + </row> + <row> + <entry>queue</entry> + <entry>true</entry> + <entry>javax.jms.XAQueueConnectionFactory</entry> + </row> + <row> + <entry>topic</entry> + <entry>false</entry> + <entry>javax.jms.TopicConnectionFactory</entry> + </row> + <row> + <entry>topic</entry> + <entry>true</entry> + <entry>javax.jms.XATopicConnectionFactory</entry> + </row> + </tbody> + </tgroup> + </table> + <para>ä¸é¢çä¾åé ç½®äºä¸ä¸ªXAQueueConnectionFactory:</para> + <programlisting> +<configuration xmlns="urn:hornetq" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="urn:hornetq ../schemas/hornetq-jms.xsd "> + + <connection-factory name="ConnectionFactory" signature="queue"> + <xa>true</xa> + <connectors> + <connector-ref connector-name="netty"/> + </connectors> + <entries> + <entry name="ConnectionFactory"/> + </entries> + </connection-factory> +</configuration> + </programlisting> + </section> + <section> + <title>JNDIçé ç½®</title> + <para>å½å®¢æ·ç«¯ä½¿ç¨JNDIæ¶éè¦å®ä¹ä¸äºJNDIçåæ°ãè¿äºåæ°ä¸»è¦ç¨æ¥ç¡®å®JNDIæå¡çå°åãè¿äºåæ°é常ä¿åå¨ + ä¸ä¸ªå为 <literal>jndi.properties</literal> çæ件ä¸ãè¿ä¸ªæ件éè¦å¨å®¢æ·ç«¯çclasspathä¸ãæè ä½ + å¯ä»¥å¨å建JNDIçInitialContextæ¶å°è¿äºåæ°ä¼ è¿å»ãæ³äºè§£å ¨é¢çJNDIç¥è¯ï¼å¯ä»¥åè§ <ulink + url="http://java.sun.com/products/jndi/tutorial/TOC.html">Sun JNDI æç¨</ulink> + ã</para> + <para>è¦ä¸JBossçJNDI Serverè¿è¡éè¿ ï¼éè¦æå®ä»¥ä¸çJNDIåæ°ï¼</para> + <programlisting> +java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory +java.naming.provider.url=jnp://myhost:1099 +java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces + </programlisting> + <para>å ¶ä¸ç <literal>myhost</literal> æ¯ JNDI serverç主æºåæIPå°åã 1099æ¯ç«¯å£å·ï¼æ ¹æ®ä¸åçé ç½®ï¼ + 端å£å·ä¹å¯è½ä¸åã</para> + <para>å¨é»è®¤çåç¬æ¹å¼ï¼standaloneï¼é ç½®ä¸ï¼JNDIæå¡ç«¯å£çåæ°å®ä¹å¨<literal>hornetq-beans.xml</literal> + æ件ä¸ç <literal>JNDIServer</literal> beanä¸ï¼å¦ï¼</para> + <programlisting> +<bean name="JNDIServer" class="org.jnp.server.Main"> + <property name="namingInfo"> + <inject bean="Naming"/> + </property> + <property name="port">1099</property> + <property name="bindAddress">localhost</property> + <property name="rmiPort">1098</property> + <property name="rmiBindAddress">localhost</property> +</bean> + </programlisting> + <note> + <para>å¦æä½ çJNDIæå¡å¨ä¸å®¢æ·ç«¯ä¸å¨åä¸å°æºå¨ä¸ï¼ä¸å®ä¸è¦å¿è®°å°bindAddressæ¹æç¸åºçå°åï¼ + åä¸ä¸è½ç¨<literal>localhost</literal>ï¼</para> + </note> + <note> + <para><emphasis>åªæå½HornetQä½ä¸ºç¬ç«æå¡å¨è¿è¡æ¶</emphasis> + æå¯ä»¥é ç½®JNDIServer beanãå½HornetQè¿è¡äºJBossåºç¨æå¡å¨ä¸æ¶ï¼ç±äºJBOSSæå¡å¨å·²ç»æä¾äº + JNDIæå¡ï¼æ以就ä¸éè¦åè¿è¡é ç½®äºã</para> + </note> + </section> + <section> + <title>ç¨åºä»£ç </title> + <para>ä¸é¢ç»åºçä¾åä¸ç代ç ï¼</para> + <para>é¦å æ们å建ä¸ä¸ªJNDIçInitial Contextï¼</para> + <programlisting>InitialContext ic = new InitialContext();</programlisting> + <para>ä¸é¢æ们æ¥æ¾ connection factoryï¼</para> + <programlisting>ConnectionFactory cf = (ConnectionFactory)ic.lookup("/ConnectionFactory");</programlisting> + <para>ç¶åæ¥æ¾ Queueï¼</para> + <programlisting>Queue orderQueue = (Queue)ic.lookup("/queues/OrderQueue");</programlisting> + <para>æ¥ä¸æ¥ç¨æ¿å°çConnectionFactory建ç«JMSè¿æ¥ï¼</para> + <programlisting>Connection connection = cf.createConnection();</programlisting> + <para>åå建ä¸ä¸ªéäºå¡çãAUTO_ACKNOWLEDGEæ¹å¼çJMS Sessionï¼</para> + <programlisting>Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);</programlisting> + <para>å建ä¸ä¸ª MessageProducer 以åéååé订åæ¶æ¯ï¼</para> + <programlisting>MessageProducer producer = session.createProducer(orderQueue);</programlisting> + <para>å建ä¸ä¸ª MessageConsumer 以ä»éåä¸æ¥æ¶è®¢åæ¶æ¯ï¼</para> + <programlisting>MessageConsumer consumer = session.createConsumer(orderQueue);</programlisting> + <para>è¦å¯å¨è¿æ¥ï¼ä»¥ä½¿æ¶æ¯è½ä¼ éç»æ¥æ¶è ï¼</para> + <programlisting>connection.start();</programlisting> + <para>åéä¸ä¸ªç®åçTextMessageï¼</para> + <programlisting>TextMessage message = session.createTextMessage("This is an order"); +producer.send(message);</programlisting> + <para>ä¹åæ¥æ¶è¿ä¸ªæ¶æ¯ï¼</para> + <programlisting>TextMessage receivedMessage = (TextMessage)consumer.receive(); +System.out.println("Got order: " + receivedMessage.getText()); + </programlisting> + <para>çèµ·æ¥å°±æ¯è¿ä¹ç®åã å¨HornetQæåå¸å ä¸æå¾å¤åç§åæ ·çJMSä¾åä¾ç¨æ·åèã</para> + <warning> + <para>请注æï¼JMSçè¿æ¥ï¼connectionï¼ãä¼è¯ï¼sessionï¼ãç产è ï¼producerï¼åæ¶è´¹è ï¼consumerï¼ + 对象æ¯å¯ä»¥<emphasis>éç¨</emphasis>çã</para> + <para>å¦ææ¯åéææ¥æ¶ä¸ä¸ªæ¶æ¯é½è¦éæ°å建è¿äºJMS对象ï¼æ¯ä¸ç¬¦å设计模å¼çè¦æ±çãè¿æ ·åä¼é æåºç¨ç¨åº + çæ§è½å¾å·®ãè¿æ¹é¢çå 容å¨<xref linkend="perf-tuning"/>ä¸å°ä¼è¿ä¸æ¥ç讨论ã</para> + </warning> + </section> + <section> + <title>ä¸ä½¿ç¨JNDIèç´æ¥å建JMSç对象</title> + <para>尽管éç¨JNDI对 JMS çåç§<emphasis>管ç对象ï¼Administered + Objectsï¼</emphasis> (å³JMS Queue, Topic and ConnectionFactory)æ¯å¾å¸¸ç¨çæ¹æ³ï¼ä½å¨æäº + æ åµæ¶JNDIä¸å¯ç¨ï¼æè ä½ ä¸éè¦ç¨JNDIæ¶ï¼å¦ä½è¿è½æ£å¸¸ä½¿ç¨JMSå¢ï¼</para> + <para>HornetQå è®¸ä½ ä¸éè¿JNDIä¹è½ä½¿ç¨JMSãHornetQæ¯æç´æ¥å建JMSçåç§å¯¹è±¡èæ éJNDIçåå¨ã</para> + <para>å¨<xref linkend="examples"/>ä¸å æ¬æè¿æ ·çä¾åä¾è¯»è åèã</para> + <para>ä¸é¢æ们就å°ä¸è¿°é£ä¸ªç®åçä¾åéåï¼ä»¥æå¼å¯¹JNDIçä¾èµï¼</para> + <para>æ们éè¿HornetQJMSClientç±»æ¥æ¹ä¾¿å°å建JMSçConnectionFactoryã注æè¿éè¦æä¾åç§è¿æ¥åæ°åå®ä¹ + æç¨çä¼ è¾æ¹å¼ãæå ³è¿æ¥å¨ï¼connectorï¼çä¿¡æ¯åè§<xref linkend="configuring-transports" + />ã</para> + <programlisting> +TransportConfiguration transportConfiguration = + new TransportConfiguration(NettyConnectorFactory.class.getName()); +ConnectionFactory cf = HornetQJMSClient.createConnectionFactory(transportConfiguration); + </programlisting> + <para>åæ ·å©ç¨HornetQJMSClientç±»å建JMS Queue对象ï¼</para> + <programlisting>Queue orderQueue = HornetQJMSClient.createQueue("OrderQueue");</programlisting> + <para>ç¶åç¨è¿æ¥å·¥åå建 JMS è¿æ¥ï¼</para> + <programlisting>Connection connection = cf.createConnection();</programlisting> + <para>è¿æéäºå¡ç\AUTO_ACKNOWLEDGEæ¹å¼ç JMS ä¼è¯ï¼sessionï¼ï¼</para> + <programlisting>Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);</programlisting> + <para>以åç¨äºåéæ¶æ¯çMessageProducerï¼</para> + <programlisting>MessageProducer producer = session.createProducer(orderQueue);</programlisting> + <para>åæ¥æ¶æ¶æ¯ç MessageConsumerï¼</para> + <programlisting>MessageConsumer consumer = session.createConsumer(orderQueue);</programlisting> + <para>å¯å¨è¿æ¥ï¼</para> + <programlisting>connection.start();</programlisting> + <para>å建ä¸ä¸ªç®åç TextMessage 并å°å ¶åéå°éåï¼</para> + <programlisting>TextMessage message = session.createTextMessage("This is an order"); +producer.send(message);</programlisting> + <para>æ¥æ¶æ¶æ¯ï¼</para> + <programlisting>TextMessage receivedMessage = (TextMessage)consumer.receive(); +System.out.println("Got order: " + receivedMessage.getText()); + </programlisting> + </section> + <section id="using-jms.clientid"> + <title>Client IDç设置</title> + <para>å¨å»ºç«æä¹ ç订é ï¼subscriptionï¼æ¶ï¼JMS客æ·éè¦æä¸ä¸ªå®¢æ·ID ï¼client idï¼ãæ们å¯ä»¥éè¿é ç½® + connection factoryæ¥å®ä¹å®ãï¼å ¶ä¸ç <literal>client-id</literal>项ï¼ãè¿æ ·ææéè¿è¿ä¸ª + connection factoryæ¥å建çè¿æ¥é½å ·æè¿ä¸ªå®¢æ·IDã</para> + </section> + <section id="using-jms.dupsokbatchsize"> + <title>设置DUPS_OKçBatch Size </title> + <para>å¦æJMSçéç¥æ¨¡å¼ä¸º<literal>DUPS_OK</literal>ï¼æ们å¯ä»¥é ç½®æ¥æ¶è ï¼consumerï¼ä»¥ä½¿å¾å®ä»¥æ¹ä¸ºåä½ + åééç¥ï¼èä¸æ¯ä¸ä¸ªä¸ä¸ªå°åéç¥ãè¿æ ·åå¯ä»¥èçå¾å¤å¸¦å®½ï¼æçé«ãé ç½®çæ¹æ³æ¯è®¾ç½®connection factoryä¸ + ç<literal>dups-ok-batch-size</literal>项ãåä½æ¯åèï¼byteï¼ãé»è®¤å¼æ¯1024 * 1024 bytes = 1 MiBã</para> + </section> + <section id="using-jms.txbatchsize"> + <title>设置äºå¡ï¼Transactionï¼çBatch Size</title> + <para>å½å¨ä¸ä¸ªäºå¡å æ¥æ¶æ¶æ¯æ¶ï¼å¯è½éè¿é 置使æ¥æ¶è éç¨æ¹éçæ¹å¼åééç¥ï¼èä¸æ¯ä¸ä¸ªä¸ä¸ªçåéãè¿æ ·ä¹å¯ä»¥èç带宽ã + é ç½®æ¹æ³æ¯è®¾ç½®connection factoryä¸ç<literal + >transaction-batch-size</literal>项ã åä½æ¯åèï¼byteï¼ãé»è®¤å¼æ¯1024 * + 1024ã</para> + </section> +</chapter>
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/using-server.xml ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/using-server.xml b/docs/user-manual/zh/using-server.xml new file mode 100644 index 0000000..1264e30 --- /dev/null +++ b/docs/user-manual/zh/using-server.xml @@ -0,0 +1,312 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- ============================================================================= --> +<!-- Copyright © 2009 Red Hat, Inc. and others. --> +<!-- --> +<!-- The text of and illustrations in this document are licensed by Red Hat under --> +<!-- a Creative Commons AttributionâShare Alike 3.0 Unported license ("CC-BY-SA"). --> +<!-- --> +<!-- An explanation of CC-BY-SA is available at --> +<!-- --> +<!-- http://creativecommons.org/licenses/by-sa/3.0/. --> +<!-- --> +<!-- In accordance with CC-BY-SA, if you distribute this document or an adaptation --> +<!-- of it, you must provide the URL for the original version. --> +<!-- --> +<!-- Red Hat, as the licensor of this document, waives the right to enforce, --> +<!-- and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent --> +<!-- permitted by applicable law. --> +<!-- ============================================================================= --> +<chapter id="using-server"> + <title>使ç¨HornetQæå¡</title> + <para>æ¬ç« å°ä»ç»å¦ä½ä½¿ç¨HornetQæå¡ã</para> + <para>å ¶ä¸çå 容å æ¬æå¡å¨çä½ç½®ï¼å¦ä½å¯å¨ååæ¢HornetQæå¡å¨ãæ¬ç« è¿å°è§£éHornetQçç®å½ç»æï¼å ¶ä¸çæ件åå ¶ç¨éã</para> + <para>æ¬ç« ä¸ææå°çHornetQæå¡å¨æ¯æHornetQé»è®¤é ç½®çç¬ç«æå¡å¨ï¼å å«JMSæå¡åJNDIæå¡ã</para> + <para>对äºè¿è¡äºJBossåºç¨æå¡å¨ä¸çHornetQï¼å ¶åºæ¬ç»ææ¯ä¸æ ·çï¼åªæ¯æä¸äºå°çå·®å«ã</para> + <section> + <title>æå¡çå¯å¨ååæ¢</title> + <para>å¨HornetQçå®è£ ç®å½ä¸<literal>bin</literal>åç®å½ä¸å å«æä¸ä¸ªunit/linuxèæ¬run.shå对åºçWindowsæ¹å¤çæ件run.batã</para> + <para>å¦æä½ æ¯å¨Unix/Linuxç¯å¢ï¼å¨binç®å½ä¸è¿è¡<literal>./run.sh</literal>ã</para> + <para>å¦ææ¯å¨Windowsç¯å¢ï¼åå¨binç®å½ä¸è¿è¡ <literal>run.bat</literal>ã</para> + <para>è¿ä¸ªèæ¬æ件ä¼è®¾ç½®classpath以ååç§JVMåæ°ï¼å¹¶å¯å¨JBoss MicrocontainerãJBoss Microcontaineræ¯ä¸ä¸ªè½»é级ç容å¨ã + å®è¢«ç¨æ¥é¨ç½²HornetQçPOJO对象ã</para> + <para>è¦åæ¢æå¡ï¼è¿è¡å ¶ä¸çç¸åºèæ¬ï¼å¨Unix/Linuxç¯å¢ä¸ï¼è¿è¡ <literal>stop.sh</literal>ã + å¨Windowsç¯å¢ï¼è¿è¡ <literal>run.bat</literal>ã</para> + <para>注æHornetQéè¦å¨Java 6å以ä¸çæ¬æè½æ£å¸¸è¿è¡ã</para> + <para>å¯å¨ååæ¢èæ¬å¨é»è®¤æ¡ä»¶ä¸è¯»å<literal>config/stand-alone/non-clustered</literal>ç®å½ä¸çé ç½®æ件ã + å¦æè¦æåå ¶ä»ç®å½ï¼å¯ä»¥å¨å½ä»¤è¡å®ç°ï¼ä¾å¦ï¼ <literal>./run.sh ../config/stand-alone/clustered</literal>ã + è¿ä¸æ¹æ³åæ ·éç¨äºWindowsæ¹å¤çæ件ã</para> + </section> + <section> + <title>æå¡å¨ç«¯JVMåæ°ç设置</title> + <para>å¨å¯å¨èæ¬<literal>run.sh</literal>å<literal>run.bat</literal>ä¸è®¾ç½®äºä¸äºJVMåæ°ï¼ + è¿äºåæ°ä¸»è¦æ¯è°æ´Java 6çè¿è¡ç¯å¢åæå¾åæ¶ççç¥ãæ们建议éç¨å¹¶è¡æå¾åæ¶çæ¹æ³ã + è¿ç§æ¹æ³å¯ä»¥å°æå¾åæ¶æé æç延æ¶è¿è¡å¹³ååé ï¼ææåå°ç±äºæå¾åæ¶å¼èµ·çé¿æ¶é´æåçæ åµã</para> + <para>é»è®¤æ¡ä»¶ä¸HornetQéè¦æ大1GBçå å空é´ãéè¿<literal>-Xms</literal>å<literal>-Xmx</literal>å¯ä»¥è°æ´Javaç¨åºå åç使ç¨ã</para> + <para>ä½ å¯ä»¥åå¯å¨èæ¬ä¸æ·»å å ¶å®çåæ°æä¿®æ¹å·²æçåæ°ï¼å·²æ»¡è¶³ä½ çéè¦ã</para> + </section> + <section> + <title>æå¡å¨ç«¯çclasspath</title> + <para>HornetQå¨å ¶classpathä¸å¯»æ¾é ç½®æ件ã</para> + <para>classpath被å®ä¹å¨<literal>run.sh</literal>å<literal>run.bat</literal>èæ¬ä¸ãå¨HornetQçåå¸ä¸ï¼å¯å¨èæ¬å°éé群çé ç½®æ件ç®å½å è¿äºclasspathä¸ã该ç®å½å æ¬äºä¸ç»é ç½®æ件ï¼å¯ä»¥è®©HornetQ以åºæ¬çéé群æ¹å¼è¿è¡ãå®çå ·ä½ä½ç½®æ¯å¨HornetQåå¸æ ¹ç®å½ä¸ config/stand-along/non-clustered/ åç®å½ã</para> + <para>å¨HornetQçåå¸å ä¸å æ¬äºä¸ç»æ åçé ç½®ç®å½ï¼å®ä»¬æ¯ï¼</para> + <itemizedlist> + <listitem> + <para>éé群æ¹å¼çç¬ç«æå¡å¨é ç½®</para> + </listitem> + <listitem> + <para>é群æ¹å¼çç¬ç«æå¡å¨é ç½®</para> + </listitem> + <listitem> + <para>éé群æ¹å¼è¿è¡äºJBossåºç¨æå¡å¨</para> + </listitem> + <listitem> + <para>é群æ¹å¼è¿è¡äºJBossåºç¨æå¡å¨</para> + </listitem> + </itemizedlist> + <para>å½ç¶ä½ å¯ä»¥å建èªå·±å®ä¹çé ç½®æ件ç®å½ãè¦æ³¨æçæ¯å°ä½ çç®å½å å°classpathä¸ä»¥ä¾¿HornetQè½æ£ç¡®æ¾å°å¹¶å è½½ã</para> + </section> + <section id="using-server.library.path"> + <title>Library Path</title> + <para>å¦æè¦å¨Linuxä¸ä½¿ç¨å¼æ¥IOçæ¥å¿ï¼<link linkend="aio-journal">Asynchronous IO Journal</link>ï¼ï¼ + ä½ éè¦å¨javaé项ä¸æå®<literal>java.library.path</literal>ã<literal>run.sh</literal>èæ¬å¯ä»¥èªå¨å®æè¿ä¸æ¥ã</para> + <para>å¦æ没ææå®<literal>java.library.path</literal>ï¼JVMå°ä½¿ç¨<literal>LD_LIBRARY_PATH</literal>ç¯å¢åéã</para> + </section> + <section> + <title>ç³»ç»åé</title> + <para>HornetQå½ä»¤è¡å¯ä»¥æ¥åç³»ç»åéæ¥é ç½®æ¥å¿ï¼loggingï¼ãæå ³loggingé ç½®çå ·ä½ä¿¡æ¯åè§<xref linkend="logging"/>ã</para> + </section> + <section id="using-server.configuration"> + <title>é ç½®æ件</title> + <para>é ç½®æ件çè·¯å¾å®ä¹å¨ <literal>run.sh</literal> å <literal>run.bat</literal> èæ¬ä¸çclasspathéã该路å¾ä¸å¯ä»¥å å«ä»¥ä¸æ件ï¼</para> + <itemizedlist> + <listitem> + <para><literal>hornetq-beans.xml</literal> ï¼å¦ææ¯è¿è¡å¨JBossåºç¨æå¡å¨å ï¼å为 <literal + >hornetq-jboss-beans.xml</literal>ï¼ãè¿æ¯JBoss Microcontainerçbeané ç½®æ件ãå ¶ä¸å®ä¹äºHornetQç + åç§beanï¼ä»¥åå®ä»¬ä¹é´çä¾èµå ³ç³»ãHornetQçbeané½æ¯ä¸äºPOJOãæ¯JBoss Microcontainerä¿è¯äºè¿äºbeançæ£ç¡®è£ è½½åè¿è¡ã</para> + </listitem> + <listitem> + <para><literal>hornetq-configuration.xml</literal>ãè¿ä¸ªæ¯HornetQç主è¦çé ç½®æ件ã + å ¶ä¸çææåæ°å¨<xref linkend="configuration-index"/>ä¸ç»åºäºè§£é. å¨ <xref + linkend="usingserver.mainconfig"/> ä¹ææ´å¤çç¸å ³ä¿¡æ¯ã</para> + </listitem> + <listitem> + <para><literal>hornetq-queues.xml</literal>ãè¿ä¸ªæ件éå å«äºé¢å®ä¹çqueue以åå®ä»¬çé ç½®ï¼å æ¬å®å ¨è®¾ç½®ã + è¿æ¯ä¸ä¸ªå¯éçæ件ï¼éé¢ææçå 容é½å¯ä»¥æ¾å¨ <literal>hornetq-configuration.xml</literal>æ件ä¸ã + å¨é»è®¤çé ç½®æ件ç®å½ä¸å¹¶æ²¡æè¿ä¸ªæ件ãHornetQä¹æ以æä¾è¿ä¸ªæ件æ¯ä¸ºäºç¨æ·ä¾¿äºç®¡çä»ä»¬çqueueãå¨classpathä¸ + å 许å å«å¤ä¸ª <literal>hornetq-queues.xml</literal> æ件ãææçè¿äºæ件é½ä¼è¢«å è½½ã</para> + </listitem> + <listitem> + <para><literal>hornetq-users.xml</literal>ãç¨æ·ä¿¡æ¯æ件ãHornetQæ¬èº«å®ç°äºä¸ä¸ªåºæ¬ç + å®å ¨ç®¡çå¨ï¼security managerï¼ï¼å®ä»è¿ä¸ªæ件å 读åç¨æ·çå®å ¨ä¿¡æ¯ï¼å¦ç¨æ·åï¼å¯ç åè§è²ã + æ³äºè§£æ´å¤å ³äºå®å ¨çä¿¡æ¯ï¼åè§ <xref linkend="security"/>ã</para> + </listitem> + <listitem> + <para><literal>hornetq-jms.xml</literal>ãè¿ä¸ªæ件å å«æJMS对象ãHornetQçé»è®¤é ç½®ä¸å å«æJMSæå¡ï¼ + å®ä»è¿ä¸ªæ件ä¸è¯»åJMS Queueï¼TopicåConnectionFactory并å°å®ä»¬é¨ç½²å°JNDIæå¡ä¸ãå¦æä½ ä¸ä½¿ç¨JMSï¼ + æè ä½ ä¸éè¦é¨ç½²è¿äºJMS对象ï¼é£ä¹ä½ å°±ä¸éè¦è¿ä¸ªæ件ãæå ³JMSç使ç¨è¯¦è§<xref linkend="using-jms" + />ã</para> + </listitem> + <listitem> + <para><literal>logging.properties</literal> è¿ä¸ªæ件ç¨äºé ç½®logging + handlersãè¯¦è§ <xref linkend="logging"/>ã</para> + </listitem> + <listitem> + <para><literal>log4j.xml</literal>ã è¿æ¯ Log4j handlerçé ç½®æ件ã</para> + </listitem> + </itemizedlist> + <note> + <para>å¦æå¨<literal>hornetq-configuration.xml</literal>æ件ä¸å°<literal>file-deployment-enabled</literal> åæ° + å®ä¹ä¸ºfalseï¼åHornetQå°ä¸ä¼å è½½å ¶å®çé ç½®æ件ãè¿ä¸ªåæ°çé»è®¤å¼æ¯trueã</para> + </note> + <para>ææé ç½®æ件ä¸çåæ°é½å¯ä»¥ç¨ç³»ç»åéæ¥å®ä¹å ¶å¼ã以ä¸ç¨ä¸ä¸ªconnectorçé ç½®æ¥è¯´æï¼</para> + <programlisting><connector name="netty"> + <factory-class>org.hornetq.integration.transports.netty.NettyConnectorFactory + </factory-class> + <param key="host" value="${hornetq.remoting.netty.host:localhost}" type="String"/> + <param key="port" value="${hornetq.remoting.netty.port:5445}" type="Integer"/> +</connector></programlisting> + <para>å¨ä¸é¢çé ç½®ä¸æ们å®ä¹äºä¸¤ä¸ªç³»ç»åé <literal + >hornetq.remoting.netty.host</literal> å <literal + >hornetq.remoting.netty.port</literal>ãå®ä»¬çå¼ä¼è¢«ç¸åºçç³»ç»åéçå¼ï¼å¦æå®ä¹äºçè¯ï¼ææ¿ä»£ã + å¦æ没æå®ä¹è¿äºç³»ç»åéï¼å®ä»¬çé»è®¤å¼å°åå«ä¸º localhost å 5445ãä¹å¯ä»¥ä¸ç»åºé»è®¤å¼ï¼ä½å¦æè¿æ ·å°± + <emphasis>å¿ é¡»</emphasis>è¦å®ä¹ç¸åºçç³»ç»åéã</para> + </section> + <section id="server.microcontainer.configuration"> + <title>JBoss Microcontainer Beans æ件</title> + <para>HornetQçPOJO对象æ¯ç±<ulink url="http://www.jboss.org/jbossmc/"> JBoss Microcontainer + </ulink>è¿è¡å è½½åè¿è¡çãJBoss Microcontaineræ¯ä¸ä¸ªè½»é级çå è½½å·¥å ·ã</para> + <note> + <para>å¦ææ¯å¨JBossåºç¨æå¡å¨å è¿è¡ï¼HornetQåæ ·éè¦ä¸ä¸ªbeançé ç½®æ件æ¥å°å ¶é¨ç½²å°JBossä¸ãä½æ¯è¿ä¸åç¬è¿è¡æ¶çé ç½®æ件ç¥æä¸åã + è¿æ¯å 为åºç¨æå¡å¨å å·²ç»é¨ç½²äºä¸äºæå¡ï¼å¦å®å ¨æå¡çãæ以å¨HornetQä¸è¿äºæå¡å°±ä¸éè¦åé¨ç½²äºã</para> + </note> + <para>让æ们çä¸ä¸ªHornetQä½ä¸ºåç¬æå¡å¨æ¶çä¸ä¸ªé ç½®æ件ä¾åï¼</para> + <para> + <programlisting><?xml version="1.0" encoding="UTF-8"?> + +<deployment xmlns="urn:jboss:bean-deployer:2.0"> + +<bean name="Naming" class="org.jnp.server.NamingBeanImpl"/> + +<!-- JNDI server. Disable this if you don't want JNDI --> +<bean name="JNDIServer" class="org.jnp.server.Main"> + <property name="namingInfo"> + <inject bean="Naming"/> + </property> + <property name="port">1099</property> + <property name="bindAddress">localhost</property> + <property name="rmiPort">1098</property> + <property name="rmiBindAddress">localhost</property> +</bean> + +<!-- MBean server --> +<bean name="MBeanServer" class="javax.management.MBeanServer"> + <constructor factoryClass="java.lang.management.ManagementFactory" + factoryMethod="getPlatformMBeanServer"/> +</bean> + +<!-- The core configuration --> +<bean name="Configuration" class="org.hornetq.core.config.impl.FileConfiguration"> +</bean> + +<!-- The security manager --> +<bean name="HornetQSecurityManager" + class="org.hornetq.spi.core.security.HornetQSecurityManagerImpl"> + <start ignored="true"/> + <stop ignored="true"/> +</bean> + +<!-- The core server --> +<bean name="HornetQServer" class="org.hornetq.core.server.impl.HornetQServerImpl"> + <start ignored="true"/> + <stop ignored="true"/> + <constructor> + <parameter> + <inject bean="Configuration"/> + </parameter> + <parameter> + <inject bean="MBeanServer"/> + </parameter> + <parameter> + <inject bean="HornetQSecurityManager"/> + </parameter> + </constructor> +</bean> + +<!-- The JMS server --> +<bean name="JMSServerManager" + class="org.hornetq.jms.server.impl.JMSServerManagerImpl"> + <constructor> + <parameter> + <inject bean="HornetQServer"/> + </parameter> + </constructor> +</bean> + +</deployment></programlisting> + </para> + <para>æ们ä»ä¸å¯ä»¥çåºHornetQçåç¬æå¡å¨ï¼ä»¥åæ ¸å¿æå¡å¨ï¼å æ¬äºä¸äºPOJO对象ï¼</para> + <itemizedlist> + <listitem> + <para>JNDIServer</para> + <para>å¾å¤å®¢æ·ç«¯éè¦JNDIæ¥è·åJMSç对象ï¼å æ¤æ们æä¾äºä¸ä¸ªJNDIæå¡æ¥æ»¡è¶³å®ä»¬ãå¦æä¸éè¦JNDIï¼å¯ä»¥å¨é ç½® + æ件ä¸å°å®ä»¬æ³¨éæã</para> + </listitem> + <listitem> + <para>MBeanServer</para> + <para>è¿ä¸ªå¯¹è±¡æä¾äºJMX管çæ¥å£ãå®æ¯ä¸ä¸ªMBeanæå¡å¨ï¼å¯ç®¡çç对象å¯ä»¥æ³¨åå°è¿ä¸ªæå¡å¨ä¸ã + é常è¿å°±æ¯ä¸ä¸ªJVMå é¨çé»è®¤çå¹³å°MBeanæå¡å¨ãå¦æä¸éè¦äºæå¡ï¼å¯ä»¥å¨é ç½®æ件ä¸å°å ¶æ³¨éæå é¤ã</para> + </listitem> + <listitem> + <para>Configuration</para> + <para>è¿æ¯HornetQçConfiguration对象ãé»è®¤æ¶å®æ¯ä¸ä¸ªFileConfiguration对象ãå®å¯ä»¥ä»æ件系ç»ä¸è¯»å + é 置信æ¯ãæäºæ åµä¸ï¼å¦åµå ¥å¼HornetQï¼ä½ å¯ä»¥å°å®å®ä¹ä¸ºå ¶å®å¯¹è±¡ï¼ä»¥ä¾¿ç¨å ¶å®æ¹æ³è·å¾é 置信æ¯ã</para> + </listitem> + <listitem> + <para>Security Manager. å¯é ç½®çå®å ¨ç®¡çå¨ãé»è®¤çå®å ¨ç®¡çå¨ä½¿ç¨ <literal>hornetq-users.xml</literal> æ件ä¸çé 置信æ¯ã + å®ä¹å¯ä»¥é 置为ä¸ä¸ªJAASçå®å ¨ç®¡çå¨ãå½HornetQè¿è¡äºJBossåºç¨æå¡å¨ä¸æ¶ï¼å®è¿å¯ä»¥é 置为JBossçå®å ¨ç®¡çå¨ï¼ä»¥è¾¾å°æ´ç´§å¯çéæã + å¦æä¸éè¦å®å ¨ç®¡çï¼ä½ ä¹å¯ä»¥å°å®å é¤ã</para> + </listitem> + <listitem> + <para>HornetQServer</para> + <para>è¿æ¯HornetQçæ ¸å¿æå¡å¯¹è±¡ï¼å ä¹ææçæ ¸å¿åè½é½å¨è¿éã</para> + </listitem> + <listitem id="bean-jmsservermanager"> + <para>JMSServerManager</para> + <para>è¿ä¸ªå¯¹è±¡å°<literal>hornetq-jms.xml</literal>æ件ä¸å®ä¹çJMSç对象è¿è¡é¨ç½²ï¼æ¯å¦JMS Queues, Topics + 以åConnectionFactoryãå®è¿æä¾ä¸å¥ç®åç管çæ¥å£ä»¥æ¹ä¾¿å°å¯¹è¿äºJMS对象è¿è¡ç®¡çãé常å®åªæ¯å°å·¥ä½ä»£çç» + æ ¸å¿æå¡å¨ãå¦æä½ ä¸éè¦å¨æå¡å¨ç«¯è¿è¡JMS对象çé¨ç½²ä¸ç®¡çï¼å¯ä»¥å°å®ä»é ç½®ä¸å»æã</para> + </listitem> + </itemizedlist> + </section> + <section id="server.microkernel.configuration"> + <title>JBoss AS4 MBean æå¡</title> + <note> + <para>æ¬èåªè®¨è®ºå¨JBoss AS 4ä¸é ç½®HornetQãå ¶ä¸JBoss Microcontainerçé ç½®å¾ç¸ä¼¼ã</para> + </note> + <para> + <programlisting><?xml version="1.0" encoding="UTF-8"?> +<server> + + <mbean code="org.hornetq.service.HornetQFileConfigurationService" + name="org.hornetq:service=HornetQFileConfigurationService"> + </mbean> + + <mbean code="org.hornetq.service.JBossASSecurityManagerService" + name="org.hornetq:service=JBossASSecurityManagerService"> + </mbean> + + <mbean code="org.hornetq.service.HornetQStarterService" + name="org.hornetq:service=HornetQStarterService"> + <!--let's let the JMS Server start us--> + <attribute name="Start">false</attribute> + + <depends optional-attribute-name="SecurityManagerService" + proxy-type="attribute">org.hornetq:service=JBossASSecurityManagerService</depends> + <depends optional-attribute-name="ConfigurationService" + proxy-type="attribute">org.hornetq:service=HornetQFileConfigurationService</depends> + </mbean> + + <mbean code="org.hornetq.service.HornetQJMSStarterService" + name="org.hornetq:service=HornetQJMSStarterService"> + <depends optional-attribute-name="HornetQServer" + proxy-type="attribute">org.hornetq:service=HornetQStarterService</depends> + </mbean> + +</server> + </programlisting> + </para> + <para>è¿ä¸ªjboss-service.xmlå å«å¨hornetq-service.saræ件ä¸ï¼å®ç¨æ¥é ç½®AS4ä¸åµå ¥è¿è¡çHornetQã + å¨è¿ä¸ªé ç½®æ件ä¸æ们å¯å¨äºä»¥ä¸å 个æå¡ï¼</para> + <itemizedlist> + <listitem> + <para>HornetQFileConfigurationService</para> + <para>è¿ä¸ªMBeanæå¡çä»»å¡æ¯ç®¡ç <literal>FileConfiguration POJO</literal>ççå½å¨æã</para> + </listitem> + <listitem> + <para>JBossASSecurityManagerService</para> + <para>è¿ä¸ªMBeanæå¡ç®¡çç <literal>JBossASSecurityManager</literal> POJOççå½å¨æã</para> + </listitem> + <listitem> + <para>HornetQStarterService</para> + <para>è¿ä¸ªMBeanæå¡ç®¡çç<literal>HornetQServer</literal> POJOãå®ä¾èµäº JBossASSecurityManagerService å + HornetQFileConfigurationService è¿ä¸¤ä¸ªMBeanã</para> + </listitem> + <listitem> + <para>HornetQJMSStarterService</para> + <para>è¿ä¸ªMBeanæå¡ç®¡çç <literal>JMSServerManagerImpl</literal> POJO对象ãå¦æä¸éè¦JMSï¼å¯ä»¥å»æè¿ä¸ªæå¡ã</para> + </listitem> + <listitem> + <para>JMSServerManager</para> + <para>ç¨äºå¯å¨JMSServerManagerã</para> + </listitem> + </itemizedlist> + </section> + <section id="usingserver.mainconfig"> + <title>主é ç½®æ件</title> + <para>HornetQ æ ¸å¿æå¡çé ç½®ä¿åå¨ <literal>hornetq-configuration.xml</literal>æ件ä¸ã +ãããããããã FileConfiguration bean 读åè¿ä¸ªæ件æ¥å¯¹æ¶æ¯æå¡å¨è¿è¡é ç½®ã</para> + <para>HornetQæå¾å¤çé ç½®åæ°ãéç¨é»è®¤çé ç½®å¨ç»å¤§å¤æ°æ åµä¸å¯ä»¥å¾å¥½çè¿è¡ãäºå®ä¸æ¯ä¸ä¸ªåæ°é½æé»è®¤çå¤çï¼å æ¤ä¸ä¸ªåªå å«æä¸ä¸ªç©º + ç<literal>configuration</literal>çé ç½®æ件æ¯ä¸ä¸ªææçæ件ã对å个åæ°ç解é贯穿äºæ¬æåãä½ è¿å¯ååç § + <link linkend="configuration-index">è¿é</link>æ¥æ¥æ¾ä½ æ³ççåæ°ã</para> + </section> +</chapter> http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/wildcard-routing.xml ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/wildcard-routing.xml b/docs/user-manual/zh/wildcard-routing.xml new file mode 100644 index 0000000..1be8224 --- /dev/null +++ b/docs/user-manual/zh/wildcard-routing.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- ============================================================================= --> +<!-- Copyright © 2009 Red Hat, Inc. and others. --> +<!-- --> +<!-- The text of and illustrations in this document are licensed by Red Hat under --> +<!-- a Creative Commons AttributionâShare Alike 3.0 Unported license ("CC-BY-SA"). --> +<!-- --> +<!-- An explanation of CC-BY-SA is available at --> +<!-- --> +<!-- http://creativecommons.org/licenses/by-sa/3.0/. --> +<!-- --> +<!-- In accordance with CC-BY-SA, if you distribute this document or an adaptation --> +<!-- of it, you must provide the URL for the original version. --> +<!-- --> +<!-- Red Hat, as the licensor of this document, waives the right to enforce, --> +<!-- and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent --> +<!-- permitted by applicable law. --> +<!-- ============================================================================= --> + +<chapter id="wildcard-routing"> + <title>使ç¨éé 符å®ç°æ¶æ¯è·¯ç±</title> + <para>HornetQæ¯æ使ç¨å¸¦éé 符çå°å对æ¶æ¯è·¯ç±ã</para> + <para>ä¾å¦ï¼å½å建ä¸ä¸ªéåæ¶ä½¿ç¨äºå°å<literal>queue.news.#</literal>ï¼é£ä¹å®å°±è½æ¥æ¶ + ææåè¿ä¸ªå°åéé 符ç¸é çæ¯ä¸ä¸ªå°åçæ¶æ¯ãè¿æ ·çå°åå¦ <literal + >queue.news.europe</literal> æ <literal>queue.news.usa</literal> æ <literal + >queue.news.usa.sport</literal>çãè¿æ ·ä¸ä¸ªæ¶æ¯æ¥æ¶è å¯ä»¥æ¥æ¶<literal>ä¸ç»</literal>ç¸å ³ + çå°åçæ¶æ¯ï¼èä¸æ¯åªè½æå®ä¸ä¸ªå ·ä½çå°åã</para> + <note> + <para>ç¨JMSçæ¯è¯æ¥è¯´ï¼è¿ä¸ªåè½å°±æ¯å 许å建âè¯é¢ç»âï¼topic hierarchyï¼ã</para> + </note> + <para>è¦ä½¿ç¨æ¬åè½éè¦å°<literal>wild-card-routing-enabled</literal>å±æ§è®¾ç½®ä¸º<literal>true</literal>ã + è¿ä¸ªå±æ§å¨ <literal>hornetq-configuration.xml</literal> æ件ä¸ãé»è®¤å¼æ¯<literal>true</literal>ã</para> + <para>å ³äºéé 符çè¯æ³åè§<xref + linkend="wildcard-syntax" /> ç« å <xref + linkend="topic-hierarchy-example" />ã</para> +</chapter> http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/wildcard-syntax.xml ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/wildcard-syntax.xml b/docs/user-manual/zh/wildcard-syntax.xml new file mode 100644 index 0000000..e527d7a --- /dev/null +++ b/docs/user-manual/zh/wildcard-syntax.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- ============================================================================= --> +<!-- Copyright © 2009 Red Hat, Inc. and others. --> +<!-- --> +<!-- The text of and illustrations in this document are licensed by Red Hat under --> +<!-- a Creative Commons AttributionâShare Alike 3.0 Unported license ("CC-BY-SA"). --> +<!-- --> +<!-- An explanation of CC-BY-SA is available at --> +<!-- --> +<!-- http://creativecommons.org/licenses/by-sa/3.0/. --> +<!-- --> +<!-- In accordance with CC-BY-SA, if you distribute this document or an adaptation --> +<!-- of it, you must provide the URL for the original version. --> +<!-- --> +<!-- Red Hat, as the licensor of this document, waives the right to enforce, --> +<!-- and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent --> +<!-- permitted by applicable law. --> +<!-- ============================================================================= --> + +<chapter id="wildcard-syntax"> + <title>äºè§£ HornetQ éé 符çè¯æ³</title> + <para>HornetQ使ç¨äºä¸ç§ä¸é¨çéé 符è¯æ³æ¥é ç½®å®å ¨ãå°ååæ¥æ¶è ï¼consumerï¼çå建ã</para> + <para>è¿ç§è¯æ³ä¸ <ulink url="http://www.amqp.org">AMQP</ulink>æç¨çè¯æ³ç¸ä¼¼ã</para> + <para>ä¸ä¸ªHornetQçéé 符表达å¼æ¯ç±ä¸äºç±â<literal + >.</literal>âåéçåè¯ç»æã</para> + <para>ç¹æ®å符â<literal>#</literal>âåâ<literal>*</literal>âå¨è¡¨è¾¾å¼ä¸å¯ä½ä¸ºä¸ä¸ªåè¯ï¼å®ä»¬ä»£è¡¨ + ç¹æ®çæä¹ã</para> + <para>å符â<literal>#</literal>â表示âé¶æå¤ä¸ªåè¯çä»»ææåâã</para> + <para>å符â<literal>*</literal>â表示âä¸ä¸ªåè¯âã</para> + <para>å æ¤ï¼éé 符表达å¼ânews.europe.#âå¯ä»¥å¹é ânews.europeâãânews.europe.sportâã + ânews.europe.politicsâ以åânews.europe.politics.regionalâï¼ä½æ¯ä¸ânews.usaâã + ânews.usa.sportâ å âentertainmentâä¸ç¸å¹é ã</para> + <para>éé 符ânews.*âä¸ânews.europeâå¹é ï¼ä½ä¸ä¸ânews.europe.sportâå¹é ã</para> + <para>éé 符ânews.*.sportâä¸ânews.europe.sportâåânews.usa.sportâå¹é ï¼ä½ä¸ + ânews.europe.politicsâä¸å¹é ã</para> +</chapter> http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/etc/IDEA-style.jar ---------------------------------------------------------------------- diff --git a/etc/IDEA-style.jar b/etc/IDEA-style.jar new file mode 100644 index 0000000..06e3baa Binary files /dev/null and b/etc/IDEA-style.jar differ http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/etc/checkstyle.xml ---------------------------------------------------------------------- diff --git a/etc/checkstyle.xml b/etc/checkstyle.xml new file mode 100644 index 0000000..7a420f4 --- /dev/null +++ b/etc/checkstyle.xml @@ -0,0 +1,75 @@ +<?xml version="1.0"?> +<!DOCTYPE module PUBLIC + "-//Puppy Crawl//DTD Check Configuration 1.2//EN" + "http://www.puppycrawl.com/dtds/configuration_1_2.dtd"> + +<!-- See http://checkstyle.sourceforge.net/availablechecks.html for documentation on available checks --> +<module name="Checker"> + <!-- Checks to see if a file contains a tab character. --> + <module name="FileTabCharacter"> + <property name="eachLine" value="true"/> + </module> + + <!-- Checks for trailing whitespace. --> + <module name="RegexpSingleline"> + <!-- \s matches whitespace character, $ matches end of line. --> + <property name="format" value="\s+$"/> + <property name="message" value="Line has trailing spaces."/> + </module> + + <module name="TreeWalker"> + + <!-- Checks for imports --> + <module name="AvoidStarImport"/> + <module name="RedundantImport"/> + <module name="UnusedImports"/> + + <!-- Modifier Checks --> + <module name="ModifierOrder"/> + <module name="RedundantModifier"/> + + <!-- Checks for common coding problems --> + <module name="EmptyStatement"/> + <!-- Checks that classes that override equals() also override hashCode(). --> + <module name="EqualsHashCode"/> + <!-- Checks for illegal instantiations where a factory method is preferred. --> + <module name="IllegalInstantiation"/> + <!-- Checks for redundant exceptions declared in throws clause such as duplicates, unchecked exceptions or subclasses of another declared exception. --> + <module name="RedundantThrows"> + <property name="allowUnchecked" value="true"/> + </module> + + <!-- Checks that long constants are defined with an upper ell. --> + <module name="UpperEll"/> + <!-- This check makes sure that all package annotations are in the package-info.java file. --> + <module name="PackageAnnotation"/> + <!-- Checks that if a class defines a covariant method equals, then it defines method equals(java.lang.Object). --> + <module name="CovariantEquals"/> + <!-- Checks the style of array type definitions. --> + <module name="ArrayTypeStyle"/> + <!-- Make sure left curly braces are on a new line. Note, this is not the recommendation from Sun. It is a legacy preference. --> + <module name="LeftCurly"> + <property name="option" value="nl"/> + </module> + <!-- Make sure right curly braces are on a new line by itself. Note, this is not the recommendation from Sun. It is a legacy preference. --> + <module name="RightCurly"> + <property name="option" value="alone"/> + </module> + <!-- Checks that there is no whitespace after certain tokens; e.g. "." and "!". --> + <module name="NoWhitespaceAfter"/> + <!-- Checks that there is no whitespace before certain tokens; e.g. "++" and ";". --> + <module name="NoWhitespaceBefore"/> + <!-- Checks that most tokens are surrounded by whitespace. RCURLY is omitted so we can do stuff like "new Thread(){...}.start()". --> + <module name="WhitespaceAround"> + <property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, EQUAL, GE, GT, LAND, LCURLY, LE, LITERAL_ASSERT, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, SL, SLIST, SL_ASSIGN, SR, SR_ASSIGN, STAR, STAR_ASSIGN, TYPE_EXTENSION_AND"/> + </module> + <!-- Ensure there is no space between the identifier of a method definition, constructor definition, method call, or constructor invocation and the left parenthesis of the parameter list. --> + <module name="MethodParamPad"/> + <!-- Ensure proper indentation. --> + <module name="Indentation"> + <property name="basicOffset" value="3"/> + <property name="caseIndent" value="3"/> + <property name="throwsIndent" value="3"/> + </module> + </module> +</module> http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/etc/findbugs-exclude.xml ---------------------------------------------------------------------- diff --git a/etc/findbugs-exclude.xml b/etc/findbugs-exclude.xml new file mode 100644 index 0000000..f2be1b7 --- /dev/null +++ b/etc/findbugs-exclude.xml @@ -0,0 +1,148 @@ +<FindBugsFilter> + + <Match> + <!-- Having str restored to null is fine for our purposes --> + <Class name="org.hornetq.api.core.SimpleString"/> + <Field name="str"/> + <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/> + </Match> + + <Match> + <!-- The whole point of SimpleString is to expose this data without any performance penalty --> + <Class name="org.hornetq.api.core.SimpleString"/> + <method name="getData"/> + <Bug pattern="EI_EXPOSE_REP"/> + </Match> + + <!-- Ok to return mutable Object --> + <Match> + <Or> + <Class name="org.hornetq.core.protocol.core.impl.wireformat.ReplicationStartSyncMessage" /> + <Class name="org.hornetq.core.protocol.core.impl.wireformat.ReplicationSyncFileMessage" /> + <Class name="org.hornetq.core.protocol.core.impl.wireformat.ReplicationLargeMessageWriteMessage" /> + </Or> + <Bug pattern="EI_EXPOSE_REP"/> + </Match> + <!-- Ok to return mutable Object, here restricted to method getRecordData --> + <Match> + <Or> + <Class name="org.hornetq.core.protocol.core.impl.wireformat.ReplicationAddMessage" /> + <Class name="org.hornetq.core.protocol.core.impl.wireformat.ReplicationAddTXMessage" /> + <Class name="org.hornetq.core.protocol.core.impl.wireformat.ReplicationDeleteTXMessage" /> + <Class name="org.hornetq.core.protocol.core.impl.wireformat.ReplicationPrepareMessage" /> + </Or> + <Method name="getRecordData" /> + <Bug pattern="EI_EXPOSE_REP"/> + </Match> + + <!-- Comparison is correct within its context --> + <Match> + <Class name="org.hornetq.ra.HornetQRaUtils"/> + <Or> + <Method name="compare" params="java.lang.Integer,java.lang.Integer" returns="boolean"/> + <Method name="compare" params="java.lang.Long,java.lang.Long" returns="boolean"/> + <Method name="compare" params="java.lang.Double,java.lang.Double" returns="boolean"/> + </Or> + <Bug pattern="RC_REF_COMPARISON"/> + </Match> + + <!-- Comparison is correct within its context --> + <Match> + <Class name="org.hornetq.ra.Util"/> + <Method name="compare" params="java.lang.Boolean,java.lang.Boolean" returns="boolean"/> + <Bug pattern="RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN"/> + </Match> + + <!-- Comparison is correct within its context --> + <Match> + <Class name="org.hornetq.ra.Util"/> + <Method name="compare" params="java.lang.String,java.lang.String" returns="boolean"/> + <Bug pattern="ES_COMPARING_PARAMETER_STRING_WITH_EQ"/> + </Match> + + <Match> + <!-- As per Java Messaging Specification 3.5.4: + + " + Attempting to read a null value as a Java primitive type must be treated + as calling the primitiveâs corresponding valueOf(String) conversion method + with a null value. + " + + so methods are passed null arguments to trigger the exact same exceptions. + --> + <Class name="org.hornetq.utils.TypedProperties"/> + <Or> + <Method name="getFloatProperty"/> + <Method name="getDoubleProperty"/> + <Method name="getByteProperty"/> + <Method name="getIntProperty"/> + <Method name="getShortProperty"/> + </Or> + <Bug pattern="NP_NULL_PARAM_DEREF_NONVIRTUAL"/> + </Match> + + <Match> + <!-- Code is meant to measure memory usage, so calling Garbage Collection is normal. --> + <Class name="org.hornetq.utils.MemorySize"/> + <bug pattern="DM_GC"/> + </Match> + + <match> + <!-- Ignore naming convention violations in generated code --> + <class name="org.hornetq.core.filter.impl.FilterParser"/> + <bug pattern="NM_METHOD_NAMING_CONVENTION"/> + </match> + + <Match> + <!-- field changes are always guarded by PagingStoreImpl.lock.writeLock().lock() --> + <Class name="org.hornetq.core.paging.impl.PagingStoreImpl"/> + <Field name="numberOfPages" /> + <Bug pattern="VO_VOLATILE_INCREMENT"/> + </Match> + + <Match> + <!-- File is generated by JavaCC --> + <Class name="org.hornetq.core.filter.impl.ParseException"/> + <bug pattern="SBSC_USE_STRINGBUFFER_CONCATENATION"/> + </Match> + + <Match> + <!-- Generated by JavaCC: ignore naming convention violation --> + <Class name="~org\.hornetq\.core\.filter\.impl\.(FilterParser(|TokenManager|Constants)|TokenMgrError)"/> + <bug pattern="NM_METHOD_NAMING_CONVENTION,SF_SWITCH_NO_DEFAULT,MS_PKGPROTECT,URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD,MS_OOI_PKGPROTECT"/> + </Match> + + <Match> + <!-- Files generated by JBoss Logging are ignored --> + <Class name="~org\.hornetq\..*\.HornetQ.*(Logger_\$logger|Bundle_\$bundle)"/> + </Match> + + <!-- Ignore checks on return values, example File.delete(), on samples/examples --> + <Match> + <Class name="~org\.hornetq\.common\.example.*Example"/> + <bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE"/> + </Match> + + <Match> + <Class name="org.hornetq.utils.json.JSONObject$Null"/> + <Bug pattern="EQ_UNUSUAL"/> + </Match> + + <Match> + <Class name="org.hornetq.core.server.impl.HornetQServerImpl$SharedNothingLiveActivation"/> + <Method name="isNodeIdUsed"/> + <Bug pattern="RV_RETURN_VALUE_IGNORED"/> + </Match> + + <!-- Examples often verify a null value and use the (null) variable in a sys-out statement --> + <Match> + <Or> + <Class name="org.hornetq.jms.example.TopicHierarchyExample"/> + <Class name="org.hornetq.jms.example.TransactionalExample"/> + </Or> + <Method name="runExample"/> + <Bug pattern="NP_LOAD_OF_KNOWN_NULL_VALUE"/> + </Match> + +</FindBugsFilter> http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/etc/license-header.txt ---------------------------------------------------------------------- diff --git a/etc/license-header.txt b/etc/license-header.txt new file mode 100644 index 0000000..7af0bc0 --- /dev/null +++ b/etc/license-header.txt @@ -0,0 +1,11 @@ +Copyright ${copyrightYear} Red Hat, Inc. +Red Hat licenses this file to you under the Apache License, version +2.0 (the "License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied. See the License for the specific language governing +permissions and limitations under the License. + http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/etc/org.eclipse.jdt.core.prefs ---------------------------------------------------------------------- diff --git a/etc/org.eclipse.jdt.core.prefs b/etc/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..eb99f0b --- /dev/null +++ b/etc/org.eclipse.jdt.core.prefs @@ -0,0 +1,305 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.codeComplete.argumentPrefixes= +org.eclipse.jdt.core.codeComplete.argumentSuffixes= +org.eclipse.jdt.core.codeComplete.fieldPrefixes= +org.eclipse.jdt.core.codeComplete.fieldSuffixes= +org.eclipse.jdt.core.codeComplete.localPrefixes= +org.eclipse.jdt.core.codeComplete.localSuffixes= +org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes= +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=optimize out +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.source=1.6 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=18 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=82 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=18 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=18 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=16 +org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=82 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=18 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=82 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=82 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=18 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=18 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=82 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=82 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=82 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=18 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=0 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=next_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true +org.eclipse.jdt.core.formatter.comment.indent_root_tags=true +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=100 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=3 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=3 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.jdt.core.formatter.indentation.size=3 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=true +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false +org.eclipse.jdt.core.formatter.tabulation.char=space +org.eclipse.jdt.core.formatter.tabulation.size=3 +org.eclipse.jdt.core.formatter.use_on_off_tags=true +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=false +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true