type=page
status=published
title=Administering Transactions
next=part-appendixes.html
prev=jndi.html
~~~~~~
Administering Transactions
==========================

[[GSADG00022]][[ablsn]]


[[administering-transactions]]
19 Administering Transactions
-----------------------------

This chapter discusses how to manage the transaction service for the
GlassFish Server Open Source Edition environment by using the `asadmin`
command-line utility. Instructions for manually recovering transactions
are also included.

The following topics are addressed here:

* link:#ablso[About Transactions]
* link:#beanp[Configuring the Transaction Service]
* link:#giubd[Managing the Transaction Service for Rollbacks]
* link:#gjjpy[Recovering Transactions]
* link:#beanq[Transaction Logging]

Instructions for accomplishing the tasks in this chapter by using the
Administration Console are contained in the Administration Console
online help.

For more information about the Java Transaction API (JTA) and Java
Transaction Service (JTS), see the following sites:
`http://www.oracle.com/technetwork/java/javaee/tech/jta-138684.html` and
`http://www.oracle.com/technetwork/java/javaee/tech/jts-140022.html`.

You might also want to read
"https://javaee.github.io/tutorial/transactions.html[Transactions]" in
The Java EE 8 Tutorial.

[[ablso]][[GSADG00605]][[about-transactions]]

About Transactions
~~~~~~~~~~~~~~~~~~

A transaction is a series of discreet actions in an application that
must all complete successfully. By enclosing one or more actions in an
indivisible unit of work, a transaction ensures data integrity and
consistency. If all actions do not complete, the changes are rolled
back.

For example, to transfer funds from a checking account to a savings
account, the following steps typically occur:

1.  Check to see if the checking account has enough money to cover the
transfer.
2.  Debit the amount from the checking account.
3.  Credit the amount to the savings account.
4.  Record the transfer to the checking account log.
5.  Record the transfer to the savings account log.

These steps together are considered a single transaction.

If all the steps complete successfully, the transaction is committed .
If any step fails, all changes from the preceding steps are rolled back,
and the checking account and savings account are returned to the states
they were in before the transaction started. This type of event is
called a rollback. A normal transaction ends in either a committed state
or a rolled back state.

The following elements contribute to reliable transaction processing by
implementing various APIs and functionalities:

* Transaction Manager. Provides the services and management functions
required to support transaction demarcation, transactional resource
management, synchronization, and transaction context propagation.
* GlassFish Server. Provides the infrastructure required to support the
application runtime environment that includes transaction state
management.
* Resource Manager. Through a resource adapter, the resource manager
provides the application access to resources. The resource manager
participates in distributed transactions by implementing a transaction
resource interface used by the transaction manager to communicate
transaction association, transaction completion, and recovery work. An
example of such a resource manager is a relational database server.
* Resource Adapter. A system-level software library is used by GlassFish
Server or a client to connect to a resource manager. A resource adapter
is typically specific to a resource manager. The resource adapter is
available as a library and is used within the address space of the
client using it. An example of such a resource adapter is a Java
Database Connectivity (JDBC) driver. For information on supported JDBC
drivers, see link:jdbc.html#beamw[Configuration Specifics for JDBC
Drivers].
* Transactional User Application. In the GlassFish Server environment,
the transactional user application uses Java Naming and Directory
Interface (JNDI) to look up transactional data sources and, optionally,
the user transaction). The application might use declarative transaction
attribute settings for enterprise beans, or explicit programmatic
transaction demarcation. For more information, see "link:../application-development-guide/transaction-service.html#GSDVG00191[The
Transaction Manager, the Transaction Synchronization Registry, and
UserTransaction]" in GlassFish Server Open Source Edition Application
Development Guide.

The following topics are addressed here:

* link:#beann[Transaction Resource Managers]
* link:#beano[Transaction Scope]

[[beann]][[GSADG00785]][[transaction-resource-managers]]

Transaction Resource Managers
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

There are three types of transaction resource managers:

* Databases - Use of transactions prevents databases from being left in
inconsistent states due to incomplete updates. For information about
JDBC transaction isolation levels, see "link:../application-development-guide/transaction-service.html#GSDVG00511[Using JDBC
Transaction Isolation Levels]" in GlassFish Server Open Source Edition
Application Development Guide. +
The GlassFish Server supports a variety of JDBC XA drivers. For a list
of the JDBC drivers currently supported by the GlassFish Server, see the
link:../release-notes/toc.html#GSRLN[GlassFish Server Open Source Edition Release Notes]. For
configurations of supported and other drivers, see
link:jdbc.html#beamw[Configuration Specifics for JDBC Drivers].
* Java Message Service (JMS) Providers - Use of transactions ensures
that messages are reliably delivered. The GlassFish Server is integrated
with Open Message Queue, a fully capable JMS provider. For more
information about transactions and the JMS API, see
link:jms.html#abljw[Administering the Java Message Service (JMS)].
* J2EE Connector Architecture (CA) components - Use of transactions
prevents legacy EIS systems from being left in inconsistent states due
to incomplete updates. For more information about connectors, see
link:connectors.html#abllp[Administering EIS Connectivity].

[[beano]][[GSADG00786]][[transaction-scope]]

Transaction Scope
^^^^^^^^^^^^^^^^^

A local transaction involves only one non-XA resource and requires that
all participating application components execute within one process.
Local transaction optimization is specific to the resource manager and
is transparent to the Java EE application.

In the GlassFish Server, a JDBC resource is non-XA if it meets either of
the following criteria:

* In the JDBC connection pool configuration, the DataSource class does
not implement the javax.sql.XADataSource interface.
* The Resource Type setting is not set to javax.sql.XADataSource .

A transaction remains local if the following conditions remain true:

* One and only one non-XA resource is used. If any additional non-XA
resource is used, the transaction is aborted, because the transaction
manager must use XA protocol to commit two or more resources.
* No transaction importing or exporting occurs.

Transactions that involve multiple resources or multiple participant
processes are distributed or global transactions. A global transaction
can involve one non-XA resource if last agent optimization is enabled.
Otherwise, all resources must be XA. The `use-last-agent-optimization`
property is set to `true` by default. For details about how to set this
property, see link:#beanp[Configuring the Transaction Service].

If only one XA resource is used in a transaction, one-phase commit
occurs, otherwise the transaction is coordinated with a two-phase commit
protocol.

A two-phase commit protocol between the transaction manager and all the
resources enlisted for a transaction ensures that either all the
resource managers commit the transaction or they all abort. When the
application requests the commitment of a transaction, the transaction
manager issues a `PREPARE_TO_COMMIT` request to all the resource
managers involved. Each of these resources can in turn send a reply
indicating whether it is ready for commit (`PREPARED`) or not (`NO`).
Only when all the resource managers are ready for a commit does the
transaction manager issue a commit request (`COMMIT`) to all the
resource managers. Otherwise, the transaction manager issues a rollback
request (`ABORT`) and the transaction is rolled back.

[[beanp]][[GSADG00606]][[configuring-the-transaction-service]]

Configuring the Transaction Service
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

You can configure the transaction service in the GlassFish Server in the
following ways:

* To configure the transaction service using the Administration Console,
open the Transaction Service component under the relevant configuration.
For details, click the Help button in the Administration Console.
* To configure the transaction service, use the link:../reference-manual/set.html#GSRFM00226[`set`]
subcommand to set the following attributes. +
The following examples show the `server-config` configuration, but
values for any configuration can be set. For example, if you create a
cluster named `cluster1` and a configuration named `cluster1-config` is
automatically created for it, you can use `cluster1-config` in the `set`
subcommand to get the transaction service settings for that cluster. +
[source,oac_no_warn]
----
server-config.transaction-service.automatic-recovery = false
server-config.transaction-service.heuristic-decision = rollback
server-config.transaction-service.keypoint-interval = 2048
server-config.transaction-service.retry-timeout-in-seconds = 600
server-config.transaction-service.timeout-in-seconds = 0
server-config.transaction-service.tx-log-dir = domain-dir/logs
----
You can also set these properties: +
[source,oac_no_warn]
----
server-config.transaction-service.property.oracle-xa-recovery-workaround = true
server-config.transaction-service.property.sybase-xa-recovery-workaround = false
server-config.transaction-service.property.disable-distributed-transaction-logging = false
server-config.transaction-service.property.xaresource-txn-timeout = 0
server-config.transaction-service.property.pending-txn-cleanup-interval = -1
server-config.transaction-service.property.use-last-agent-optimization = true
server-config.transaction-service.property.delegated-recovery = false 
server-config.transaction-service.property.wait-time-before-recovery-insec = 60
server-config.transaction-service.property.purge-cancelled-transactions-after = 0
server-config.transaction-service.property.commit-one-phase-during-recovery = false
server-config.transaction-service.property.add-wait-point-during-recovery = 0
server-config.transaction-service.property.db-logging-resource = jdbc/TxnDS
server-config.transaction-service.property.xa-servername = myserver
----
Default property values are shown where they exist. For
`db-logging-resource` and `xa-servername`, typical values are shown.
Values that are not self-explanatory are as follows:

** The `xaresource-txn-timeout` default of `0` means there is no
timeout. The units are seconds.

** The `pending-txn-cleanup-interval` default of `-1` means the periodic
recovery thread doesn't run. The units are seconds.

** The `purge-cancelled-transactions-after` default of `0` means
cancelled transactions are not purged. The units are the number of
cancellations in between purging attempts.

** The `add-wait-point-during-recovery` property does not have a default
value. If this property is unset, recovery does not wait. The units are
seconds.

** The `db-logging-resource` property does not have a default value. It
is unset by default. However, if you set `db-logging-resource` to an
empty value, the value used is `jdbc/TxnDS`.

** The `xa-servername` property does not have a default value. Use this
property to override server names that can cause errors. +
You can use the link:../reference-manual/get.html#GSRFM00139[`get`] subcommand to list all the
transaction service attributes and the properties that have been set.
For details, see the link:../reference-manual/toc.html#GSRFM[GlassFish Server Open Source Edition
Reference Manual]. +
Changing `keypoint-interval`, `retry-timeout-in-seconds`, or
`timeout-in-seconds` does not require a server restart. Changing other
attributes or properties requires a server restart.
* You can also set the following system properties: +
[source,oac_no_warn]
----
ALLOW_MULTIPLE_ENLISTS_DELISTS=false
JTA_RESOURCE_TABLE_MAX_ENTRIES=8192
JTA_RESOURCE_TABLE_DEFAULT_LOAD_FACTOR=0.75f
----
The `JTA_RESOURCE_TABLE_DEFAULT_LOAD_FACTOR` default is the default
`Map` resizing value.

[[giubd]][[GSADG00607]][[managing-the-transaction-service-for-rollbacks]]

Managing the Transaction Service for Rollbacks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

You can roll back a single transaction by using the `asadmin`
subcommands described in this section. To do so, the transaction service
must be stopped (and later restarted), allowing you to see the active
transactions and correctly identify the one that needs to be rolled
back.

The following topics are addressed here:

* link:#giufn[To Stop the Transaction Service]
* link:#giugk[To Roll Back a Transaction]
* link:#giuet[To Restart the Transaction Service]
* link:#gkrbo[Determining Local Transaction Completion at Shutdown]

[[giufn]][[GSADG00513]][[to-stop-the-transaction-service]]

To Stop the Transaction Service
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `freeze-transaction-service` subcommand in remote mode to stop
the transaction service. When the transaction service is stopped, all
in-flight transactions are immediately suspended. You must stop the
transaction service before rolling back any in-flight transactions.

Running this subcommand on a stopped transaction subsystem has no
effect. The transaction service remains suspended until you restart it
by using the `unfreeze-transaction-service` subcommand.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  Stop the transaction service by using the
link:../reference-manual/freeze-transaction-service.html#GSRFM00137[`freeze-transaction-service`] subcommand.

[[GSADG00293]][[giufq]]


Example 19-1 Stopping the Transaction Service

This example stops the transaction service.

[source,oac_no_warn]
----
asadmin> freeze-transaction-service --target instance1
Command freeze-transaction-service executed successfully
----

[[GSADG1038]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help freeze-transaction-service` at the command line.

[[giugk]][[GSADG00514]][[to-roll-back-a-transaction]]

To Roll Back a Transaction
^^^^^^^^^^^^^^^^^^^^^^^^^^

In some situations, you might want to roll back a particular
transaction. Before you can roll back a transaction, you must first stop
the transaction service so that transaction operations are suspended.
Use the `rollback-transaction` subcommand in remote mode to roll back a
specific transaction.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  Enable monitoring using the `set` subcommand. For example: +
[source,oac_no_warn]
----
asadmin> set cluster1-config.monitoring-service.module-monitoring-levels.transaction-service=HIGH
----
3.  Use the `freeze-transaction-service` subcommand to halt in-process
transactions. See link:#giufn[To Stop the Transaction Service].
4.  Identify the ID of the transaction you want to roll back. +
To see a list of IDs of active transactions, use the `get` subcommand
with the `--monitor` option to get the monitoring data for the
`activeids` statistic. See link:monitoring.html#ablvl[Transaction Service
Statistics]. For example: +
[source,oac_no_warn]
----
asadmin> get --monitor instance1.server.transaction-service.activeids-current
----
5.  Roll back the transaction by using the
link:../reference-manual/rollback-transaction.html#GSRFM00223[`rollback-transaction`] subcommand. +
The transaction is not rolled back at the time of this command's
execution, but only marked for rollback. The transaction is rolled back
when it is completed.

[[GSADG00294]][[giufy]]


Example 19-2 Rolling Back a Transaction

This example rolls back the transaction with transaction ID
`0000000000000001_00`.

[source,oac_no_warn]
----
asadmin> rollback-transaction --target instance1 0000000000000001_00
Command rollback-transaction executed successfully
----

[[GSADG1039]]

See Also

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

[[giuet]][[GSADG00515]][[to-restart-the-transaction-service]]

To Restart the Transaction Service
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `unfreeze-transaction-service` subcommand in remote mote to
resume all the suspended in-flight transactions. Run this subcommand to
restart the transaction service after it has been frozen.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  Restart the suspended transaction service by using the
link:../reference-manual/unfreeze-transaction-service.html#GSRFM00245[`unfreeze-transaction-service`] subcommand.

[[GSADG00295]][[giuef]]


Example 19-3 Restarting the Transaction Service

This example restarts the transaction service after it has been frozen.

[source,oac_no_warn]
----
asadmin> unfreeze-transaction-service --target instance1
Command unfreeze-transaction-service executed successfully
----

[[GSADG1040]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help unfreeze-transaction-service` at the command line.

[[gkrbo]][[GSADG00787]][[determining-local-transaction-completion-at-shutdown]]

Determining Local Transaction Completion at Shutdown
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

When you shut down a GlassFish Server instance, all database connections
are closed. When an Oracle JDBC driver-based database connection is
closed in the middle of a non-XA transaction, all pending changes are
committed. Other databases usually roll back pending changes when a
connection is closed without being explicitly committed. To determine
the exact behavior for your database, refer to the documentation from
your JDBC driver vendor.

To explicitly specify whether GlassFish Server commits or rolls back
non-XA transactions at server shutdown, set the
`com.sun.enterprise.in-progress-local-transaction.completion-mode` JVM
option to either `commit` or `rollback` using the
link:../reference-manual/create-jvm-options.html#GSRFM00042[`create-jvm-options`] subcommand. For example:

[source,oac_no_warn]
----
asadmin> create-jvm-options -Dcom.sun.enterprise.in-progress-local-transaction.completion-mode=rollback
----

[[gjjpy]][[GSADG00608]][[recovering-transactions]]

Recovering Transactions
~~~~~~~~~~~~~~~~~~~~~~~

There are some situations where the commit or rollback operations might
be interrupted, typically because the server crashed or a resource
manager crashed. Crash situations can leave some transactions stranded
between steps. GlassFish Server is designed to recover from these
failures. If the failed transaction spans multiple servers, the server
that started the transaction can contact the other servers to get the
outcome of the transaction. If the other servers are unreachable, the
transaction uses heuristic decision information to determine the
outcome.

The following topics are addressed here:

* link:#gkoen[Automatic Transaction Recovery]
* link:#giuhe[To Manually Recover Transactions]
* link:#gaxim[Distributed Transaction Recovery]
* link:#gaxig[Recovery Workarounds and Limitations]

[[gkoen]][[GSADG00788]][[automatic-transaction-recovery]]

Automatic Transaction Recovery
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

GlassFish Server can perform automatic recovery in these ways:

* Pending transactions are completed upon server startup if
`automatic-recovery` is set to `true`.
* Periodic automatic recovery is performed by a background thread if the
`pending-txn-cleanup-interval` property is set to a positive value.

Changing these settings requires a server restart. For more information
about how to change these settings, see link:#beanp[Configuring the
Transaction Service].

If commit fails during recovery, a message is written to the server log.

[[giuhe]][[GSADG00516]][[to-manually-recover-transactions]]

To Manually Recover Transactions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `recover-transactions` subcommand in remote mode to manually
recover transactions that were pending when a resource or a server
instance failed.

For a standalone server, do not use manual transaction recovery to
recover transactions after a server failure. For a standalone server,
manual transaction recovery can recover transactions only when a
resource fails, but the server is still running. If a standalone server
fails, only the full startup recovery process can recover transactions
that were pending when the server failed.

For an installation of multiple server instances, you can use manual
transaction recovery from a surviving server instance to recover
transactions after a server failure. For manual transaction recovery to
work properly, transaction logs must be stored on a shared file system
that is accessible to all server instances. See link:#beanq[Transaction
Logging].

When you execute `recover-transactions` in non-delegated mode, you can
recover transactions that didn't complete two-phase commit because of a
resource crash. To use manual transaction recovery in this way, the
following conditions must be met:

* The `recover-transactions` command should be executed after the
resource is restarted.
* Connection validation should be enabled so the connection pool is
refreshed when the resource is accessed after the recovery. For more
information, see "link:../performance-tuning-guide/tuning-glassfish.html#GSPTG00030[Connection Validation Settings]" in
GlassFish Server Open Source Edition Performance Tuning Guide.

If commit fails during recovery, a message is written to the server log.


[NOTE]
=======================================================================

A JMS resource crash is handled the same way as any other resource.

You can list in-doubt Open Message Queue transactions using the
`imqcmd list txn` subcommand. For more information, see
"olink:GMADG00241[Managing Transactions]" in Open Message Queue
Administration Guide.

=======================================================================


1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  Manually recover transactions by using the
link:../reference-manual/recover-transactions.html#GSRFM00216[`recover-transactions`] subcommand.

[[GSADG00296]][[giugn]]


Example 19-4 Manually Recovering Transactions

This example performs manual recovery of transactions on `instance1`,
saving them to `instance2`.

[source,oac_no_warn]
----
asadmin recover-transactions --target instance2 instance1
Transaction recovered.
----

[[GSADG1041]]

See Also

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

[[gaxim]][[GSADG00789]][[distributed-transaction-recovery]]

Distributed Transaction Recovery
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

To enable cluster-wide automatic recovery, you must first facilitate
storing of transaction logs in a shared file system. See
link:#beanq[Transaction Logging].

Next, you must set the transaction service's `delegated-recovery`
property to `true` (the default is `false`). For information about
setting `tx-log-dir` and `delegated-recovery`, see
link:#beanp[Configuring the Transaction Service].

[[gaxig]][[GSADG00790]][[recovery-workarounds-and-limitations]]

Recovery Workarounds and Limitations
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The GlassFish Server provides workarounds for some known issues with
transaction recovery implementations.


[NOTE]
=====================================================================

These workarounds do not imply support for any particular JDBC driver.

=====================================================================


[[gknau]][[GSADG00689]][[general-recovery-limitations]]

General Recovery Limitations
++++++++++++++++++++++++++++

The following general limitations apply to transaction recovery:

* Recovery succeeds if there are no exceptions during the process. This
is independent of the number of transactions that need to be recovered.
* Only transactions that did not complete the two-phase commit can be
recovered (one of the XA resources failed or GlassFish Server crashed
after resources were prepared).
* Manual transaction recovery cannot recover transactions after a server
crash on a standalone server instance. Manual operations are intended
for cases when a resource dies unexpectedly while the server is running.
In case of a server crash, only startup recovery can recover in-doubt
transactions.
* It is not possible to list transaction IDs for in-doubt transactions.
* Delegated transaction recovery (by a different server instance in a
cluster) is not possible if the failed instance used an `EMBEDDED`
Message Queue broker, or if it used a `LOCAL` or `REMOTE` Message Queue
broker and the broker also failed. In this case, only automatic recovery
on server instance restart is possible. This is because for conventional
Message Queue clustering, state information in a failed broker is not
available until the broker restarts.

[[gknee]][[GSADG00690]][[oracle-setup-for-transaction-recovery]]

Oracle Setup for Transaction Recovery
+++++++++++++++++++++++++++++++++++++

You must configure the following `grant` statements in your Oracle
database to set up transaction recovery:

[source,oac_no_warn]
----
grant select on SYS.DBA_PENDING_TRANSACTIONS to user; 
grant execute on SYS.DBMS_SYSTEM to user; 
grant select on SYS.PENDING_TRANS$ to user; 
grant select on SYS.DBA_2PC_NEIGHBORS to user; 
grant execute on SYS.DBMS_XA to user;
grant select on SYS.DBA_2PC_PENDING to user;
----

The user is the database administrator. On some versions of the Oracle
driver the last `grant execute` fails. You can ignore this.

[[gjiep]][[GSADG00691]][[oracle-thin-driver]]

Oracle Thin Driver
++++++++++++++++++

In the Oracle thin driver, the `XAResource.recover` method repeatedly
returns the same set of in-doubt Xids regardless of the input flag.
According to the XA specifications, the Transaction Manager initially
calls this method with TMSTARTSCAN and then with TMNOFLAGS repeatedly
until no Xids are returned. The `XAResource.commit` method also has some
issues.

To disable the GlassFish Server workaround, set the
`oracle-xa-recovery-workaround` property value to `false`. For details
about how to set this property, see link:#beanp[Configuring the
Transaction Service]. This workaround is used unless explicitly
disabled.

[[gkneq]][[GSADG00692]][[delegated-recovery-after-server-crash-doesnt-work-on-mysql]]

Delegated Recovery After Server Crash Doesn't Work on MySQL
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

The MySQL database supports XA transaction recovery only when the
database crashes. When a GlassFish Server instance crashes, MySQL rolls
back prepared transactions.

[[glclh]][[GSADG00693]][[call-to-xateminator.recover-during-resourceadapter.start-hangs-if-automatic-recovery-is-enabled]]

Call to `XATeminator.recover()` During `ResourceAdapter.start()` Hangs If Automatic Recovery Is Enabled
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Calls to `XATerminator.recover()` from the `ResourceAdapter.start()`
method never return because GlassFish Server deadlocks. This only occurs
when automatic recovery is enabled.

It is not advisable to do transactional activities, such as starting a
transaction or calling `XATerminator.recover()`, during
`ResourceAdapter.start()`. For more information, see
`http://markmail.org/message/ogc7qndhaywfkdrp#query:+page:1+mid:kyyzpcexusbnv7ri+state:results`.

[[beanq]][[GSADG00609]][[transaction-logging]]

Transaction Logging
~~~~~~~~~~~~~~~~~~~

The transaction service writes transactional activity into transaction
logs so that transactions can be recovered. You can control transaction
logging in these ways:

* Set the location of the transaction log files in one of these ways:

** Set the GlassFish Server's `log-root` setting to a shared file system
base directory and set the transaction service's `tx-log-dir` attribute
to a relative path.

** Set `tx-log-dir` to an absolute path to a shared file system
directory, in which case `log-root` is ignored for transaction logs.

** Set a system property called `TX-LOG-DIR` to a shared file system
directory. For example: +
[source,oac_no_warn]
----
asadmin> create-system-properties --target server TX-LOG-DIR=/inst1/logs
----
For information about setting `log-root` and other general logging
settings, see link:logging.html#abluj[Administering the Logging Service].
* Turn off transaction logging by setting the
`disable-distributed-transaction-logging` property to `true` and the
`automatic-recovery` attribute to `false`. Do this only if performance
is more important than transaction recovery.


[NOTE]
=======================================================================

All instances in a cluster must be owned by the same user (`uid`), and
read/write permissions for that user must be set on the transaction log
directories.

Transaction logs should be stored in a high-availability network file
system (NFS) to avoid a single point of failure.

=======================================================================


[[gcmam]][[GSADG00517]][[to-store-transaction-logs-in-a-database]]

To Store Transaction Logs in a Database
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

For multi-core machines, logging transactions to a database may be more
efficient. Transaction logging is designed to work with any
JDBC-compliant database. For databases with which transaction logging
has been tested, see the GlassFish Server Open Source Edition Release
Notes.

1.  [[CIHDBIJI]] +
Create a JDBC connection Pool. To use non-transactional connections to
insert log records, you can either set the
`non-transactional-connections` attribute to `true` in this step, or you
can perform step link:#CIHGIHJC[5] later.
2.  Create a JDBC resource that uses the connection pool and note the
JNDI name of the JDBC resource.
3.  Automatic table creation for the transaction logs is done by
default. However, if you would prefer to create the table manually, name
it `txn_log_table` with the following schema: +
[width="100%",cols="50%,50%",options="header",]
|==========================
|Column Name |JDBC Type
|`LOCALTID` |`VARCHAR`
|`INSTANCENAME` |`VARCHAR`
|`SERVERNAME` |`VARCHAR(n)`
|`GTRID` |`VARBINARY`
|==========================

The size of the `SERVERNAME` column should be at least the length of the
GlassFish Server host name plus 10 characters. +
The size of the `GTRID` column should be at least 64 bytes.
4.  Add the `db-logging-resource` property to the transaction service.
For example: +
[source,oac_no_warn]
----
asadmin set server-config.transaction-service.property.db-logging-resource="jdbc/TxnDS"
----
The property's value should be the JNDI name of the JDBC resource
configured previously.
5.  [[CIHGIHJC]] +
If you didn't set the `non-transactional-connections` attribute to
`true` in step link:#CIHDBIJI[1] and you want to use non-transactional
connections to insert log records, use the following
`asadmin create-jvm-options` command to reference an existing
transactional resource but use non-transactional connections for the
`INSERT` statements: +
[source,oac_no_warn]
----
asadmin create-jvm-options -Dcom.sun.jts.dblogging.use.nontx.connection.for.add=true
----
6.  To disable file synchronization, use the following
`asadmin create-jvm-options` command: +
[source,oac_no_warn]
----
asadmin create-jvm-options -Dcom.sun.appserv.transaction.nofdsync
----
7.  Restart the server.

[[GSADG1042]]

Next Steps

To define the SQL used by the transaction manager when it is storing its
transaction logs in the database, use the following flags:

`-Dcom.sun.jts.dblogging.insertquery=sql` statement

`-Dcom.sun.jts.dblogging.deletequery=sql` statement

`-Dcom.sun.jts.dblogging.selectquery=sql` statement

`-Dcom.sun.jts.dblogging.selectservernamequery=sql` statement

The default statements are as follows:

`-Dcom.sun.jts.dblogging.insertquery=insert into txn_log_table values ( ?, ?, ?, ? )`

`-Dcom.sun.jts.dblogging.deletequery=delete from txn_log_table where localtid = ? and servername = ?`

`-Dcom.sun.jts.dblogging.selectquery=select * from txn_log_table where servername = ?`

`-Dcom.sun.jts.dblogging.selectservernamequery=select distinct servername from txn_log_table where instancename = ?`

To set one of these flags using the `asadmin create-jvm-options`
command, you must quote the statement. For example:

`create-jvm-options '-Dcom.sun.jts.dblogging.deletequery=delete from txn_log_table where gtrid = ?'`

You can also set JVM options in the Administration Console. Select the
JVM Settings component under the relevant configuration. These flags and
their statements must also be quoted in the Administration Console. For
example:

`'-Dcom.sun.jts.dblogging.deletequery=delete from txn_log_table where gtrid = ?'`

[[GSADG1043]]

See Also

For information about JDBC connection pools and resources, see
link:jdbc.html#ablih[Administering Database Connectivity]. For more
information about the `asadmin set` and `asadmin create-jvm-options`
commands, see the link:../reference-manual/toc.html#GSRFM[GlassFish Server Open Source Edition
Reference Manual]. For databases with which transaction logging has been
tested, see the GlassFish Server Open Source Edition Release Notes.


