diff options
Diffstat (limited to 'qpid/doc/book/src/java-broker/Qpid-Java-FAQ.xml')
-rw-r--r-- | qpid/doc/book/src/java-broker/Qpid-Java-FAQ.xml | 895 |
1 files changed, 895 insertions, 0 deletions
diff --git a/qpid/doc/book/src/java-broker/Qpid-Java-FAQ.xml b/qpid/doc/book/src/java-broker/Qpid-Java-FAQ.xml new file mode 100644 index 0000000000..845c343350 --- /dev/null +++ b/qpid/doc/book/src/java-broker/Qpid-Java-FAQ.xml @@ -0,0 +1,895 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF 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. + +--> + +<section id="Qpid-Java-FAQ"><title> + Qpid Java FAQ + </title> + + <section role="h2" id="QpidJavaFAQ-Purpose"> + <title>Purpose</title> + <para> + Here are a list of commonly asked questions and answers. Click on + the the bolded questions for the answer to unfold. If you have + any questions which are not on this list, please email our + qpid-user list. + </para> + + <section role="h3" id="QpidJavaFAQ-WhatisQpid-3F"><title> + What is Qpid ? + </title> + + <para> + The java implementation of Qpid is a pure Java message broker + that implements the AMQP protocol. Essentially, Qpid is a robust, + performant middleware component that can handle your messaging + traffic. + </para><para> + It currently supports the following features: + </para><itemizedlist> + <listitem><para>High performance header-based routing for messages + </para></listitem> + <listitem><para>All features required by the JMS 1.1 specification. Qpid + passes all tests in the Sun JMS compliance test suite + </para></listitem> + <listitem><para>Transaction support + </para></listitem> + <listitem><para>Persistence using the high performance Berkeley DB Java + Edition. The persistence layer is also pluggable should an + alternative implementation be required. The BDB store is + available from the <xref linkend="qpid_3rd-Party-Libraries"/> page + </para></listitem> + <listitem><para>Pluggable security using SASL. Any Java SASL provider can be + used + </para></listitem> + <listitem><para>Management using JMX and a custom management console built + using Eclipse RCP + </para></listitem> + <listitem><para>Naturally, interoperability with other clients including the + Qpid .NET, Python, Ruby and C++ implementations + </para></listitem> + </itemizedlist> + <!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-WhyamIgettingaConfigurationExceptionatbrokerstartup-3F"><title> + Why am I getting a ConfigurationException at broker startup ? + </title> + + <section role="h4" id="QpidJavaFAQ-InvocationTargetException"><title> + InvocationTargetException + </title> + <para> + If you get a java.lang.reflect.InvocationTargetException on + startup, wrapped as ConfigurationException like this: + </para> + <programlisting> +Error configuring message broker: org.apache.commons.configuration.ConfigurationException: java.lang.reflect.InvocationTargetException +2008-09-26 15:14:56,529 ERROR [main] server.Main (Main.java:206) - Error configuring message broker: org.apache.commons.configuration.ConfigurationException: java.lang.reflect.InvocationTargetException +org.apache.commons.configuration.ConfigurationException: java.lang.reflect.InvocationTargetException +at org.apache.qpid.server.security.auth.database.ConfigurationFilePrincipalDatabaseManager.initialisePrincipalDatabase(ConfigurationFilePrincipalDatabaseManager.java:158) +at org.apache.qpid.server.security.auth.database.ConfigurationFilePrincipalDatabaseManager.initialisePrincipalDatabases(ConfigurationFilePrincipalDatabaseManager.java:87) +at org.apache.qpid.server.security.auth.database.ConfigurationFilePrincipalDatabaseManager.<init>(ConfigurationFilePrincipalDatabaseManager.java:56) +at org.apache.qpid.server.registry.ConfigurationFileApplicationRegistry.initialise(ConfigurationFileApplicationRegistry.java:117) +at org.apache.qpid.server.registry.ApplicationRegistry.initialise(ApplicationRegistry.java:79) +at org.apache.qpid.server.registry.ApplicationRegistry.initialise(ApplicationRegistry.java:67) +at org.apache.qpid.server.Main.startup(Main.java:260) +at org.apache.qpid.server.Main.execute(Main.java:196) +at org.apache.qpid.server.Main.<init>(Main.java:96) +at org.apache.qpid.server.Main.main(Main.java:454) +at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) +at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) +at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) +at java.lang.reflect.Method.invoke(Method.java:597) +at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90) +Caused by: java.lang.reflect.InvocationTargetException +at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) +at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) +at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) +at java.lang.reflect.Method.invoke(Method.java:597) +at org.apache.qpid.server.security.auth.database.ConfigurationFilePrincipalDatabaseManager.initialisePrincipalDatabase(ConfigurationFilePrincipalDatabaseManager.java:148) +</programlisting> + <para> + .. then it means you have a missing password file. + </para><para> + You need to create a password file for your deployment and update + your config.xml to reflect the location of the password file for + your instance. + </para><para> + The config.xml can be a little confusing in terms of element + names and file names for passwords. + </para><para> + To do this, you need to edit the passwordDir element for the + broker, which may have a comment to that effect: + </para> + <programlisting> +<passwordDir><!-- Change to the location --></passwordDir> +</programlisting> + <para> + The file should be named passwd by default but if you want to you + can change this by editing this element: + </para> + <programlisting> +<value>${passwordDir}/passwd</value> +</programlisting> + <!--h4--></section> + + + <section role="h4" id="QpidJavaFAQ-Cannotlocateconfigurationsourcenull-2Fvirtualhosts.xml"><title> + Cannot locate configuration source null/virtualhosts.xml + </title> + + <para> + If you get this message, wrapped inside a ConfigurationException + then you've come across a known issue, see JIRA <xref linkend="qpid_QPID-431"/> + </para><para> + The work around is to use a qualified path as the parameter value + for your -c option, rather than (as you migth be) starting the + broker from your installed etc directory. Even going up one level + and using a path relative to your £QPID_HOME directory + would sort this e.g qpid-server -c ./etc/myconfig.xml + </para> +<!--h4--></section> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowdoIruntheQpidbroker-3F"><title> + How do I run + the Qpid broker ? + </title> + + <para> + The broker comes with a script for unix/linux/cygwin called + qpid-server, which can be found in the bin directory of the + installed package. This command can be executed without any + paramters and will then use the default configuration file + provided on install. + </para><para> + For the Windows OS, please use qpid-server.bat. + </para><para> + There's no need to set your classpath for QPID as the scripts + take care of that by adding jar's with classpath defining + manifest files to your classpath. + </para><para> + For more information on running the broker please see our + <xref linkend="Getting-Started"/> page. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowcanIcreateaconnectionusingaURL-3F"><title> + How can I + create a connection using a URL ? + </title> + + <para> + Please see the <xref linkend="qpid_Connection-URL-Format"/> documentation. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowdoIrepresentaJMSDestinationstringwithQPID-3F"><title> + How + do I represent a JMS Destination string with QPID ? + </title> + + <section role="h4" id="QpidJavaFAQ-Queues"><title> + Queues + </title> + + <para> + A queue can be created in QPID using the following URL format. + </para><para> + direct://amq.direct/<Destination>/<Queue + Name> + </para><para> + For example: + direct://amq.direct/<Destination>/simpleQueue + </para><para> + Queue names may consist of any mixture of digits, letters, and + underscores. + </para><para> + The <xref linkend="BindingURLFormat"/> is described in more + detail on it's own page. + </para> +<!--h4--></section> + + <section role="h4" id="QpidJavaFAQ-Topics"><title> + Topics + </title> + + <para> + A topic can be created in QPID using the following URL format. + </para><para> + topic://amq.topic/<Topic Subscription>/ + </para><para> + The topic subscription may only contain the letters A-Z and a-z + and digits 0-9. + </para><para> + The topic subscription is formed from a series of words that may + only contain the letters A-Z and a-z and digits 0-9. + The words are delimited by dots. Each dot represents a new level. + </para><para> + For example: stocks.nyse.ibm + </para><para> + Wildcards can be used on subscription with the following meaning. + </para><itemizedlist> + <listitem><para>match a single level + # match zero or more levels + </para></listitem> + </itemizedlist><para> + For example: + With two clients + 1 - stocks.*.ibm + 2 - stocks.#.ibm + </para><para> + Publishing stocks.nyse.ibm will be received by both + clients but stocks.ibm and stocks.world.us.ibm + will only be received by client 2. + </para><para> + The topic currently does not support wild cards. + </para> +<!--h4--></section> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowdoIconnecttothebrokerusingJNDI-3F"><title> + How do I + connect to the broker using JNDI ? + </title> + + <para> + see <xref linkend="How-to-Use-JNDI"/> + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-I-27musingSpringandWeblogiccanyouhelpmewiththeconfigurationformovingovertoQpid-3F"><title> + I'm using Spring and Weblogic - can you help me with the + configuration for moving over to Qpid ? + </title> + + <para> + Here is a donated Spring configuration file <ulink + url="http://qpid.apache.org/qpid-java-faq.data/appContext.zip">appContext.zip</ulink> + which shows the config for Qpid side by side with + Weblogic. HtH ! + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowdoIconfigurethelogginglevelforQpid-3F"><title> + How do + I configure the logging level for Qpid ? + </title> + + <para> + The system property + </para> + <programlisting> +amqj.logging.level +</programlisting> + <para> + can be used to configure the logging level. + For the broker, you can use the environment variable + AMQJ_LOGGING_LEVEL which is picked up by the qpid-run script + (called by qpid-server to start the broker) at runtime. + </para><para> + For client code that you've written, simply pass in a system + property to your command line to set it to the level you'd like + i.e. + </para> + <programlisting> +-Damqj.logging.level=INFO +</programlisting> + <para> + The log level for the broker defaults to INFO if the env variable + is not set, but you may find that your log4j properties affect + this. Setting the property noted above should address this. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowcanIconfiguremyapplicationtouseQpidclientlogging-3F"><title> + How can I configure my application to use Qpid client + logging? + </title> + + <para> + If you don't already have a logging implementation in your + classpath you should add slf4-log4j12-1.4.0.jar and + log4j-1.2.12.jar. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowcanIconfigurethebroker-3F"><title> + How can I + configure the broker ? + </title> + + <para> + The broker configuration is contained in the + <installed-dir>/etc/config.xml file. You can copy and edit + this file and then specify your own configuration file as a + parameter to the startup script using the -c flag i.e. + qpid-server -c <your_config_file's_path> + </para><para> + For more detailed information on configuration, please see + <xref linkend="qpid_Qpid-Design---Configuration"/> + </para><para> + + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-Whatportsdoesthebrokeruse"><title> + What ports + does the broker use? + </title> + + <para> + The broker defaults to use port 5672 at startup for AMQP + traffic. + If the management interface is enabled it starts on port 8999 by + default. + </para><para> + The JMX management interface actually requires 2 ports to + operate, the second of which is indicated to the client + application during connection initiation to the main (default: + 8999) port. Previously this second port has been chosen at random + during broker startup, however since Qpid 0.5 this has been fixed + to a port 100 higher than the main port(ie Default:9099) in order + to ease firewall navigation. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowcanIchangetheportthebrokerusesatruntime-3F"><title> + How + can I change the port the broker uses at runtime ? + </title> + + <para> + The broker defaults to use port 5672 at startup for AMQP + traffic. + The broker also uses port 8999 for the JMX Management interface. + </para><para> + To change the AMQP traffic port use the -p flag at startup. To + change the management port use -m + i.e. qpid-server -p <port_number_to_use> -m + <port_number_to_use> + </para><para> + Use this to get round any issues on your host server with port + 5672/8999 being in use/unavailable. + </para><para> + For additional details on what ports the broker uses see <xref linkend="QpidJavaFAQ-Whatportsdoesthebrokeruse"/> FAQ + entry. + For more detailed information on configuration, please see + <xref linkend="qpid_Qpid-Design---Configuration"/> + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-WhatcommandlineoptionscanIpassintotheqpidserverscript-3F"><title> + What command line options can I pass into the qpid-server + script ? + </title> + + <para> + The following command line options are available: + </para> + + <para> + The following options are available: + </para><table> + <title> + Command Line Options + </title> + + <tgroup cols="3"> + <tbody> + <row> + <entry> + Option + </entry> + <entry> + Long Option + </entry> + <entry> + Description + </entry> + </row> + <row> + <entry> + b + </entry> + <entry> + bind + </entry> + <entry> + Bind to the specified address overriding any value in the + config file + </entry> + </row> + <row> + <entry> + c + </entry> + <entry> + config + </entry> + <entry> + Use the given configuration file + </entry> + </row> + <row> + <entry> + h + </entry> + <entry> + help + </entry> + <entry> + Prints list of options + </entry> + </row> + <row> + <entry> + l + </entry> + <entry> + logconfig + </entry> + <entry> + Use the specified log4j.xml file rather than that in the + etc directory + </entry> + </row> + <row> + <entry> + m + </entry> + <entry> + mport + </entry> + <entry> + Specify port to listen on for the JMX Management. Overrides + value in config file + </entry> + </row> + <row> + <entry> + p + </entry> + <entry> + port + </entry> + <entry> + Specify port to listen on. Overrides value in config file + </entry> + </row> + <row> + <entry> + v + </entry> + <entry> + version + </entry> + <entry> + Print version information and exit + </entry> + </row> + <row> + <entry> + w + </entry> + <entry> + logwatch + </entry> + <entry> + Specify interval for checking for logging config changes. + Zero means no checking + </entry> + </row> + </tbody> + </tgroup></table> + </section> + + <section role="h3" id="QpidJavaFAQ-HowdoIauthenticatewiththebroker-3FWhatuserid-26passwordshouldIuse-3F"><title> + How do I authenticate with the broker ? What user id & + password should I use ? + </title> + + <para> + You should login as user guest with password guest + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowdoIcreatequeuesthatwillalwaysbeinstantiatedatbrokerstartup-3F"><title> + How do I create queues that will always be instantiated at + broker startup ? + </title> + + <para> + You can configure queues which will be created at broker startup + by tailoring a copy of the virtualhosts.xml file provided in the + installed qpid-version/etc directory. + </para><para> + So, if you're using a queue called 'devqueue' you can ensure that + it is created at startup by using an entry something like this: + </para> + <programlisting> +<virtualhosts> + <default>test</default> + <virtualhost> + <name>test</name> + <test> + <queue> + <name>devqueue</name> + <devqueue> + <exchange>amq.direct</exchange> + <maximumQueueDepth>4235264</maximumQueueDepth> <!-- 4Mb --> + <maximumMessageSize>2117632</maximumMessageSize> <!-- 2Mb --> + <maximumMessageAge>600000</maximumMessageAge> <!-- 10 mins --> + </devqueue> + </queue> + </test> + </virtualhost> +</virtualhosts> +</programlisting> + <para> + Note that the name (in thie example above the name is 'test') + element should match the virtualhost that you're using to create + connections to the broker. This is effectively a namespace used + to prevent queue name clashes etc. You can also see that we've + set the 'test' virtual host to be the default for any connections + which do not specify a virtual host (in the <default> tag). + </para><para> + You can amend the config.xml to point at a different + virtualhosts.xml file by editing the <virtualhosts/> + element. + </para><para> + So, for example, you could tell the broker to use a file in your + home directory by creating a new config.xml file with the + following entry: + </para><para> + <virtualhosts>/home/myhomedir/virtualhosts.xml</virtualhosts> + </para><para> + You can then pass this amended config.xml into the broker at + startup using the -c flag i.e. + qpid-server -c <path>/config.xml + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowdoIcreatequeuesatruntime-3F"><title> + How do I + create queues at runtime? + </title> + + <para> + Queues can be dynamically created at runtime by creating a + consumer for them. After they have been created and bound (which + happens automatically when a JMS Consumer is created) a publisher + can send messages to them. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowdoItunethebroker-3F"><title> + How do I tune + the broker? + </title> + + <para> + There are a number of tuning options available, please see the + <xref linkend="How-to-Tune-M3-Java-Broker-Performance"/> page for more information. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-Wheredoundeliverablemessagesendup-3F"><title> + Where do + undeliverable messages end up ? + </title> + + <para> + At present, messages with an invalid routing key will be returned + to the sender. If you register an exception listener for your + publisher (easiest to do by making your publisher implement the + ExceptionListener interface and coding the onException method) + you'll see that you end up in onException in this case. You can + expect to be catching a subclass of + org.apache.qpid.AMQUndeliveredException. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-CanIconfigurethenameoftheQpidbrokerlogfileatruntime-3F"><title> + Can I configure the name of the Qpid broker log file at + runtime ? + </title> + + <para> + If you simply start the Qpid broker using the default + configuration, then the log file is written to + $QPID_WORK/log/qpid.log + </para><para> + This is not ideal if you want to run several instances from one + install, or acrhive logs to a shared drive from several hosts. + </para><para> + To make life easier, there are two optional ways to configure the + naming convention used for the broker log. + </para> + + <section role="h4" id="QpidJavaFAQ-Settingaprefixorsuffix"><title> + Setting a prefix + or suffix + </title> + + <para> + Users should set the following environment variables before + running qpid-server: + </para><para> + QPID_LOG_PREFIX - will prefix the log file name with the + specified value e.g. if you set this value to be the name of your + host (for example) it could look something like host123qpid.log + </para><para> + QPID_LOG_SUFFIX - will suffix the file name with the specified + value e.g. if you set this value to be the name of your + application (for example) if could look something like + qpidMyApp.log + </para> +<!--h4--></section> + + <section role="h4" id="QpidJavaFAQ-IncludingthePID"><title> + Including the PID + </title> + + <para> + Setting either of these variables to the special value PID will + introduce the process id of the java process into the file name + as a prefix or suffix as specified** + </para> +<!--h4--></section> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-Myclientapplicationappearstohavehung-3F"><title> + My + client application appears to have hung? + </title> + + <para> + The client code currently has various timeouts scattered + throughout the code. These can cause your client to appear like + it has hung when it is actually waiting for the timeout ot + compelete. One example is when the broker becomes non-responsive, + the client code has a hard coded 2 minute timeout that it will + wait when closing a connection. These timeouts need to be + consolidated and exposed. see <xref linkend="qpid_QPID-429"/> + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowdoIcontacttheQpidteam-3F"><title> + How do I + contact the Qpid team ? + </title> + + <para> + For general questions, please subscribe to the + <ulink url="mailto:users@qpid.apache.org">users@qpid.apache.org</ulink> mailing list. + </para><para> + For development questions, please subscribe to the + <ulink url="mailto:dev@qpid.apache.org">dev@qpid.apache.org</ulink> mailing list. + </para><para> + More details on these lists are available on our <xref linkend="qpid_Mailing-Lists"/> + page. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowcanIchangeauser-27spasswordwhilethebrokerisup-3F"><title> + How can I change a user's password while the broker is up ? + </title> + + <para> + You can do this via the <xref linkend="qpid_Qpid-JMX-Management-Console"/>. To + do this simply log in to the management console as an admin user + (you need to have created an admin account in the + jmxremote.access file first) and then select the 'UserManagement' + mbean. Select the user in the table and click the Set Password + button. Alternatively, update the password file and use the + management console to reload the file with the button at the + bottom of the 'UserManagement' view. In both cases, this will + take effect when the user next logs in i.e. will not cause them + to be disconnected if they are already connected. + </para><para> + For more information on the Management Console please see our + <xref linkend="Qpid-JMX-Management-Console-User-Guide"/> + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowdoIknowifthereisaconsumerforamessageIamgoingtosend-3F"><title> + How do I know if there is a consumer for a message I am going + to send? + </title> + + <para> + Knowing that there is a consumer for a message is quite tricky. + That said using the qpid.jms.Session#createProducer with + immediate and mandatory set to true will get you part of the way + there. + </para><para> + If you are publishing to a well known queue then immediate will + let you know if there is any consumer able to pre-fetch that + message at the time you send it. If not it will be returned to + you on your connection listener. + </para><para> + If you are sending to a queue that the consumer creates then the + mandatory flag will let you know if they have not yet created + that queue. + </para><para> + These flags will not be able to tell you if the consuming + application has received the message and is able to process it. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-HowcanIinspectthecontentsofmyMessageStore-3F"><title> + How + can I inspect the contents of my MessageStore? + </title> + + <para> + There are two possibilities here: + </para><para> + 1) The management console can be used to interogate an active + broker and browse the contents of a queue.See the <xref linkend="qpid_Qpid-JMX-Management-Console"/> + page for further details. + </para><para> + 2) The <xref linkend="qpid_MessageStore-Tool"/> can be used to inspect + the contents of a persistent message store. Note: this can + currently only be used when the broker is offline. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-Whyaremytransientmessagesbeingsoslow-3F"><title> + Why are + my transient messages being so slow? + </title> + + <para> + You should check that you aren't sending persistent messages, + this is the default. If you want to send transient messages you + must explicitly set this option when instantiating your + MessageProducer or on the send() method. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-Whydoesmyproducerfillupthebrokerwithmessages-3F"><title> + Why + does my producer fill up the broker with messages? + </title> + + <para> + The Java broker does not currently implement producer flow + control. Publishes are currently asynchronous, so there is no + ability to rate limit this automatically. While this is something + which will be addressed in the future, it is currently up to + applications to ensure that they do not publish faster than the + messages are being consumed for signifcant periods of time. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-ThebrokerkeepsthrowinganOutOfMemoryexception-3F"><title> + The + broker keeps throwing an OutOfMemory exception? + </title> + + <para> + The broker can no longer store any more messages in memory. This + is particular evident if you are using the MemoryMessageStore. To + alleviate this issue you should ensure that your clients are + consuming all the messages from the broker. + </para><para> + You may also want to increase the memory allowance to the broker + though this will only delay the exception if you are publishing + messages faster than you are consuming. See <xref linkend="qpid_Java-Environment-Variables"/> for + details of changing the memory settings. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-WhyamIgettingabrokersideexceptionwhenItrytopublishtoaqueueoratopic-3F"><title> + Why am I getting a broker side exception when I try to + publish to a queue or a topic ? + </title> + + <para> + If you get a stack trace like this when you try to publish, then + you may have typo'd the exchange type in your queue or topic + declaration. Open your virtualhosts.xml and check that the + </para> + <programlisting> +<exchange>amq.direct</exchange> +</programlisting> + + <programlisting> +2009-01-12 15:26:27,957 ERROR [pool-11-thread-2] protocol.AMQMinaProtocolSession (AMQMinaProtocolSession.java:365) - Unexpected exception while processing frame. Closing connection. +java.lang.NullPointerException + at org.apache.qpid.server.security.access.PrincipalPermissions.authorise(PrincipalPermissions.java:398) + at org.apache.qpid.server.security.access.plugins.SimpleXML.authorise(SimpleXML.java:302) + at org.apache.qpid.server.handler.QueueBindHandler.methodReceived(QueueBindHandler.java:111) + at org.apache.qpid.server.handler.ServerMethodDispatcherImpl.dispatchQueueBind(ServerMethodDispatcherImpl.java:498) + at org.apache.qpid.framing.amqp_8_0.QueueBindBodyImpl.execute(QueueBindBodyImpl.java:167) + at org.apache.qpid.server.state.AMQStateManager.methodReceived(AMQStateManager.java:204) + at org.apache.qpid.server.protocol.AMQMinaProtocolSession.methodFrameReceived(AMQMinaProtocolSession.java:295) + at org.apache.qpid.framing.AMQMethodBodyImpl.handle(AMQMethodBodyImpl.java:93) + at org.apache.qpid.server.protocol.AMQMinaProtocolSession.frameReceived(AMQMinaProtocolSession.java:235) + at org.apache.qpid.server.protocol.AMQMinaProtocolSession.dataBlockReceived(AMQMinaProtocolSession.java:191) + at org.apache.qpid.server.protocol.AMQPFastProtocolHandler.messageReceived(AMQPFastProtocolHandler.java:244) + at org.apache.mina.common.support.AbstractIoFilterChain$TailFilter.messageReceived(AbstractIoFilterChain.java:703) + at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:362) + at org.apache.mina.common.support.AbstractIoFilterChain.access$1200(AbstractIoFilterChain.java:54) + at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:800) + at org.apache.qpid.pool.PoolingFilter.messageReceived(PoolingFilter.java:371) + at org.apache.mina.filter.ReferenceCountingIoFilter.messageReceived(ReferenceCountingIoFilter.java:96) + at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:362) + at org.apache.mina.common.support.AbstractIoFilterChain.access$1200(AbstractIoFilterChain.java:54) + at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:800) + at org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush(SimpleProtocolDecoderOutput.java:60) + at org.apache.mina.filter.codec.QpidProtocolCodecFilter.messageReceived(QpidProtocolCodecFilter.java:174) + at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:362) + at org.apache.mina.common.support.AbstractIoFilterChain.access$1200(AbstractIoFilterChain.java:54) + at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:800) + at org.apache.qpid.pool.Event$ReceivedEvent.process(Event.java:86) + at org.apache.qpid.pool.Job.processAll(Job.java:110) + at org.apache.qpid.pool.Job.run(Job.java:149) + at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) + at java.lang.Thread.run(Thread.java:619) +</programlisting> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-WhyistherealotofAnonymousIoServicethreads"><title> + Why + is there a lot of AnonymousIoService threads + </title> + + <para> + These threads are part of the thread pool used by Mina to process + the socket. In the future we may provide tuning guidelines but at + this point we have seen no performance implications from the + current configuration. As the threads are part of a pool they + should remain inactive until required. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ--22unabletocertifytheprovidedSSLcertificateusingthecurrentSSLtruststore-22whenconnectingtheManagementConsoletothebroker."><title> + "unable to certify the provided SSL certificate using the + current SSL trust store" when connecting the Management Console + to the broker. + </title> + + <para> + You have not configured the console's SSL trust store properly, + see <xref linkend="qpid_Management-Console-Security"/> for + more details. + </para> +<!--h3--></section> + + <section role="h3" id="QpidJavaFAQ-CanauseTCPKEEPALIVEorAMQPheartbeatingtokeepmyconnectionopen-3F"><title> + Can a use TCP_KEEPALIVE or AMQP heartbeating to keep my + connection open? + </title> + + <para> + See <xref linkend="qpid_Configure-Broker-and-Client-Heartbeating"/> + </para> + +<!--h3--></section> +<!--h2--></section> + + + +</section> |