type=page
status=published
title=Configuring Java Message Service High Availability
next=rmi-iiop.html
prev=session-persistence-and-failover.html
~~~~~~

= Configuring Java Message Service High Availability

[[GSHAG00012]][[abdbk]]


[[configuring-java-message-service-high-availability]]
== 10 Configuring Java Message Service High Availability

This chapter describes how to configure the high availability features
of the Java Message Service (JMS). It covers how to configure Message
Queue broker clusters and how to use them to provide connection failover
and load balancing, as described in the following topics:

* link:#abdbx[Using Message Queue Broker Clusters With {productName}]
* link:#abdbv[Connection Failover]
* link:#abdbw[Load-Balanced Delivery to MDBs]

[[abdbx]][[GSHAG00212]][[using-message-queue-broker-clusters-with-glassfish-server]]

=== Using Message Queue Broker Clusters With {productName}

This section describes how the JMS service uses Message Queue broker
clusters to support high-availability JMS messaging in {productName}
clusters. It describes the different cluster and broker types that are
supported and how to configure them.

The following topics are addressed here:

* link:#gktgs[About Message Queue Broker Clusters]
* link:#gktft[Configuring GlassFish Clusters to Use Message Queue Broker
Clusters]
* link:#gktge[To Configure a GlassFish Cluster to Use an Embedded or
Local Conventional Broker Cluster With Master Broker]
* link:#gktfr[To Configure a GlassFish Cluster to Use an Embedded or
Local Conventional Broker Cluster of Peer Brokers]
* link:#gkthc[To Change the Master Broker in an Embedded or Local Broker
Cluster]
* link:#gktgj[To Migrate Between Types of Embedded or Local Conventional
Broker Clusters]
* link:#gktfl[To Configure a GlassFish Cluster to Use a Local Enhanced
Broker Cluster]
* link:#abdby[To Configure a GlassFish Cluster to Use a Remote Broker
Cluster]

[[gktgs]][[GSHAG00311]][[about-message-queue-broker-clusters]]

==== About Message Queue Broker Clusters

The following discussion provides a brief overview of Message Queue
broker clusters. For complete information, see "link:../openmq/mq-tech-over/broker-clusters.html#GMTOV00028[Broker
Clusters]" in Open Message Queue Technical Overview.

Message Queue supports two clustering models both of which provide a
scalable message service, but with each providing a different level of
message service availability:

* Conventional broker clusters. A conventional broker cluster provides
for service availability. When a broker fails, clients connected to the
failed broker reconnect to another broker in the cluster. However,
messages and state information stored in the failed broker cannot be
recovered until the failed broker is brought back online. The broker
failure can therefore result in a significant delay and in JMS message
order semantics not being preserved.
+
Message Queue supports two types of conventional cluster, based on where
the cluster configuration change record is stored:

** Conventional cluster with master broker. In a conventional cluster
with a master broker, one of the brokers, designated as the master
broker, stores and maintains the cluster configuration change record.
The other brokers in the cluster must communicate with the master broker
to keep abreast of changes to the cluster configuration. This is the
simplest broker cluster to configure, and is the type of broker cluster
that {productName} uses by default to support GlassFish clusters.

** Conventional cluster of peer brokers. In a conventional cluster of
peer brokers, the cluster configuration change record is stored in a
JDBC data store accessible to all the brokers. Thus, brokers can access
cluster configuration information whether any other brokers in the
cluster are running or not.
* Enhanced broker clusters. An enhanced broker cluster provides for data
availability in addition to service availability. When a broker fails,
another broker takes over the pending work of the failed broker. The
failover broker has access to the failed broker's messages and state
information. Clients connected to the failed broker reconnect to the
failover broker. In an enhanced cluster, as compared to a conventional
cluster, messages owned by the failed broker are delivered by the
failover broker as soon as it takes over, and JMS message order
semantics are preserved.
+
By its very nature, an enhanced broker cluster is a cluster of peer
brokers.


[NOTE]
====
Despite the message service availability offered by both conventional
and enhanced broker clusters, they do not provide a guarantee against
failure and the possibility that certain failures, for example in the
middle of a transaction, could require that some operations be repeated.
It is the responsibility of the messaging application (both producers
and consumers) to respond to JMS exceptions appropriately.
For information about the kinds of exceptions that can occur and how to
respond to them,
see "link:../openmq/mq-dev-guide-java/client-design-and-features.html#GMJVG00229[Handling Exceptions When Failover Occurs]"
in Open Message Queue Developer's Guide for Java Clients.
====


[[gktft]][[GSHAG00312]][[configuring-glassfish-clusters-to-use-message-queue-broker-clusters]]

==== Configuring GlassFish Clusters to Use Message Queue Broker Clusters

When a {productName} cluster is created, the JMS service
automatically configures a Message Queue conventional broker cluster
with master broker for the cluster, provided that the JMS host type in
the {productName} cluster's configuration is Embedded or Local. The
JMS service configures one Message Queue broker for each instance in the
{productName} cluster, and designates as master broker the broker
associated with the first instance created in the cluster. In the case
of Local JMS hosts, the JMS service configures each broker to run on the
same host as the instance with which it is associated. In the case of
Embedded JMS hosts, the each broker inherently runs on the same host as
the instance with which it is associated because it runs in the same JVM
as the instance.

The JMS service manages the lifecycle of Embedded and Local JMS hosts,
and this management extends to the management of Message Queue broker
clusters as Embedded and Local JMS hosts. For a GlassFish cluster whose
configuration specifies Embedded or Local JMS host type, the JMS
service:

* Creates and manages one Message Queue broker for each instance in the
GlassFish cluster, using this broker as the primary JMS host for the
instance.
* Maintains the JMS host list for each instance in the GlassFish cluster
such that its primary JMS host appears first in its JMS host list.

The JMS service supports the following types of Message Queue broker
clusters with {productName} clusters, based on the JMS host type:

Embedded::
  * Conventional broker cluster with master broker (default)
  * Conventional broker cluster of peer brokers
Local::
  * Conventional broker cluster with master broker (default)
  * Conventional broker cluster of peer brokers
  * Enhanced broker cluster
Remote::
  * Conventional broker cluster with master broker; brokers can differ
  in number from GlassFish instances and can be located on other hosts
  * Conventional broker cluster of peer brokers; brokers can differ in
  number from GlassFish instances and can be located on other hosts
  * Enhanced broker cluster; brokers can differ in number from GlassFish
  instances and can be located on other hosts

The following topics provide instructions for configuring broker
clusters in all these contexts.

[[gktge]][[GSHAG00155]][[to-configure-a-glassfish-cluster-to-use-an-embedded-or-local-conventional-broker-cluster-with-master-broker]]

==== To Configure a GlassFish Cluster to Use an Embedded or Local Conventional Broker Cluster With Master Broker

Use the `configure-jms-cluster` subcommand in remote `asadmin` mode to
configure a conventional broker cluster with master broker to service a
{productName} cluster that uses either Embedded or Local JMS hosts.

Note that this configuration, with Embedded brokers, is the default for
{productName} clusters.

[[GSHAG431]]

Before You Begin

Perform the following steps after you have created the {productName}
cluster, but before you have added instances to the cluster or started
the cluster.


[CAUTION]
====
Before using this procedure to reconfigure an existing cluster, you must
follow the special procedures to migrate to another type of broker
cluster, as described in link:#gktgj[To Migrate Between Types of
Embedded or Local Conventional Broker Clusters]. Failing to perform
these special procedures could lead to data loss or corruption and even
render your setup unusable, depending on the JMS operations performed on
the existing cluster.
====

1. Ensure that the server is running.
Remote `asadmin` subcommands require a running server.

2. Configure the {productName} cluster to use a Message Queue
conventional broker cluster with master broker by using the
link:reference-manual/configure-jms-cluster.html#GSRFM00008[`configure-jms-cluster`]
subcommand:
+
[source]
----
> asadmin configure-jms-cluster --clustertype=conventional
--configstoretype=masterbroker glassfish-cluster-name
----

[[GSHAG432]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help configure-jms-cluster` at the command line.

[[gktfr]][[GSHAG00156]][[to-configure-a-glassfish-cluster-to-use-an-embedded-or-local-conventional-broker-cluster-of-peer-brokers]]

==== To Configure a GlassFish Cluster to Use an Embedded or Local Conventional Broker Cluster of Peer Brokers

Use the `configure-jms-cluster` subcommand in remote `asadmin` mode to
configure a conventional broker cluster of peer brokers to service a
{productName} cluster that uses Embedded or Local JMS hosts.

[[GSHAG433]]

Before You Begin

Perform the following steps after you have created the {productName}
cluster, but before you have added instances to the cluster or started
the cluster.


[CAUTION]
====
Before using this procedure to reconfigure an existing cluster, you must
follow the special procedures to migrate to another type of broker
cluster, as described in link:#gktgj[To Migrate Between Types of
Embedded or Local Conventional Broker Clusters]. Failing to perform
these special procedures could lead to data loss or corruption and even
render your setup unusable, depending on the JMS operations performed on
the existing cluster.
====


1. Ensure that the server is running.
Remote `asadmin` subcommands require a running server.

2. Create a password file with the entry `AS_ADMIN_JMSDBPASSWORD`
specifying the password of the database user. +
For information about password file entries, see the
link:reference-manual/asadmin.html#GSRFM00263[`asadmin`(1M)] help page.

3. Place a copy of, or a link to, the database's JDBC driver `.jar`
file in the appropriate directory, depending on the JMS host type, on
each host where a {productName} cluster instance is to run:
* Embedded: as-install-parent``/glassfish/lib/install/applications/jmsra``
* Local: as-install-parent``/mq/lib/ext``

4. Configure the {productName} cluster to use a Message Queue
conventional broker cluster with master broker by using the
link:reference-manual/configure-jms-cluster.html#GSRFM00008[`configure-jms-cluster`]
subcommand:
+
[source]
----
> asadmin --passwordfile password-file configure-jms-cluster --clustertype=conventional
--configstoretype=shareddb --dbvendor database-vendor-name --dbuser database-user-name
--dburl database-url --property list-of-database-specific-properties glassfish-cluster-name
----

[[GSHAG434]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help configure-jms-cluster` at the command line.

[[gkthc]][[GSHAG00157]][[to-change-the-master-broker-in-an-embedded-or-local-broker-cluster]]

==== To Change the Master Broker in an Embedded or Local Broker Cluster

Use the `change-master-broker` subcommand in remote `asadmin` mode to
change the master broker to a different broker in a conventional broker
cluster with master broker serving a {productName} cluster that uses
Embedded or Local JMS hosts.

Follow this procedure, for example, before you remove from a GlassFish
cluster the instance associated with the current master broker.

[[GSHAG435]]

Before You Begin

Although not an absolute requirement, you should make sure all GlassFish
instances and Message Queue brokers in the cluster are running before
using the `change-master-broker` command in order to avoid later
internal configuration synchronization of any unavailable instance or
broker.

1. Ensure that the server is running.
Remote `asadmin` subcommands require a running server.

2. Change the master broker by using the
link:reference-manual/change-master-broker.html#GSRFM00005[`change-master-broker`]
subcommand:
+
[source]
----
> asadmin change-master-broker glassfish-clustered-instance-name
----

[[GSHAG436]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help change-master-broker` at the command line.

[[gktgj]][[GSHAG00158]][[to-migrate-between-types-of-embedded-or-local-conventional-broker-clusters]]

==== To Migrate Between Types of Embedded or Local Conventional Broker Clusters

If the need arises to convert from a conventional broker cluster with
master broker to a conventional broker cluster of peer brokers, or the
reverse, follow the instructions in "link:../openmq/mq-admin-guide/broker-clusters.html#GMADG00563[Managing
Conventional Clusters]" in Open Message Queue Administration Guide.

[[gktfl]][[GSHAG00159]][[to-configure-a-glassfish-cluster-to-use-a-local-enhanced-broker-cluster]]

==== To Configure a GlassFish Cluster to Use a Local Enhanced Broker Cluster

Use the `configure-jms-cluster` subcommand in remote `asadmin` mode to
configure an enhanced broker cluster to service a {productName}
cluster that uses Local JMS hosts.

[[GSHAG437]]

Before You Begin

Perform the following steps after you have created the {productName}
cluster, but before you have added instances to the cluster or started
the cluster.

[CAUTION]
====
Before using this procedure to reconfigure an existing cluster, you must
follow the special procedures to migrate from a conventional broker
cluster to an enhanced broker cluster, as described in
"link:../openmq/mq-admin-guide/broker-clusters.html#GMADG00565[Converting a Conventional Cluster to an Enhanced
Cluster]" in Open Message Queue Administration Guide. Failing to perform
these special procedures could lead to data loss or corruption and even
render your setup unusable, depending on the JMS operations performed on
the existing cluster.
====

1. Ensure that the server is running.
Remote `asadmin` subcommands require a running server.

2. Create a password file with the entry `AS_ADMIN_JMSDBPASSWORD`
specifying the password of the database user. +
For information about password file entries, see the
link:reference-manual/asadmin.html#GSRFM00263[`asadmin`(1M)] help page.

3. Place a copy of, or a link to, the database's JDBC driver `.jar`
file in the as-install-parent``/mq/lib/ext`` directory on each host where
a {productName} cluster instance is to run.

4. Configure the {productName} cluster to use a Message Queue
enhanced broker cluster by using the
link:reference-manual/configure-jms-cluster.html#GSRFM00008[`configure-jms-cluster`]
subcommand:
+
[source]
----
> asadmin --passwordfile password-file configure-jms-cluster --clustertype=enhanced
--configstoretype=shareddb --messagestoretype=jdbc
--dbvendor database-vendor-name --dbuser database-user-name --dburl database-url
--property list-of-database-specific-properties glassfish-cluster-name
----

[[GSHAG438]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help configure-jms-cluster` at the command line.

[[abdby]][[GSHAG00160]][[to-configure-a-glassfish-cluster-to-use-a-remote-broker-cluster]]

==== To Configure a GlassFish Cluster to Use a Remote Broker Cluster

[[GSHAG439]]

Before You Begin

Perform the following steps after you have:

* Used Message Queue to create a broker cluster.
* Created the {productName} cluster, but not yet created instances
for the cluster.

1. Ensure that the server is running.
The remote subcommands used in this procedure require a running server.

2. Delete the `default_JMS_host` JMS host by using the
link:reference-manual/delete-jms-host.html#GSRFM00091[`delete-jms-host`] subcommand:
+
[source]
----
> asadmin delete-jms-host --target glassfish-cluster-name default_JMS_host
----

3. Create a JMS host for each broker in the broker cluster by using the
link:reference-manual/create-jms-host.html#GSRFM00039[`create-jms-host`] subcommand. +
For each broker, use an `asadmin create-jms-host` of the form:
+
[source]
----
> asadmin create-jms-host --target glassfish-cluster-name --mqhost broker-host
--mqport broker-port --mquser mq-user --mqpassword mq-user-password
jms-host-name-for-broker
----

4. Start the brokers in the cluster by using the Message Queue
`imqbrokerd` command, as described in
"link:../openmq/mq-admin-guide/broker-clusters.html#GMADG00254[Managing Broker Clusters]"
in Open Message Queue Administration Guide.

5. Create instances in the {productName} cluster, as described in
link:instances.html#gkqch[To Create an Instance Centrally] and
link:instances.html#gkqbl[To Create an Instance Locally].

[[abdbv]][[GSHAG00213]][[connection-failover]]

=== Connection Failover

The use of Message Queue broker clusters provides JMS connection
failover, including several options that control how connection failures
are handled.

Use the Administration Console's Java Message Service page to configure
these options. To display this page, click the configuration for the
GlassFish cluster or instance in the navigation pane, and then click the
Java Message Service link on the Configuration page.

The way in which connection failover operates depends on whether the
broker cluster is configured to be conventional or enhanced:

* In a conventional cluster, when a broker fails, clients may reconnect
to any other broker in the cluster. The Reconnect field specifies
whether reconnection should take place, and the Address List Behavior
and Address List Iterations fields specify how the client chooses what
broker to fail over to.
* In an enhanced cluster, when a broker fails, another broker
automatically takes over its messages and clients. Clients automatically
fail over to the appropriate broker. The Reconnect, Address List
Behavior and Address List Iterations fields are ignored.

For more information on connection failover, including how failover on
conventional clusters differs from failover on enhanced clusters, see
"link:../openmq/mq-admin-guide/administered-objects.html#GMADG00087[Automatic Reconnection]" in Open Message Queue
Administration Guide.

Reconnect::
  Applies only to conventional clusters. Enables reconnection and
  connection failover. When disabled, the Java Message Service does not
  attempt to reconnect if a connection fails.
Reconnect Interval::
  Specifies the number of seconds between reconnection attempts. If it
  is too short, this time interval does not give a broker time to
  recover. If it is too long, the wait time might represent an
  unacceptable delay. The default value is 5 seconds.
Reconnect Attempts::
  Specifies the number of attempts to connect (or reconnect) to a
  particular JMS host before trying another host in the JMS host list.
  The host list is also known as the Address List. Hosts are chosen from
  the address list either in order or randomly, depending on the setting
  of Address List Behavior.
Address List Behavior::
  For conventional clusters, this field specifies how the Java Message
  Service selects which JMS host in the JMS hosts list to initially
  connect to, and if the broker fails, how the Java Message Service
  selects which JMS host in the JMS hosts list to fail over to. +
  For enhanced clusters, this field specifies how the Java Message
  Service selects which JMS host in the JMS hosts list to initially
  connect to. +
  When performing initial connection or, for conventional clusters only,
  when performing failover, then if this attribute is set to Priority,
  the Java Message Service tries to connect to the first JMS host
  specified in the JMS hosts list and uses another one only if the first
  one is not available. If this attribute is set to Random, the Java
  Message Service selects the JMS host randomly from the JMS hosts list.
  If that host is not available, another one is chosen randomly. +
  The default for Embedded and Local JMS host types is Priority, and the
  default for the Remote JMS host type is Random. +
  For Embedded and Local JMS host types, the Java Message Service
  ensures that the Message Queue broker servicing a clustered instance
  appears first in that instance's JMS host list. +
  Thus, having Priority as the default Address List Behavior ensures
  that an application deployed to a clustered instance will always try
  to create its initial connection to that instance's co-located broker. +
  If there are many clients attempting a connection using the same
  connection factory, use the Random setting to prevent them from all
  attempting to create their initial connection to the same JMS host.
Address List Iterations::
  For conventional clusters, this field specifies the number of times
  the Java Message Service iterates through the JMS hosts list in an
  effort to establish its initial connection. If the broker fails, this
  field specifies the number of times the Java Message Service iterates
  through the JMS hosts list in an effort to fail over to another
  broker. +
  For enhanced clusters, this field specifies the number of times the
  Java Message Service iterates through the JMS hosts list in an effort
  to establish its initial connection. If the broker fails, this field
  is not used when performing reconnection.

You can override these settings using JMS connection factory settings.
For details, see "link:administration-guide/jms.html#GSADG00598[Administering JMS Connection
Factories and Destinations]" in {productName}
Administration Guide.

[[abdbw]][[GSHAG00214]][[load-balanced-delivery-to-mdbs]]

=== Load-Balanced Delivery to MDBs

When a message-driven bean (MDB) application is deployed to a GlassFish
cluster, incoming messages are delivered randomly to MDBs without regard
to the cluster instances in which they are running.

If the MDB is configured to receive messages from a durable or
non-durable subscription on a topic, then only one MDB instance across
the whole GlassFish cluster will receive each message.

For more information about these features, see
"link:../openmq/mq-admin-guide/jmsra-properties.html#GMADG00300[
About Shared Topic Subscriptions for Clustered Containers]"
in Open Message Queue Administration Guide.
