All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.mycontainer.ejb.transaction.AbstractTransactionHandler Maven / Gradle / Ivy

There is a newer version: 1.7.5
Show newest version
/*
 * Copyright 2008 Whohoo Licensed under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
 * law or agreed to in writing, software distributed under the License is
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */

package com.googlecode.mycontainer.ejb.transaction;

import java.lang.reflect.Method;

import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.naming.Context;
import javax.transaction.TransactionManager;

import com.googlecode.mycontainer.kernel.KernelRuntimeException;
import com.googlecode.mycontainer.kernel.reflect.proxy.ContextInterceptor;
import com.googlecode.mycontainer.kernel.reflect.proxy.Request;


public abstract class AbstractTransactionHandler extends ContextInterceptor {

	private TransactionManager transactionManager;

	public TransactionManager getTransactionManager() {
		return transactionManager;
	}

	private void setTransactionManager(TransactionManager transactionManager) {
		this.transactionManager = transactionManager;
	}

	private static TransactionAttributeType getTransactionAttributeType(
			Request request) {
		Method method = request.getImplMethod();
		TransactionAttribute annotation = method
				.getAnnotation(TransactionAttribute.class);
		if (annotation == null) {
			Object impl = request.getImpl();
			annotation = impl.getClass().getAnnotation(
					TransactionAttribute.class);
		}
		return (annotation == null ? TransactionAttributeType.REQUIRED
				: annotation.value());
	}

	private static AbstractTransactionHandler createTransactionHandler(
			TransactionAttributeType type) {
		switch (type) {
		case MANDATORY:
			return new MandatoryTransactionHandler();
		case NEVER:
			return new NeverTransactionHandler();
		case NOT_SUPPORTED:
			return new NotSupportedTransactionHandler();
		case REQUIRED:
			return new RequiredTransactionHandler();
		case REQUIRES_NEW:
			return new RequiresNewTransactionHandler();
		case SUPPORTS:
			return new SupportsTransactionHandler();
		}

		throw new KernelRuntimeException(
				"TransactionAttributeType not supported: " + type);
	}

	public static AbstractTransactionHandler getTransactionHandler(
			Request request, Context ctx, TransactionManager tm) {
		TransactionAttributeType type = getTransactionAttributeType(request);
		AbstractTransactionHandler ret = createTransactionHandler(type);
		ret.setContext(ctx);
		ret.setTransactionManager(tm);
		return ret;

	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy