HHH-16515 - Add o.h.engine.transaction to nullness checking
Signed-off-by: Jan Schatteman <jschatte@redhat.com>
This commit is contained in:
parent
e7d0bd0955
commit
a3abac9065
|
@ -0,0 +1,9 @@
|
||||||
|
// Checkerframework stubs for java.lang
|
||||||
|
|
||||||
|
package java.lang.reflect;
|
||||||
|
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
|
public final class Method extends Executable {
|
||||||
|
void invoke(@Nullable Object obj, Object @Nullable ... args);
|
||||||
|
}
|
|
@ -525,7 +525,7 @@ checkerFramework {
|
||||||
extraJavacArgs = [
|
extraJavacArgs = [
|
||||||
'-AsuppressWarnings=initialization',
|
'-AsuppressWarnings=initialization',
|
||||||
"-Astubs=${project.rootDir}/checkerstubs",
|
"-Astubs=${project.rootDir}/checkerstubs",
|
||||||
'-AonlyDefs=^org\\.hibernate\\.(jpamodelgen|spi|pretty|stat|engine\\.profile|(action|context|bytecode)\\.spi)\\.'
|
'-AonlyDefs=^org\\.hibernate\\.(jpamodelgen|spi|pretty|stat|engine\\.(profile|transaction)|(action|context|bytecode)\\.spi)\\.'
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,8 @@ import org.hibernate.service.Service;
|
||||||
import org.hibernate.service.spi.ServiceInitiator;
|
import org.hibernate.service.spi.ServiceInitiator;
|
||||||
import org.hibernate.service.spi.ServiceRegistryImplementor;
|
import org.hibernate.service.spi.ServiceRegistryImplementor;
|
||||||
|
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contract for an initiator of services that target the standard {@link org.hibernate.service.ServiceRegistry}.
|
* Contract for an initiator of services that target the standard {@link org.hibernate.service.ServiceRegistry}.
|
||||||
*
|
*
|
||||||
|
@ -28,5 +30,5 @@ public interface StandardServiceInitiator<R extends Service> extends ServiceInit
|
||||||
*
|
*
|
||||||
* @return The initiated service.
|
* @return The initiated service.
|
||||||
*/
|
*/
|
||||||
R initiateService(Map<String, Object> configurationValues, ServiceRegistryImplementor registry);
|
@Nullable R initiateService(Map<String, Object> configurationValues, ServiceRegistryImplementor registry);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,8 @@ import java.util.concurrent.Callable;
|
||||||
|
|
||||||
import org.hibernate.service.Service;
|
import org.hibernate.service.Service;
|
||||||
|
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service which acts as a registry for named strategy implementations.
|
* Service which acts as a registry for named strategy implementations.
|
||||||
* <p>
|
* <p>
|
||||||
|
@ -79,7 +81,7 @@ public interface StrategySelector extends Service {
|
||||||
*
|
*
|
||||||
* @return The strategy instance
|
* @return The strategy instance
|
||||||
*/
|
*/
|
||||||
<T> T resolveStrategy(Class<T> strategy, Object strategyReference);
|
<T> T resolveStrategy(Class<T> strategy, @Nullable Object strategyReference);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolve strategy instances. The incoming reference might be:<ul>
|
* Resolve strategy instances. The incoming reference might be:<ul>
|
||||||
|
|
|
@ -15,7 +15,9 @@ import jakarta.transaction.UserTransaction;
|
||||||
|
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
import org.hibernate.engine.jndi.spi.JndiService;
|
import org.hibernate.engine.jndi.spi.JndiService;
|
||||||
|
import org.hibernate.engine.transaction.internal.jta.JtaStatusHelper;
|
||||||
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
|
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
|
||||||
|
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformException;
|
||||||
import org.hibernate.internal.util.config.ConfigurationHelper;
|
import org.hibernate.internal.util.config.ConfigurationHelper;
|
||||||
import org.hibernate.service.ServiceRegistry;
|
import org.hibernate.service.ServiceRegistry;
|
||||||
import org.hibernate.service.spi.Configurable;
|
import org.hibernate.service.spi.Configurable;
|
||||||
|
@ -31,13 +33,31 @@ public abstract class AbstractJtaPlatform
|
||||||
private boolean cacheUserTransaction;
|
private boolean cacheUserTransaction;
|
||||||
private ServiceRegistryImplementor serviceRegistry;
|
private ServiceRegistryImplementor serviceRegistry;
|
||||||
|
|
||||||
private final JtaSynchronizationStrategy tmSynchronizationStrategy = new TransactionManagerBasedSynchronizationStrategy( this );
|
private final JtaSynchronizationStrategy tmSynchronizationStrategy = new TransactionManagerBasedSynchronizationStrategy();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void injectServices(ServiceRegistryImplementor serviceRegistry) {
|
public void injectServices(ServiceRegistryImplementor serviceRegistry) {
|
||||||
this.serviceRegistry = serviceRegistry;
|
this.serviceRegistry = serviceRegistry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final class TransactionManagerBasedSynchronizationStrategy implements JtaSynchronizationStrategy {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerSynchronization(Synchronization synchronization) {
|
||||||
|
try {
|
||||||
|
AbstractJtaPlatform.this.getTransactionManager().getTransaction().registerSynchronization( synchronization );
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
throw new JtaPlatformException( "Could not access JTA Transaction to register synchronization", e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canRegisterSynchronization() {
|
||||||
|
return JtaStatusHelper.isActive( AbstractJtaPlatform.this.getTransactionManager() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected ServiceRegistry serviceRegistry() {
|
protected ServiceRegistry serviceRegistry() {
|
||||||
return serviceRegistry;
|
return serviceRegistry;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,8 @@ import org.hibernate.service.spi.ServiceRegistryImplementor;
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
|
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Standard initiator for the standard {@link JtaPlatform}
|
* Standard initiator for the standard {@link JtaPlatform}
|
||||||
*
|
*
|
||||||
|
@ -34,7 +36,7 @@ public class JtaPlatformInitiator implements StandardServiceInitiator<JtaPlatfor
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JtaPlatform initiateService(Map<String, Object> configurationValues, ServiceRegistryImplementor registry) {
|
public @Nullable JtaPlatform initiateService(Map<String, Object> configurationValues, ServiceRegistryImplementor registry) {
|
||||||
final Object setting = configurationValues.get( AvailableSettings.JTA_PLATFORM );
|
final Object setting = configurationValues.get( AvailableSettings.JTA_PLATFORM );
|
||||||
JtaPlatform platform = registry.getService( StrategySelector.class ).resolveStrategy( JtaPlatform.class, setting );
|
JtaPlatform platform = registry.getService( StrategySelector.class ).resolveStrategy( JtaPlatform.class, setting );
|
||||||
|
|
||||||
|
@ -57,7 +59,7 @@ public class JtaPlatformInitiator implements StandardServiceInitiator<JtaPlatfor
|
||||||
return platform;
|
return platform;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected JtaPlatform getFallbackProvider(Map<?,?> configurationValues, ServiceRegistryImplementor registry) {
|
protected @Nullable JtaPlatform getFallbackProvider(Map<?,?> configurationValues, ServiceRegistryImplementor registry) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,8 @@ import jakarta.transaction.Transaction;
|
||||||
import jakarta.transaction.TransactionManager;
|
import jakarta.transaction.TransactionManager;
|
||||||
import jakarta.transaction.UserTransaction;
|
import jakarta.transaction.UserTransaction;
|
||||||
|
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
|
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -24,17 +26,17 @@ public class NoJtaPlatform implements JtaPlatform {
|
||||||
public static final NoJtaPlatform INSTANCE = new NoJtaPlatform();
|
public static final NoJtaPlatform INSTANCE = new NoJtaPlatform();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TransactionManager retrieveTransactionManager() {
|
public @Nullable TransactionManager retrieveTransactionManager() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UserTransaction retrieveUserTransaction() {
|
public @Nullable UserTransaction retrieveUserTransaction() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getTransactionIdentifier(Transaction transaction) {
|
public @Nullable Object getTransactionIdentifier(Transaction transaction) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
|
||||||
*/
|
|
||||||
package org.hibernate.engine.transaction.jta.platform.internal;
|
|
||||||
|
|
||||||
import jakarta.transaction.Synchronization;
|
|
||||||
|
|
||||||
import org.hibernate.engine.transaction.internal.jta.JtaStatusHelper;
|
|
||||||
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementation of the {@link JtaSynchronizationStrategy} contract based on using a
|
|
||||||
* {@link jakarta.transaction.TransactionManager}
|
|
||||||
*
|
|
||||||
* @author Steve Ebersole
|
|
||||||
*/
|
|
||||||
public class TransactionManagerBasedSynchronizationStrategy implements JtaSynchronizationStrategy {
|
|
||||||
private final TransactionManagerAccess transactionManagerAccess;
|
|
||||||
|
|
||||||
public TransactionManagerBasedSynchronizationStrategy(TransactionManagerAccess transactionManagerAccess) {
|
|
||||||
this.transactionManagerAccess = transactionManagerAccess;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerSynchronization(Synchronization synchronization) {
|
|
||||||
try {
|
|
||||||
transactionManagerAccess.getTransactionManager().getTransaction().registerSynchronization( synchronization );
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
throw new JtaPlatformException( "Could not access JTA Transaction to register synchronization", e );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canRegisterSynchronization() {
|
|
||||||
return JtaStatusHelper.isActive( transactionManagerAccess.getTransactionManager() );
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -17,6 +17,9 @@ import jakarta.transaction.SystemException;
|
||||||
import jakarta.transaction.Transaction;
|
import jakarta.transaction.Transaction;
|
||||||
import jakarta.transaction.TransactionManager;
|
import jakarta.transaction.TransactionManager;
|
||||||
import jakarta.transaction.UserTransaction;
|
import jakarta.transaction.UserTransaction;
|
||||||
|
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
import javax.transaction.xa.XAResource;
|
import javax.transaction.xa.XAResource;
|
||||||
|
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
|
@ -147,7 +150,7 @@ public class WebSphereExtendedJtaPlatform extends AbstractJtaPlatform {
|
||||||
final InvocationHandler ih = new InvocationHandler() {
|
final InvocationHandler ih = new InvocationHandler() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
public @Nullable Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
||||||
if ( "afterCompletion".equals( method.getName() ) ) {
|
if ( "afterCompletion".equals( method.getName() ) ) {
|
||||||
int status = args[2].equals(Boolean.TRUE) ?
|
int status = args[2].equals(Boolean.TRUE) ?
|
||||||
Status.STATUS_COMMITTED :
|
Status.STATUS_COMMITTED :
|
||||||
|
@ -186,7 +189,7 @@ public class WebSphereExtendedJtaPlatform extends AbstractJtaPlatform {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object other) {
|
public boolean equals(@Nullable Object other) {
|
||||||
if ( !(other instanceof TransactionAdapter) ) {
|
if ( !(other instanceof TransactionAdapter) ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,8 +9,10 @@ package org.hibernate.engine.transaction.jta.platform.internal;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import jakarta.transaction.TransactionManager;
|
import jakarta.transaction.TransactionManager;
|
||||||
import jakarta.transaction.UserTransaction;
|
import jakarta.transaction.UserTransaction;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformException;
|
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformException;
|
||||||
|
import org.hibernate.internal.util.NullnessUtil;
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
|
|
||||||
|
@ -46,7 +48,7 @@ public class WebSphereJtaPlatform extends AbstractJtaPlatform {
|
||||||
throw new JtaPlatformException( "Could not locate WebSphere TransactionManager access class" );
|
throw new JtaPlatformException( "Could not locate WebSphere TransactionManager access class" );
|
||||||
}
|
}
|
||||||
|
|
||||||
this.transactionManagerAccessClass = tmAccessClass;
|
this.transactionManagerAccessClass = NullnessUtil.castNonNull( tmAccessClass );
|
||||||
this.webSphereEnvironment = webSphereEnvironment;
|
this.webSphereEnvironment = webSphereEnvironment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +58,7 @@ public class WebSphereJtaPlatform extends AbstractJtaPlatform {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings({"unchecked"})
|
||||||
protected TransactionManager locateTransactionManager() {
|
protected TransactionManager locateTransactionManager() {
|
||||||
try {
|
try {
|
||||||
final Method method = transactionManagerAccessClass.getMethod( "getTransactionManager" );
|
final Method method = transactionManagerAccessClass.getMethod( "getTransactionManager" );
|
||||||
|
|
|
@ -16,6 +16,7 @@ import jakarta.transaction.UserTransaction;
|
||||||
|
|
||||||
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
||||||
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformException;
|
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformException;
|
||||||
|
import org.hibernate.internal.util.NullnessUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JTA platform implementation intended for use with WebSphere Liberty and OpenLiberty
|
* JTA platform implementation intended for use with WebSphere Liberty and OpenLiberty
|
||||||
|
@ -48,6 +49,7 @@ public class WebSphereLibertyJtaPlatform extends AbstractJtaPlatform {
|
||||||
return (UserTransaction) jndiService().locate( UT_NAME );
|
return (UserTransaction) jndiService().locate( UT_NAME );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean canRegisterSynchronization() {
|
public boolean canRegisterSynchronization() {
|
||||||
try {
|
try {
|
||||||
return getCurrentStatus() == Status.STATUS_ACTIVE;
|
return getCurrentStatus() == Status.STATUS_ACTIVE;
|
||||||
|
@ -57,17 +59,20 @@ public class WebSphereLibertyJtaPlatform extends AbstractJtaPlatform {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getCurrentStatus() throws SystemException {
|
public int getCurrentStatus() throws SystemException {
|
||||||
return retrieveTransactionManager().getStatus();
|
return NullnessUtil.castNonNull( retrieveTransactionManager() ).getStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Object getTransactionIdentifier(Transaction transaction) {
|
public Object getTransactionIdentifier(Transaction transaction) {
|
||||||
return transaction;
|
return transaction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void registerSynchronization(Synchronization synchronization) {
|
public void registerSynchronization(Synchronization synchronization) {
|
||||||
try {
|
try {
|
||||||
retrieveTransactionManager().getTransaction().registerSynchronization(synchronization);
|
NullnessUtil.castNonNull( retrieveTransactionManager() ).getTransaction().registerSynchronization(synchronization);
|
||||||
}
|
}
|
||||||
catch ( RollbackException | SystemException x ) {
|
catch ( RollbackException | SystemException x ) {
|
||||||
throw new RuntimeException(x);
|
throw new RuntimeException(x);
|
||||||
|
|
|
@ -11,6 +11,7 @@ import jakarta.transaction.SystemException;
|
||||||
import jakarta.transaction.Transaction;
|
import jakarta.transaction.Transaction;
|
||||||
import jakarta.transaction.TransactionManager;
|
import jakarta.transaction.TransactionManager;
|
||||||
import jakarta.transaction.UserTransaction;
|
import jakarta.transaction.UserTransaction;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
import org.hibernate.service.Service;
|
import org.hibernate.service.Service;
|
||||||
|
|
||||||
|
@ -37,7 +38,7 @@ public interface JtaPlatform extends Service {
|
||||||
*
|
*
|
||||||
* @return The {@link TransactionManager}
|
* @return The {@link TransactionManager}
|
||||||
*/
|
*/
|
||||||
TransactionManager retrieveTransactionManager();
|
@Nullable TransactionManager retrieveTransactionManager();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Locate the {@link UserTransaction}.
|
* Locate the {@link UserTransaction}.
|
||||||
|
@ -48,7 +49,7 @@ public interface JtaPlatform extends Service {
|
||||||
*
|
*
|
||||||
* @return The {@link UserTransaction}
|
* @return The {@link UserTransaction}
|
||||||
*/
|
*/
|
||||||
UserTransaction retrieveUserTransaction();
|
@Nullable UserTransaction retrieveUserTransaction();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine an identifier for the given transaction appropriate for use in caching/lookup usages.
|
* Determine an identifier for the given transaction appropriate for use in caching/lookup usages.
|
||||||
|
@ -59,7 +60,7 @@ public interface JtaPlatform extends Service {
|
||||||
* @param transaction The transaction to be identified.
|
* @param transaction The transaction to be identified.
|
||||||
* @return An appropriate identifier
|
* @return An appropriate identifier
|
||||||
*/
|
*/
|
||||||
Object getTransactionIdentifier(Transaction transaction);
|
@Nullable Object getTransactionIdentifier(Transaction transaction);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Can we currently register a {@link Synchronization}?
|
* Can we currently register a {@link Synchronization}?
|
||||||
|
|
|
@ -12,6 +12,7 @@ import jakarta.transaction.SystemException;
|
||||||
import jakarta.transaction.Transaction;
|
import jakarta.transaction.Transaction;
|
||||||
import jakarta.transaction.TransactionManager;
|
import jakarta.transaction.TransactionManager;
|
||||||
import jakarta.transaction.UserTransaction;
|
import jakarta.transaction.UserTransaction;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
|
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
|
||||||
|
|
||||||
|
@ -28,7 +29,7 @@ public class JtaPlatformInaccessibleImpl implements JtaPlatform {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TransactionManager retrieveTransactionManager() {
|
public @Nullable TransactionManager retrieveTransactionManager() {
|
||||||
if ( preferExceptions ) {
|
if ( preferExceptions ) {
|
||||||
throw new JtaPlatformInaccessibleException();
|
throw new JtaPlatformInaccessibleException();
|
||||||
}
|
}
|
||||||
|
@ -36,7 +37,7 @@ public class JtaPlatformInaccessibleImpl implements JtaPlatform {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UserTransaction retrieveUserTransaction() {
|
public @Nullable UserTransaction retrieveUserTransaction() {
|
||||||
if ( preferExceptions ) {
|
if ( preferExceptions ) {
|
||||||
throw new JtaPlatformInaccessibleException();
|
throw new JtaPlatformInaccessibleException();
|
||||||
}
|
}
|
||||||
|
@ -44,7 +45,7 @@ public class JtaPlatformInaccessibleImpl implements JtaPlatform {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getTransactionIdentifier(Transaction transaction) {
|
public @Nullable Object getTransactionIdentifier(Transaction transaction) {
|
||||||
if ( preferExceptions ) {
|
if ( preferExceptions ) {
|
||||||
throw new JtaPlatformInaccessibleException();
|
throw new JtaPlatformInaccessibleException();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue