mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-28 06:49:09 +00:00
HHH-13565 Promote to FastSessionServices: isJtaTransactionAccessible
This commit is contained in:
parent
8931ef0962
commit
be9fe27592
@ -407,7 +407,7 @@ public void checkTransactionNeededForUpdateOperation(String exceptionMessage) {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Transaction getTransaction() throws HibernateException {
|
public Transaction getTransaction() throws HibernateException {
|
||||||
if ( !isTransactionAccessible() ) {
|
if ( ! fastSessionServices.isJtaTransactionAccessible ) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Transaction is not accessible when using JTA with JPA-compliant transaction access enabled"
|
"Transaction is not accessible when using JTA with JPA-compliant transaction access enabled"
|
||||||
);
|
);
|
||||||
@ -415,17 +415,6 @@ public Transaction getTransaction() throws HibernateException {
|
|||||||
return accessTransaction();
|
return accessTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean isTransactionAccessible() {
|
|
||||||
// JPA requires that access not be provided to the transaction when using JTA.
|
|
||||||
// This is overridden when SessionFactoryOptions isJtaTransactionAccessEnabled() is true.
|
|
||||||
if ( getFactory().getSessionFactoryOptions().getJpaCompliance().isJpaTransactionComplianceEnabled() &&
|
|
||||||
getTransactionCoordinator().getTransactionCoordinatorBuilder().isJta() &&
|
|
||||||
!getFactory().getSessionFactoryOptions().isJtaTransactionAccessEnabled() ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Transaction accessTransaction() {
|
public Transaction accessTransaction() {
|
||||||
if ( this.currentHibernateTransaction == null ) {
|
if ( this.currentHibernateTransaction == null ) {
|
||||||
|
@ -87,6 +87,7 @@ final class FastSessionServices {
|
|||||||
final ClassLoaderService classLoaderService;
|
final ClassLoaderService classLoaderService;
|
||||||
final TransactionCoordinatorBuilder transactionCoordinatorBuilder;
|
final TransactionCoordinatorBuilder transactionCoordinatorBuilder;
|
||||||
final JdbcServices jdbcServices;
|
final JdbcServices jdbcServices;
|
||||||
|
final boolean isJtaTransactionAccessible;
|
||||||
|
|
||||||
//Private fields:
|
//Private fields:
|
||||||
private final Dialect dialect;
|
private final Dialect dialect;
|
||||||
@ -120,9 +121,8 @@ final class FastSessionServices {
|
|||||||
//Other highly useful constants:
|
//Other highly useful constants:
|
||||||
this.dialect = jdbcServices.getJdbcEnvironment().getDialect();
|
this.dialect = jdbcServices.getJdbcEnvironment().getDialect();
|
||||||
this.disallowOutOfTransactionUpdateOperations = !sf.getSessionFactoryOptions().isAllowOutOfTransactionUpdateOperations();
|
this.disallowOutOfTransactionUpdateOperations = !sf.getSessionFactoryOptions().isAllowOutOfTransactionUpdateOperations();
|
||||||
this.useStreamForLobBinding = Environment.useStreamsForBinary()
|
this.useStreamForLobBinding = Environment.useStreamsForBinary() || dialect.useInputStreamToInsertBlob();
|
||||||
|| dialect.useInputStreamToInsertBlob();
|
this.requiresMultiTenantConnectionProvider = sf.getSettings().getMultiTenancyStrategy().requiresMultiTenantConnectionProvider();
|
||||||
this.requiresMultiTenantConnectionProvider = sf.getSettings().getMultiTenancyStrategy().requiresMultiTenantConnectionProvider();
|
|
||||||
|
|
||||||
//Some "hot" services:
|
//Some "hot" services:
|
||||||
this.connectionProvider = requiresMultiTenantConnectionProvider ? null : sr.getService( ConnectionProvider.class );
|
this.connectionProvider = requiresMultiTenantConnectionProvider ? null : sr.getService( ConnectionProvider.class );
|
||||||
@ -130,6 +130,8 @@ final class FastSessionServices {
|
|||||||
this.classLoaderService = sr.getService( ClassLoaderService.class );
|
this.classLoaderService = sr.getService( ClassLoaderService.class );
|
||||||
this.transactionCoordinatorBuilder = sr.getService( TransactionCoordinatorBuilder.class );
|
this.transactionCoordinatorBuilder = sr.getService( TransactionCoordinatorBuilder.class );
|
||||||
this.jdbcServices = sr.getService( JdbcServices.class );
|
this.jdbcServices = sr.getService( JdbcServices.class );
|
||||||
|
|
||||||
|
this.isJtaTransactionAccessible = isTransactionAccessible( sf, transactionCoordinatorBuilder );
|
||||||
}
|
}
|
||||||
|
|
||||||
Iterable<ClearEventListener> getClearEventListeners() {
|
Iterable<ClearEventListener> getClearEventListeners() {
|
||||||
@ -217,4 +219,15 @@ SqlTypeDescriptor remapSqlTypeDescriptor(SqlTypeDescriptor sqlTypeDescriptor) {
|
|||||||
return remapped == null ? sqlTypeDescriptor : remapped;
|
return remapped == null ? sqlTypeDescriptor : remapped;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isTransactionAccessible(SessionFactoryImpl sf, TransactionCoordinatorBuilder transactionCoordinatorBuilder) {
|
||||||
|
// JPA requires that access not be provided to the transaction when using JTA.
|
||||||
|
// This is overridden when SessionFactoryOptions isJtaTransactionAccessEnabled() is true.
|
||||||
|
if ( sf.getSessionFactoryOptions().getJpaCompliance().isJpaTransactionComplianceEnabled() &&
|
||||||
|
transactionCoordinatorBuilder.isJta() &&
|
||||||
|
!sf.getSessionFactoryOptions().isJtaTransactionAccessEnabled() ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2493,7 +2493,7 @@ private Transaction getTransactionIfAccessible() {
|
|||||||
// We do not want an exception to be thrown if the transaction
|
// We do not want an exception to be thrown if the transaction
|
||||||
// is not accessible. If the transaction is not accessible,
|
// is not accessible. If the transaction is not accessible,
|
||||||
// then return null.
|
// then return null.
|
||||||
return isTransactionAccessible() ? accessTransaction() : null;
|
return fastSessionServices.isJtaTransactionAccessible ? accessTransaction() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user