/**
* Created on Mar 12, 2006
*
* $Id$
* $Revision$
*/
package org.springmodules.jini;
import java.rmi.RemoteException;
import net.jini.core.entry.UnusableEntryException;
import net.jini.core.lease.LeaseException;
import net.jini.core.transaction.Transaction;
import net.jini.core.transaction.TransactionException;
import org.springframework.core.NestedRuntimeException;
import org.springframework.dao.DataAccessException;
import org.springframework.remoting.RemoteAccessException;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springmodules.transaction.jini.JiniTransactionManager.JiniHolder;
/**
* @author Costin Leau
*
*/
public abstract class JiniUtils {
public static RuntimeException convertJiniException(RemoteException remoteException) {
return null;
}
public static RuntimeException convertJiniException(Exception exception) {
if (exception instanceof LeaseException)
return new RemoteAccessException("Lease denied", exception);
if (exception instanceof TransactionException)
return new org.springframework.transaction.TransactionSystemException(exception.getMessage(),
exception);
if (exception instanceof RemoteException) {
// Translate to Spring's unchecked remote access exception
return new RemoteAccessException("RemoteException", exception);
}
if (exception instanceof UnusableEntryException) {
return new RemoteAccessException("Unusable entry", exception);
}
if (exception instanceof RuntimeException)
return (RuntimeException) exception;
return new DataAccessException("unexpected exception ", exception) {
};
}
/**
* Returns the running transaction for the given transactionalContext. If no
* transaction is binded, null is returned.
*
* @param transactionalContext
* @return
*/
public static Transaction getTransaction(Object transactionalContext) {
if (transactionalContext == null)
return null;
JiniHolder txObject = (JiniHolder) TransactionSynchronizationManager.getResource(transactionalContext);
if (txObject != null && txObject.getTxCreated() != null)
return txObject.getTxCreated().transaction;
return null;
}
}