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
\{product---name} 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 \{product---name} cluster.

This subcommand should be used before the \{product---name} 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
GlassFish Server Open Source Edition 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 \{product---name} cluster for which the Message Queue
  cluster is to provide JMS services. +
  Because \{product---name} 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)]


