/**
  * Set the Spring {@link JtaTransactionManager} or the JTA {@link TransactionManager} to be used
  * with Hibernate, if any. Allows for using a Spring-managed transaction manager for Hibernate 4's
  * session and cache synchronization, with the "hibernate.transaction.jta.platform" automatically
  * set to it. Also sets "hibernate.transaction.factory_class" to {@link CMTTransactionFactory},
  * instructing Hibernate to interact with externally managed transactions.
  *
  * <p>A passed-in Spring {@link JtaTransactionManager} needs to contain a JTA {@link
  * TransactionManager} reference to be usable here, except for the WebSphere case where we'll
  * automatically set {@code WebSphereExtendedJtaPlatform} accordingly.
  *
  * <p>Note: If this is set, the Hibernate settings should not contain a JTA platform setting to
  * avoid meaningless double configuration.
  */
 public LocalSessionFactoryBuilder setJtaTransactionManager(Object jtaTransactionManager) {
   Assert.notNull(jtaTransactionManager, "Transaction manager reference must not be null");
   if (jtaTransactionManager instanceof JtaTransactionManager) {
     boolean webspherePresent =
         ClassUtils.isPresent("com.ibm.wsspi.uow.UOWManager", getClass().getClassLoader());
     if (webspherePresent) {
       getProperties()
           .put(
               AvailableSettings.JTA_PLATFORM,
               ConfigurableJtaPlatform.getJtaPlatformBasePackage()
                   + "internal.WebSphereExtendedJtaPlatform");
     } else {
       JtaTransactionManager jtaTm = (JtaTransactionManager) jtaTransactionManager;
       if (jtaTm.getTransactionManager() == null) {
         throw new IllegalArgumentException(
             "Can only apply JtaTransactionManager which has a TransactionManager reference set");
       }
       getProperties()
           .put(
               AvailableSettings.JTA_PLATFORM,
               new ConfigurableJtaPlatform(
                       jtaTm.getTransactionManager(),
                       jtaTm.getUserTransaction(),
                       jtaTm.getTransactionSynchronizationRegistry())
                   .getJtaPlatformProxy());
     }
   } else if (jtaTransactionManager instanceof TransactionManager) {
     getProperties()
         .put(
             AvailableSettings.JTA_PLATFORM,
             new ConfigurableJtaPlatform((TransactionManager) jtaTransactionManager, null, null)
                 .getJtaPlatformProxy());
   } else {
     throw new IllegalArgumentException(
         "Unknown transaction manager type: " + jtaTransactionManager.getClass().getName());
   }
   getProperties().put(AvailableSettings.TRANSACTION_STRATEGY, new CMTTransactionFactory());
   return this;
 }