/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.tck.testmodels.mule;
import org.mule.runtime.core.api.config.MuleConfiguration;
import org.mule.runtime.core.api.transaction.TransactionManagerFactory;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Map;
import javax.transaction.TransactionManager;
/**
* Provides a transaction factory for testing purposes
*/
public class TestTransactionManagerFactory implements TransactionManagerFactory {
private Map<Object, Object> environment;
@Override
public TransactionManager create(MuleConfiguration config) throws Exception {
return (TransactionManager) Proxy.newProxyInstance(getClass().getClassLoader(), new Class[] {TransactionManager.class},
new InternalInvocationHandler());
}
public Map getEnvironment() {
return environment;
}
public void setEnvironment(Map<Object, Object> environment) {
this.environment = environment;
}
public class InternalInvocationHandler implements InvocationHandler {
public TestTransactionManagerFactory getParent() {
return TestTransactionManagerFactory.this;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (Object.class.equals(method.getDeclaringClass())) {
try {
return method.invoke(this, args);
} catch (InvocationTargetException e) {
throw e.getCause();
}
} else {
return null;
}
}
}
}