예제 #1
0
 private Transaction getCurrentTransaction() throws SystemException {
   Transaction transaction = transactionManagerLookup.getTransactionManager().getTransaction();
   if (transaction == null) {
     throw new TransactionException("JTA transaction not started");
   }
   return transaction;
 }
예제 #2
0
  /**
   * Constructor
   *
   * @param transactionManagerLookup the transaction manager lookup implementation
   * @param softLockManager the soft lock manager
   * @param transactionIdFactory the transaction ID factory
   * @param cache the cache
   * @param store the underlying store
   * @param copyStrategy the original copy strategy
   */
  public XATransactionStore(
      TransactionManagerLookup transactionManagerLookup,
      SoftLockManager softLockManager,
      TransactionIDFactory transactionIdFactory,
      Ehcache cache,
      Store store,
      ReadWriteCopyStrategy<Element> copyStrategy) {
    super(store, copyStrategy);
    this.transactionManagerLookup = transactionManagerLookup;
    this.transactionIdFactory = transactionIdFactory;
    if (transactionManagerLookup.getTransactionManager() == null) {
      throw new TransactionException(
          "no JTA transaction manager could be located, cannot bind twopc cache with JTA");
    }
    this.softLockManager = softLockManager;
    this.cache = cache;

    // this xaresource is for initial registration and recovery
    this.recoveryResource =
        new EhcacheXAResourceImpl(
            cache,
            underlyingStore,
            transactionManagerLookup,
            softLockManager,
            transactionIdFactory,
            copyStrategy,
            commitObserver,
            rollbackObserver,
            recoveryObserver);
    transactionManagerLookup.register(recoveryResource, true);
  }
예제 #3
0
  /** {@inheritDoc} */
  public int getTerracottaClusteredSize() {
    try {
      Transaction transaction = transactionManagerLookup.getTransactionManager().getTransaction();
      if (transaction == null) {
        return underlyingStore.getTerracottaClusteredSize();
      }
    } catch (SystemException se) {
      throw new TransactionException("cannot get the current transaction", se);
    }

    LOG.debug("cache {} getTerracottaClusteredSize", cache.getName());
    XATransactionContext context = getOrCreateTransactionContext();
    int size = underlyingStore.getTerracottaClusteredSize();
    return size + context.getSizeModifier();
  }