-
Notifications
You must be signed in to change notification settings - Fork 109
Closed
Milestone
Description
Missing method:
org.hibernate.resource.transaction.spi.TransactionCoordinator.isJta()
Here's a patch to fix it that is guaranteed to be future-compatible because it asks through JPA, not the Hibernate-only APIs.
diff --git a/hibernate5/src/main/java/com/fasterxml/jackson/datatype/hibernate5/PersistentCollectionSerializer.java b/hibernate5/src/main/java/com/fasterxml/jackson/datatype/hibernate5/PersistentCollectionSerializer.java
index 56302b7..79866c5 100644
--- a/hibernate5/src/main/java/com/fasterxml/jackson/datatype/hibernate5/PersistentCollectionSerializer.java
+++ b/hibernate5/src/main/java/com/fasterxml/jackson/datatype/hibernate5/PersistentCollectionSerializer.java
@@ -463,12 +463,12 @@ public class PersistentCollectionSerializer
public static boolean isJTA(Session session) {
try {
- Object transactionCoordinator = getTransactionCoordinatorMethod.invoke(session);
- Object transactionCoordinatorBuilder = getTransactionCoordinatorBuilderMethod.invoke(transactionCoordinator);
- return (boolean) isJtaMethod.invoke(transactionCoordinatorBuilder);
- } catch (Exception e) {
- // Should never happen
- throw new RuntimeException(e);
+ EntityManager em = (EntityManager) session;
+ em.getTransaction();
+ return false;
+ } catch (IllegalStateException e) {
+ // EntityManager is required to throw an IllegalStateException if it's JTA-managed
+ return true;
}
}
}
You can actually remove everything else from the SessionReader
static class.
Here's the Javadoc comment from the JPA specifications.
/**
* Return the resource-level <code>EntityTransaction</code> object.
* The <code>EntityTransaction</code> instance may be used serially to
* begin and commit multiple transactions.
* @return EntityTransaction instance
* @throws IllegalStateException if invoked on a JTA
* entity manager
*/
public EntityTransaction getTransaction();
Metadata
Metadata
Assignees
Labels
No labels