Skip to content

Commit

Permalink
Merge pull request #23668 from arjantijms/jta_clean
Browse files Browse the repository at this point in the history
Small amount of cleaning for JTA code
  • Loading branch information
hs536 authored Oct 21, 2021
2 parents 3d1eac3 + bca08e2 commit 689b2a5
Show file tree
Hide file tree
Showing 14 changed files with 1,289 additions and 1,366 deletions.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/*
* Copyright (c) 2021 Contributors to the Eclipse Foundation
* Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
Expand All @@ -16,241 +17,261 @@

package com.sun.enterprise.transaction;

import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.concurrent.Semaphore;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.logging.Level;
import java.util.logging.Logger;

import jakarta.transaction.*;
import javax.transaction.xa.*;
import jakarta.resource.spi.XATerminator;
import jakarta.resource.spi.work.WorkException;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;

import org.glassfish.hk2.api.PostConstruct;
import org.jvnet.hk2.annotations.Service;

import com.sun.enterprise.transaction.api.JavaEETransaction;
import com.sun.enterprise.transaction.api.JavaEETransactionManager;
import com.sun.enterprise.transaction.api.TransactionAdminBean;
import com.sun.enterprise.transaction.api.XAResourceWrapper;
import com.sun.enterprise.transaction.spi.JavaEETransactionManagerDelegate;
import com.sun.enterprise.transaction.spi.TransactionalResource;
import com.sun.enterprise.transaction.spi.TransactionInternal;

import com.sun.enterprise.transaction.spi.TransactionalResource;
import com.sun.enterprise.util.i18n.StringManager;

import org.jvnet.hk2.annotations.Service;
import org.glassfish.hk2.api.PostConstruct;
import jakarta.resource.spi.XATerminator;
import jakarta.resource.spi.work.WorkException;
import jakarta.transaction.HeuristicMixedException;
import jakarta.transaction.HeuristicRollbackException;
import jakarta.transaction.InvalidTransactionException;
import jakarta.transaction.RollbackException;
import jakarta.transaction.SystemException;
import jakarta.transaction.Transaction;

/**
** Implementation of JavaEETransactionManagerDelegate that supports only
* local transactions with a single non-XA resource.
** Implementation of JavaEETransactionManagerDelegate that supports only local transactions with a single non-XA
* resource.
*
* @author Marina Vatkina
*/
@Service
public class JavaEETransactionManagerSimplifiedDelegate
implements JavaEETransactionManagerDelegate, PostConstruct {
public class JavaEETransactionManagerSimplifiedDelegate implements JavaEETransactionManagerDelegate, PostConstruct {

// @Inject
private JavaEETransactionManager tm;

// Sting Manager for Localization
private static StringManager sm
= StringManager.getManager(JavaEETransactionManagerSimplified.class);
private static StringManager sm = StringManager.getManager(JavaEETransactionManagerSimplified.class);

private Logger _logger;

private boolean lao = false;
private boolean lao;

private static final ReentrantReadWriteLock.ReadLock readLock =
new ReentrantReadWriteLock().readLock();
private static final ReentrantReadWriteLock.ReadLock readLock = new ReentrantReadWriteLock().readLock();

private final Semaphore writeLock = new Semaphore(1, true);

public JavaEETransactionManagerSimplifiedDelegate() {
}

@Override
public void postConstruct() {
// tm.setDelegate(this);
}

@Override
public boolean useLAO() {
return lao;
return lao;
}

@Override
public void setUseLAO(boolean b) {
lao = b;
}

/** Throws an exception if called as it means that there is
* no active local transaction to commit.
/**
* Throws an exception if called as it means that there is no active local transaction to commit.
*/
public void commitDistributedTransaction() throws
RollbackException, HeuristicMixedException,
HeuristicRollbackException, SecurityException,
IllegalStateException, SystemException {

throw new IllegalStateException(sm.getString(
"enterprise_distributedtx.transaction_notactive"));
@Override
public void commitDistributedTransaction() throws RollbackException, HeuristicMixedException, HeuristicRollbackException, SecurityException, IllegalStateException, SystemException {
throw new IllegalStateException(sm.getString("enterprise_distributedtx.transaction_notactive"));
}

/** Throws an exception if called as it means that there is
* no active local transaction to rollback.
/**
* Throws an exception if called as it means that there is no active local transaction to rollback.
*/
public void rollbackDistributedTransaction() throws IllegalStateException,
SecurityException, SystemException {

throw new IllegalStateException(sm.getString(
"enterprise_distributedtx.transaction_notactive"));
@Override
public void rollbackDistributedTransaction() throws IllegalStateException, SecurityException, SystemException {
throw new IllegalStateException(sm.getString("enterprise_distributedtx.transaction_notactive"));
}

@Override
public int getStatus() throws SystemException {
JavaEETransaction tx = tm.getCurrentTransaction();
if ( tx != null && tx.isLocalTx())
if (tx != null && tx.isLocalTx())
return tx.getStatus();
else
return jakarta.transaction.Status.STATUS_NO_TRANSACTION;
}

@Override
public Transaction getTransaction() throws SystemException {
return tm.getCurrentTransaction();
return tm.getCurrentTransaction();
}

@Override
public JavaEETransaction getJavaEETransaction(Transaction t) {
if(t instanceof JavaEETransaction){
return (JavaEETransaction)t;
if (t instanceof JavaEETransaction) {
return (JavaEETransaction) t;
}

throw new IllegalStateException(sm.getString("enterprise_distributedtx.nonxa_usein_jts"));

}

public boolean enlistDistributedNonXAResource(Transaction tran, TransactionalResource h)
throws RollbackException, IllegalStateException, SystemException {
@Override
public boolean enlistDistributedNonXAResource(Transaction tran, TransactionalResource h) throws RollbackException, IllegalStateException, SystemException {
throw new IllegalStateException(sm.getString("enterprise_distributedtx.nonxa_usein_jts"));
}

public boolean enlistLAOResource(Transaction tran, TransactionalResource h)
throws RollbackException, IllegalStateException, SystemException {

@Override
public boolean enlistLAOResource(Transaction tran, TransactionalResource h) throws RollbackException, IllegalStateException, SystemException {
return false;
}

/** Throws an exception if called as it means that there is
* no active local transaction.
/**
* Throws an exception if called as it means that there is no active local transaction.
*/
public void setRollbackOnlyDistributedTransaction()
throws IllegalStateException, SystemException {

throw new IllegalStateException(sm.getString(
"enterprise_distributedtx.transaction_notactive"));
@Override
public void setRollbackOnlyDistributedTransaction() throws IllegalStateException, SystemException {
throw new IllegalStateException(sm.getString("enterprise_distributedtx.transaction_notactive"));
}

@Override
public Transaction suspend(JavaEETransaction tx) throws SystemException {
if ( tx != null ) {
if (tx != null) {
tm.setCurrentTransaction(null);
}

return tx;
}

public void resume(Transaction tx)
throws InvalidTransactionException, IllegalStateException,
SystemException {
@Override
public void resume(Transaction tx) throws InvalidTransactionException, IllegalStateException, SystemException {
/** XXX Throw an exception ??? The process should happen in the caller. XXX **/
}

public void removeTransaction(Transaction tx) {}
@Override
public void removeTransaction(Transaction tx) {
}

@Override
public int getOrder() {
return 1;
}

@Override
public void setTransactionManager(JavaEETransactionManager tm) {
this.tm = (JavaEETransactionManagerSimplified)tm;
_logger = ((JavaEETransactionManagerSimplified)tm).getLogger();
this.tm = tm;
_logger = ((JavaEETransactionManagerSimplified) tm).getLogger();
}

public TransactionInternal startJTSTx(JavaEETransaction t, boolean isAssociatedTimeout)
throws RollbackException, IllegalStateException, SystemException {
@Override
public TransactionInternal startJTSTx(JavaEETransaction t, boolean isAssociatedTimeout) throws RollbackException, IllegalStateException, SystemException {
throw new UnsupportedOperationException("startJTSTx");
}

@Override
public boolean supportsXAResource() {
return false;
}

@Override
public void initRecovery(boolean force) {
// No-op. Always called on server startup
}

@Override
public void recover(XAResource[] resourceList) {
throw new UnsupportedOperationException("recover");
}

@Override
public XATerminator getXATerminator() {
throw new UnsupportedOperationException("getXATerminator");
}

@Override
public void release(Xid xid) throws WorkException {
throw new UnsupportedOperationException("release");
}

@Override
public void recreate(Xid xid, long timeout) throws WorkException {
throw new UnsupportedOperationException("recreate");
}

public boolean recoverIncompleteTx(boolean delegated, String logPath,
XAResource[] xaresArray) throws Exception {
@Override
public boolean recoverIncompleteTx(boolean delegated, String logPath, XAResource[] xaresArray) throws Exception {
throw new UnsupportedOperationException("recoverIncompleteTx");
}


@Override
public XAResourceWrapper getXAResourceWrapper(String clName) {
return null;
}

public void handlePropertyUpdate(String name, Object value) {}
@Override
public void handlePropertyUpdate(String name, Object value) {
}

@Override
public Lock getReadLock() {
return readLock;
}

@Override
public boolean isWriteLocked() {
return (writeLock.availablePermits() == 0);
}

@Override
public void acquireWriteLock() {
try {
writeLock.acquire();
} catch(InterruptedException ie) {
_logger.log(Level.FINE,"Error in acquireReadLock",ie);
} catch (InterruptedException ie) {
_logger.log(Level.FINE, "Error in acquireReadLock", ie);
}
}

@Override
public void releaseWriteLock() {
writeLock.release();
}

/**
* Return false as this delegate doesn't support tx interop.
*/
@Override
public boolean isNullTransaction() {
return false;
}

public TransactionAdminBean getTransactionAdminBean(Transaction tran)
throws jakarta.transaction.SystemException {
return ((JavaEETransactionManagerSimplified)tm).getTransactionAdminBean(tran);
@Override
public TransactionAdminBean getTransactionAdminBean(Transaction tran) throws jakarta.transaction.SystemException {
return ((JavaEETransactionManagerSimplified) tm).getTransactionAdminBean(tran);
}

/** {@inheritDoc}
*/
/**
* {@inheritDoc}
*/
@Override
public String getTxLogLocation() {
throw new UnsupportedOperationException("getTxLogLocation");
}

/** {@inheritDoc}
*/
/**
* {@inheritDoc}
*/
@Override
public void registerRecoveryResourceHandler(XAResource xaResource) {
throw new UnsupportedOperationException("registerRecoveryResourceHandler");
}
Expand Down
Loading

0 comments on commit 689b2a5

Please sign in to comment.