type=page
status=published
title=configure-jms-cluster
next=configure-lb-weight.html
prev=collect-log-files.html
~~~~~~

= configure-jms-cluster

[[configure-jms-cluster-1]][[GSRFM00008]][[configure-jms-cluster]]

== configure-jms-cluster

Configures the Message Queue cluster providing JMS services to a
{productName} cluster

[[sthref79]]

=== Synopsis

[source]
----
asadmin [asadmin-options] configure-jms-cluster [--help]
[--clustertype={conventional|enhanced}]
[--configstoretype={masterbroker|shareddb}]
[--messagestoretype={file|jdbc}]
[--dbvendor database-vendor]
[--dbuser database-user]
[--dburl database-url]
[--property (name=value)[:name=value]*]
cluster-name
----

[[sthref80]]

=== Description

The `configure-jms-cluster` configures the Message Queue cluster
providing JMS services to a {productName} cluster.

This subcommand should be used before the {productName} cluster is
started for the first time. Otherwise, follow the instructions in
"link:administration-guide/jms.html#GSADG00020[Administering the Java Message Service (JMS)]" in
{productName} Administration Guide.

This subcommand is supported in remote mode only. Remote `asadmin`
subcommands require a running domain administration server (DAS).

[[sthref81]]

=== Options

asadmin-options::
  Options for the `asadmin` utility. For information about these
  options, see the link:asadmin.html#asadmin-1m[`asadmin`(1M)] help page.
`--help`::
`-?`::
  Displays the help text for the subcommand.
`--clustertype`::
  The type of Message Queue cluster to configure. The value
  `conventional` specifies a conventional cluster, and the value
  `enhanced` specifies an enhanced, high-availability cluster. For
  information about these cluster types of Message Queue clusters, see
  "link:../openmq/mq-tech-over/broker-clusters.html#GMTOV00028[Broker Clusters]"
  in Open Message Queue Technical Overview. +
  The default value is `conventional`. +
  If `enhanced` is specified, the `configstoretype` and
  `messagestoretype` options are ignored.
`--configstoretype`::
  The type of data store for configuration data in a conventional
  cluster. The value `masterbroker` specifies the use of a master broker
  to store and manage the configuration data. The value `shareddb`
  specifies the use of a shared database to store the configuration
  data. +
  The default value is `masterbroker`. +
  This option is ignored if `clustertype` is set to `enhanced`.
`--messagestoretype`::
  The type of data store for message data in brokers in a conventional
  cluster. The value `file` specifies a file store. The value `jdbc`
  specifies a JDBC store. +
  The default value is `file`. +
  This option is ignored if `clustertype` is set to `enhanced`.
`--dbvendor`::
`--dbuser`::
`--dburl`::
  The database vendor, user, and access url of the JDBC database to use
  in any of these situations:
+
--
  * When `clustertype` is set to `enhanced`
  * When `configstoretype` is set to `shareddb`
  * When `messagestoretype` is set to `jdbc`
--
  For information about supported vendors and the formats of access urls
  for each vendor, see "link:../openmq/mq-admin-guide/persistence-services.html#GMADG00244[JDBC-Based Persistence]" in
  Open Message Queue Administration Guide.
+
[NOTE]
====
To specify the password of the JDBC database user, use the `--passwordfile` utility option
of the link:asadmin.html#asadmin-1m[`asadmin`(1M)] command after adding the entry
`AS_ADMIN_JMSDBPASSWORD` to the password file.
====

`--property`::
  A list of additional database-vendor-specific properties to configure
  the JDBC database for use by the Message Queue cluster. Specify
  properties as a colon (`:`) separated list of property names and
  values in the form:
+
[source]
----
prop1name=prop1value:prop2name=prop2value
----

[[sthref82]]

=== Operands

cluster-name::
  The name of the {productName} cluster for which the Message Queue
  cluster is to provide JMS services. +
  Because {productName} uses the cluster name to uniquely identify
  database tables the Message Queue cluster might require, the length of
  the name is restricted in the following situations:

  * If `clustertype` is set to `enhanced`, the name can be no longer
  than n–21 characters, where n is the maximum table name length allowed
  by the database.
  * If `configstoretype` is set to `shareddb`, the name can be no longer
  than n–19 characters, where n is the maximum table name length allowed
  by the database.

[[sthref83]]

=== Exit Status

0::
  subcommand executed successfully
1::
  error in executing the subcommand

[[sthref84]]

=== See Also

link:asadmin.html#asadmin-1m[`asadmin`(1M)]


