Skip to content

Commit

Permalink
[#4765] fix node name to be harmonized with xa node name
Browse files Browse the repository at this point in the history
  • Loading branch information
ochaloup committed Nov 5, 2019
1 parent a534b96 commit 2418c29
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 8 deletions.
17 changes: 16 additions & 1 deletion docs/src/main/asciidoc/transaction.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,22 @@ include::duration-format-note.adoc[]

The default value is 60 seconds.

== Configuring transaction node name identifier

Narayana, as the underlaying transaction manager, has an concept of unique node identifier.
This is important if you consider to use XA transactions with involve multiple resources.

The node name identifier plays a crucial part in the identification of a transaction.
The node name identifier is forged into the transaction id when the transaction is created.
Based on the node name identifier the transaction manager is capable to recognized the XA tranaction
counterparts created in database or JMS broker. The identifier makes possible for the transaction manager
to roll-back the transaction counterparts during recovery.

The node name identifier needs to be unique per transaction manager deployment.
And the node identifier needs to be stable over the transaction manager restarts.

The node name identifier may be configured via the property `quarkus.transaction-manager.node-name`.

== Why always having a transaction manager?

Does it work everywhere I want to?::
Expand Down Expand Up @@ -225,4 +241,3 @@ It's not a mess in Quarkus :)
Resource-level was introduced to support JPA in a non managed environment.
But Quarkus is both lean and a managed environment so we can safely always assume we are in JTA mode.
The end result is that the difficulties of running Hibernate ORM + CDI + a transaction manager in Java SE mode are solved by Quarkus.

Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package io.quarkus.narayana.jta.runtime;

import java.lang.reflect.Field;
import java.util.Collections;
import java.util.Properties;

import org.jboss.logging.Logger;

import com.arjuna.ats.arjuna.common.CoreEnvironmentBeanException;
import com.arjuna.ats.arjuna.common.arjPropertyManager;
import com.arjuna.ats.arjuna.coordinator.TxControl;
import com.arjuna.ats.jta.common.jtaPropertyManager;
import com.arjuna.common.util.propertyservice.PropertiesFactory;

import io.quarkus.runtime.annotations.Recorder;
Expand All @@ -23,7 +25,8 @@ public void setNodeName(final TransactionManagerConfiguration transactions) {

try {
arjPropertyManager.getCoreEnvironmentBean().setNodeIdentifier(transactions.nodeName);
TxControl.setXANodeName(transactions.xaNodeName.orElse(transactions.nodeName));
jtaPropertyManager.getJTAEnvironmentBean().setXaRecoveryNodes(Collections.singletonList(transactions.nodeName));
TxControl.setXANodeName(transactions.nodeName);
} catch (CoreEnvironmentBeanException e) {
e.printStackTrace();
}
Expand All @@ -46,6 +49,7 @@ public void setDefaultProperties(Properties properties) {

public void setDefaultTimeout(TransactionManagerConfiguration transactions) {
transactions.defaultTransactionTimeout.ifPresent(defaultTimeout -> {
arjPropertyManager.getCoordinatorEnvironmentBean().setDefaultTimeout((int) defaultTimeout.getSeconds());
TxControl.setDefaultTimeout((int) defaultTimeout.getSeconds());
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,6 @@ public final class TransactionManagerConfiguration {
@ConfigItem(defaultValue = "quarkus")
public String nodeName;

/**
* The XA node name used by the transaction manager
*/
@ConfigItem()
public Optional<String> xaNodeName;

/**
* The default transaction timeout
*/
Expand Down

0 comments on commit 2418c29

Please sign in to comment.