Merge branch '6.0.x'
This commit is contained in:
commit
86ca6fee16
|
@ -828,13 +828,6 @@ The following table summarizes various `LoadTimeWeaver` implementations:
|
||||||
| Running in Red Hat's https://www.jboss.org/jbossas/[JBoss AS] or https://www.wildfly.org/[WildFly]
|
| Running in Red Hat's https://www.jboss.org/jbossas/[JBoss AS] or https://www.wildfly.org/[WildFly]
|
||||||
| `JBossLoadTimeWeaver`
|
| `JBossLoadTimeWeaver`
|
||||||
|
|
||||||
| Running in IBM's https://www-01.ibm.com/software/webservers/appserv/was/[WebSphere]
|
|
||||||
| `WebSphereLoadTimeWeaver`
|
|
||||||
|
|
||||||
| Running in Oracle's
|
|
||||||
https://www.oracle.com/technetwork/middleware/weblogic/overview/index-085209.html[WebLogic]
|
|
||||||
| `WebLogicLoadTimeWeaver`
|
|
||||||
|
|
||||||
| JVM started with Spring `InstrumentationSavingAgent`
|
| JVM started with Spring `InstrumentationSavingAgent`
|
||||||
(`java -javaagent:path/to/spring-instrument.jar`)
|
(`java -javaagent:path/to/spring-instrument.jar`)
|
||||||
| `InstrumentationLoadTimeWeaver`
|
| `InstrumentationLoadTimeWeaver`
|
||||||
|
@ -949,11 +942,11 @@ when you use Spring's LTW support in environments such as application servers an
|
||||||
containers.
|
containers.
|
||||||
|
|
||||||
[[aop-aj-ltw-environments-tomcat-jboss-etc]]
|
[[aop-aj-ltw-environments-tomcat-jboss-etc]]
|
||||||
==== Tomcat, JBoss, WebSphere, WebLogic
|
==== Tomcat, JBoss, WildFly
|
||||||
|
|
||||||
Tomcat, JBoss/WildFly, IBM WebSphere Application Server and Oracle WebLogic Server all
|
Tomcat and JBoss/WildFly provide a general app `ClassLoader` that is capable of local
|
||||||
provide a general app `ClassLoader` that is capable of local instrumentation. Spring's
|
instrumentation. Spring's native LTW may leverage those ClassLoader implementations
|
||||||
native LTW may leverage those ClassLoader implementations to provide AspectJ weaving.
|
to provide AspectJ weaving.
|
||||||
You can simply enable load-time weaving, as xref:core/aop/using-aspectj.adoc[described earlier].
|
You can simply enable load-time weaving, as xref:core/aop/using-aspectj.adoc[described earlier].
|
||||||
Specifically, you do not need to modify the JVM launch script to add
|
Specifically, you do not need to modify the JVM launch script to add
|
||||||
`-javaagent:path/to/spring-instrument.jar`.
|
`-javaagent:path/to/spring-instrument.jar`.
|
||||||
|
|
|
@ -13,39 +13,7 @@ javadoc for details.
|
||||||
Spring's `JtaTransactionManager` is the standard choice to run on Jakarta EE application
|
Spring's `JtaTransactionManager` is the standard choice to run on Jakarta EE application
|
||||||
servers and is known to work on all common servers. Advanced functionality, such as
|
servers and is known to work on all common servers. Advanced functionality, such as
|
||||||
transaction suspension, works on many servers as well (including GlassFish, JBoss and
|
transaction suspension, works on many servers as well (including GlassFish, JBoss and
|
||||||
Geronimo) without any special configuration required. However, for fully supported
|
Geronimo) without any special configuration required.
|
||||||
transaction suspension and further advanced integration, Spring includes special adapters
|
|
||||||
for WebLogic Server and WebSphere. These adapters are discussed in the following
|
|
||||||
sections.
|
|
||||||
|
|
||||||
For standard scenarios, including WebLogic Server and WebSphere, consider using the
|
|
||||||
convenient `<tx:jta-transaction-manager/>` configuration element. When configured,
|
|
||||||
this element automatically detects the underlying server and chooses the best
|
|
||||||
transaction manager available for the platform. This means that you need not explicitly
|
|
||||||
configure server-specific adapter classes (as discussed in the following sections).
|
|
||||||
Rather, they are chosen automatically, with the standard
|
|
||||||
`JtaTransactionManager` as the default fallback.
|
|
||||||
|
|
||||||
|
|
||||||
[[transaction-application-server-integration-websphere]]
|
|
||||||
== IBM WebSphere
|
|
||||||
|
|
||||||
On WebSphere 6.1.0.9 and above, the recommended Spring JTA transaction manager to use is
|
|
||||||
`WebSphereUowTransactionManager`. This special adapter uses IBM's `UOWManager` API,
|
|
||||||
which is available in WebSphere Application Server 6.1.0.9 and later. With this adapter,
|
|
||||||
Spring-driven transaction suspension (suspend and resume as initiated by
|
|
||||||
`PROPAGATION_REQUIRES_NEW`) is officially supported by IBM.
|
|
||||||
|
|
||||||
|
|
||||||
[[transaction-application-server-integration-weblogic]]
|
|
||||||
== Oracle WebLogic Server
|
|
||||||
|
|
||||||
On WebLogic Server 9.0 or above, you would typically use the
|
|
||||||
`WebLogicJtaTransactionManager` instead of the stock `JtaTransactionManager` class. This
|
|
||||||
special WebLogic-specific subclass of the normal `JtaTransactionManager` supports the
|
|
||||||
full power of Spring's transaction definitions in a WebLogic-managed transaction
|
|
||||||
environment, beyond standard JTA semantics. Features include transaction names,
|
|
||||||
per-transaction isolation levels, and proper resuming of transactions in all cases.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -453,10 +453,9 @@ on rollback rule semantics, patterns, and warnings regarding possible unintentio
|
||||||
matches for pattern-based rollback rules.
|
matches for pattern-based rollback rules.
|
||||||
|
|
||||||
Currently, you cannot have explicit control over the name of a transaction, where 'name'
|
Currently, you cannot have explicit control over the name of a transaction, where 'name'
|
||||||
means the transaction name that appears in a transaction monitor, if applicable
|
means the transaction name that appears in a transaction monitor and in logging output.
|
||||||
(for example, WebLogic's transaction monitor), and in logging output. For declarative
|
For declarative transactions, the transaction name is always the fully-qualified class
|
||||||
transactions, the transaction name is always the fully-qualified class name + `.`
|
name + `.` + the method name of the transactionally advised class. For example, if the
|
||||||
+ the method name of the transactionally advised class. For example, if the
|
|
||||||
`handlePayment(..)` method of the `BusinessService` class started a transaction, the
|
`handlePayment(..)` method of the `BusinessService` class started a transaction, the
|
||||||
name of the transaction would be: `com.example.BusinessService.handlePayment`.
|
name of the transaction would be: `com.example.BusinessService.handlePayment`.
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,14 @@ status and with an inner transaction's locks released immediately after its comp
|
||||||
Such an independent inner transaction can also declare its own isolation level, timeout,
|
Such an independent inner transaction can also declare its own isolation level, timeout,
|
||||||
and read-only settings and not inherit an outer transaction's characteristics.
|
and read-only settings and not inherit an outer transaction's characteristics.
|
||||||
|
|
||||||
|
NOTE: The resources attached to the outer transaction will remain bound there while
|
||||||
|
the inner transaction acquires its own resources such as a new database connection.
|
||||||
|
This may lead to exhaustion of the connection pool and potentially to a deadlock if
|
||||||
|
several threads have an active outer transaction and wait to acquire a new connection
|
||||||
|
for their inner transaction, with the pool not being able to hand out any such inner
|
||||||
|
connection anymore. Do not use `PROPAGATION_REQUIRES_NEW` unless your connection pool
|
||||||
|
is appropriately sized, exceeding the number of concurrent threads by at least 1.
|
||||||
|
|
||||||
[[tx-propagation-nested]]
|
[[tx-propagation-nested]]
|
||||||
== Understanding `PROPAGATION_NESTED`
|
== Understanding `PROPAGATION_NESTED`
|
||||||
|
|
||||||
|
|
|
@ -56,14 +56,13 @@ locally, as the following example shows:
|
||||||
----
|
----
|
||||||
|
|
||||||
The specified `WorkManager` can also point to an environment-specific thread pool --
|
The specified `WorkManager` can also point to an environment-specific thread pool --
|
||||||
typically through a `SimpleTaskWorkManager` instance's `asyncTaskExecutor` property. Consider
|
typically through a `SimpleTaskWorkManager` instance's `asyncTaskExecutor` property.
|
||||||
defining a shared thread pool for all your `ResourceAdapter` instances if you happen to
|
Consider defining a shared thread pool for all your `ResourceAdapter` instances
|
||||||
use multiple adapters.
|
if you happen to use multiple adapters.
|
||||||
|
|
||||||
In some environments (such as WebLogic 9 or above), you can instead obtain the entire `ResourceAdapter` object
|
In some environments, you can instead obtain the entire `ResourceAdapter` object from JNDI
|
||||||
from JNDI (by using `<jee:jndi-lookup>`). The Spring-based message
|
(by using `<jee:jndi-lookup>`). The Spring-based message listeners can then interact with
|
||||||
listeners can then interact with the server-hosted `ResourceAdapter`, which also use the
|
the server-hosted `ResourceAdapter`, which also use the server's built-in `WorkManager`.
|
||||||
server's built-in `WorkManager`.
|
|
||||||
|
|
||||||
See the javadoc for {api-spring-framework}/jms/listener/endpoint/JmsMessageEndpointManager.html[`JmsMessageEndpointManager`],
|
See the javadoc for {api-spring-framework}/jms/listener/endpoint/JmsMessageEndpointManager.html[`JmsMessageEndpointManager`],
|
||||||
{api-spring-framework}/jms/listener/endpoint/JmsActivationSpecConfig.html[`JmsActivationSpecConfig`],
|
{api-spring-framework}/jms/listener/endpoint/JmsActivationSpecConfig.html[`JmsActivationSpecConfig`],
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2021 the original author or authors.
|
* Copyright 2002-2023 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -67,9 +67,9 @@ import org.springframework.util.Assert;
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* <p>The target ResourceAdapter may be configured as a local Spring bean as well
|
* <p>The target ResourceAdapter may be configured as a local Spring bean as well
|
||||||
* (the typical case) or obtained from JNDI (e.g. on WebLogic). For the
|
* (the typical case) or obtained from JNDI. For the example above, a local
|
||||||
* example above, a local ResourceAdapter bean could be defined as follows
|
* ResourceAdapter bean could be defined as follows (matching the "resourceAdapter"
|
||||||
* (matching the "resourceAdapter" bean reference above):
|
* bean reference above):
|
||||||
*
|
*
|
||||||
* <pre class="code">
|
* <pre class="code">
|
||||||
* <bean id="resourceAdapter" class="org.springframework.jca.support.ResourceAdapterFactoryBean">
|
* <bean id="resourceAdapter" class="org.springframework.jca.support.ResourceAdapterFactoryBean">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2022 the original author or authors.
|
* Copyright 2002-2023 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -265,7 +265,7 @@ public interface TransactionDefinition {
|
||||||
/**
|
/**
|
||||||
* Return the name of this transaction. Can be {@code null}.
|
* Return the name of this transaction. Can be {@code null}.
|
||||||
* <p>This will be used as the transaction name to be shown in a
|
* <p>This will be used as the transaction name to be shown in a
|
||||||
* transaction monitor, if applicable (for example, WebLogic's).
|
* transaction monitor, if applicable.
|
||||||
* <p>In case of Spring's declarative transactions, the exposed name will be
|
* <p>In case of Spring's declarative transactions, the exposed name will be
|
||||||
* the {@code fully-qualified class name + "." + method name} (by default).
|
* the {@code fully-qualified class name + "." + method name} (by default).
|
||||||
* @return the name of this transaction ({@code null} by default}
|
* @return the name of this transaction ({@code null} by default}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2022 the original author or authors.
|
* Copyright 2002-2023 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -67,16 +67,15 @@ public class SpringJtaSynchronizationAdapter implements Synchronization {
|
||||||
/**
|
/**
|
||||||
* Create a new SpringJtaSynchronizationAdapter for the given Spring
|
* Create a new SpringJtaSynchronizationAdapter for the given Spring
|
||||||
* TransactionSynchronization and JTA TransactionManager.
|
* TransactionSynchronization and JTA TransactionManager.
|
||||||
* <p>Note that this adapter will never perform a rollback-only call on WebLogic,
|
|
||||||
* since WebLogic Server is known to automatically mark the transaction as
|
|
||||||
* rollback-only in case of a {@code beforeCompletion} exception. Hence,
|
|
||||||
* on WLS, this constructor is equivalent to the single-arg constructor.
|
|
||||||
* @param springSynchronization the Spring TransactionSynchronization to delegate to
|
* @param springSynchronization the Spring TransactionSynchronization to delegate to
|
||||||
* @param jtaUserTransaction the JTA UserTransaction to use for rollback-only
|
* @param jtaUserTransaction the JTA UserTransaction to use for rollback-only
|
||||||
* setting in case of an exception thrown in {@code beforeCompletion}
|
* setting in case of an exception thrown in {@code beforeCompletion}
|
||||||
* (can be omitted if the JTA provider itself marks the transaction rollback-only
|
* @deprecated as of 6.0.12 since JTA 1.1+ requires implicit rollback-only setting
|
||||||
* in such a scenario, which is required by the JTA specification as of JTA 1.1).
|
* in case of an exception thrown in {@code beforeCompletion}, so the regular
|
||||||
|
* {@link #SpringJtaSynchronizationAdapter(TransactionSynchronization)} constructor
|
||||||
|
* is sufficient for all scenarios
|
||||||
*/
|
*/
|
||||||
|
@Deprecated(since = "6.0.12")
|
||||||
public SpringJtaSynchronizationAdapter(TransactionSynchronization springSynchronization,
|
public SpringJtaSynchronizationAdapter(TransactionSynchronization springSynchronization,
|
||||||
@Nullable UserTransaction jtaUserTransaction) {
|
@Nullable UserTransaction jtaUserTransaction) {
|
||||||
|
|
||||||
|
@ -87,21 +86,21 @@ public class SpringJtaSynchronizationAdapter implements Synchronization {
|
||||||
/**
|
/**
|
||||||
* Create a new SpringJtaSynchronizationAdapter for the given Spring
|
* Create a new SpringJtaSynchronizationAdapter for the given Spring
|
||||||
* TransactionSynchronization and JTA TransactionManager.
|
* TransactionSynchronization and JTA TransactionManager.
|
||||||
* <p>Note that this adapter will never perform a rollback-only call on WebLogic,
|
|
||||||
* since WebLogic Server is known to automatically mark the transaction as
|
|
||||||
* rollback-only in case of a {@code beforeCompletion} exception. Hence,
|
|
||||||
* on WLS, this constructor is equivalent to the single-arg constructor.
|
|
||||||
* @param springSynchronization the Spring TransactionSynchronization to delegate to
|
* @param springSynchronization the Spring TransactionSynchronization to delegate to
|
||||||
* @param jtaTransactionManager the JTA TransactionManager to use for rollback-only
|
* @param jtaTransactionManager the JTA TransactionManager to use for rollback-only
|
||||||
* setting in case of an exception thrown in {@code beforeCompletion}
|
* setting in case of an exception thrown in {@code beforeCompletion}
|
||||||
* (can be omitted if the JTA provider itself marks the transaction rollback-only
|
* @deprecated as of 6.0.12 since JTA 1.1+ requires implicit rollback-only setting
|
||||||
* in such a scenario, which is required by the JTA specification as of JTA 1.1)
|
* in case of an exception thrown in {@code beforeCompletion}, so the regular
|
||||||
|
* {@link #SpringJtaSynchronizationAdapter(TransactionSynchronization)} constructor
|
||||||
|
* is sufficient for all scenarios
|
||||||
*/
|
*/
|
||||||
public SpringJtaSynchronizationAdapter(
|
@Deprecated(since = "6.0.12")
|
||||||
TransactionSynchronization springSynchronization, @Nullable TransactionManager jtaTransactionManager) {
|
public SpringJtaSynchronizationAdapter(TransactionSynchronization springSynchronization,
|
||||||
|
@Nullable TransactionManager jtaTransactionManager) {
|
||||||
|
|
||||||
this(springSynchronization);
|
this(springSynchronization);
|
||||||
this.jtaTransaction = new UserTransactionAdapter(jtaTransactionManager);
|
this.jtaTransaction =
|
||||||
|
(jtaTransactionManager != null ? new UserTransactionAdapter(jtaTransactionManager) : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -358,10 +358,10 @@ public class TransactionSynchronizationManager {
|
||||||
* Return whether there currently is an actual transaction active.
|
* Return whether there currently is an actual transaction active.
|
||||||
* This indicates whether the current context is associated with an actual
|
* This indicates whether the current context is associated with an actual
|
||||||
* transaction rather than just with active transaction synchronization.
|
* transaction rather than just with active transaction synchronization.
|
||||||
* <p>To be called by resource management code that wants to discriminate
|
* <p>To be called by resource management code that wants to differentiate
|
||||||
* between active transaction synchronization (with or without backing
|
* between active transaction synchronization (with or without a backing
|
||||||
* resource transaction; also on PROPAGATION_SUPPORTS) and an actual
|
* resource transaction; also on PROPAGATION_SUPPORTS) and an actual
|
||||||
* transaction being active (with backing resource transaction;
|
* transaction being active (with a backing resource transaction;
|
||||||
* on PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW, etc).
|
* on PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW, etc).
|
||||||
* @see #isSynchronizationActive()
|
* @see #isSynchronizationActive()
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -426,10 +426,10 @@ public abstract class TransactionSynchronizationManager {
|
||||||
* Return whether there currently is an actual transaction active.
|
* Return whether there currently is an actual transaction active.
|
||||||
* This indicates whether the current thread is associated with an actual
|
* This indicates whether the current thread is associated with an actual
|
||||||
* transaction rather than just with active transaction synchronization.
|
* transaction rather than just with active transaction synchronization.
|
||||||
* <p>To be called by resource management code that wants to discriminate
|
* <p>To be called by resource management code that wants to differentiate
|
||||||
* between active transaction synchronization (with or without backing
|
* between active transaction synchronization (with or without a backing
|
||||||
* resource transaction; also on PROPAGATION_SUPPORTS) and an actual
|
* resource transaction; also on PROPAGATION_SUPPORTS) and an actual
|
||||||
* transaction being active (with backing resource transaction;
|
* transaction being active (with a backing resource transaction;
|
||||||
* on PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW, etc).
|
* on PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW, etc).
|
||||||
* @see #isSynchronizationActive()
|
* @see #isSynchronizationActive()
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -156,8 +156,6 @@
|
||||||
<xsd:documentation><![CDATA[
|
<xsd:documentation><![CDATA[
|
||||||
Creates a default JtaTransactionManager bean with name "transactionManager",
|
Creates a default JtaTransactionManager bean with name "transactionManager",
|
||||||
matching the default bean name expected by the "annotation-driven" tag.
|
matching the default bean name expected by the "annotation-driven" tag.
|
||||||
Automatically detects WebLogic and WebSphere: creating a WebLogicJtaTransactionManager
|
|
||||||
or WebSphereUowTransactionManager, respectively.
|
|
||||||
|
|
||||||
For customization needs, consider defining a JtaTransactionManager bean as a regular
|
For customization needs, consider defining a JtaTransactionManager bean as a regular
|
||||||
Spring bean definition with name "transactionManager", replacing this element.
|
Spring bean definition with name "transactionManager", replacing this element.
|
||||||
|
|
Loading…
Reference in New Issue