blob: da625bfff8706ceb752b47df011aae66ed96c83e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.openejb.core.cmp.cmp2;
import org.apache.openejb.BeanContext;
import org.apache.openejb.Container;
import org.apache.openejb.OpenEJBRuntimeException;
import org.apache.openejb.core.cmp.CmpContainer;
import javax.ejb.FinderException;
import java.lang.reflect.Method;
import java.util.HashMap;
/**
* DO NOT REFACTOR THIS CLASS. This class is referenced directly by generated code.
*
* The execute_xxxx() methods below are used for executing the meat of the generated
* ejbSelectxxxx methods. Primitive types convert and return the return type directly and the
* generated method will give the correct return instruction. Reference types are resolved using
* the execute_Object() method, and the generated code is responsible for casting the return value
* to the proper return type.
*/
public class EjbSelect {
// our table of select methods for quick lookup
static private HashMap<Class<?>, Method> selectMethods = new HashMap<Class<?>, Method>();
static {
try {
selectMethods.put(Object.class, EjbSelect.class.getMethod("execute_Object", Object.class, String.class, String.class, Object[].class));
selectMethods.put(Void.TYPE, EjbSelect.class.getMethod("execute_void", Object.class, String.class, Object[].class));
selectMethods.put(Boolean.TYPE, EjbSelect.class.getMethod("execute_boolean", Object.class, String.class, Object[].class));
selectMethods.put(Byte.TYPE, EjbSelect.class.getMethod("execute_byte", Object.class, String.class, Object[].class));
selectMethods.put(Character.TYPE, EjbSelect.class.getMethod("execute_char", Object.class, String.class, Object[].class));
selectMethods.put(Short.TYPE, EjbSelect.class.getMethod("execute_short", Object.class, String.class, Object[].class));
selectMethods.put(Integer.TYPE, EjbSelect.class.getMethod("execute_int", Object.class, String.class, Object[].class));
selectMethods.put(Long.TYPE, EjbSelect.class.getMethod("execute_long", Object.class, String.class, Object[].class));
selectMethods.put(Float.TYPE, EjbSelect.class.getMethod("execute_float", Object.class, String.class, Object[].class));
selectMethods.put(Double.TYPE, EjbSelect.class.getMethod("execute_double", Object.class, String.class, Object[].class));
} catch (NoSuchMethodException e) {
throw new OpenEJBRuntimeException(e);
}
}
/**
* Retrieve the execution stub for the specified
* return type. If this is one of the primitive types,
* the stub will directly return the primitive value.
* All reference types get mapped to the generic Object
* return type, so they'll need to be cast to the
* appropriate class by the generated wrapper method.
*
* @param returnType The class of the return type.
*
* @return The method to be used to process the method invocation.
*/
public static Method getSelectMethod(Class<?> returnType)
{
// perform a lookup on the return type. If it is not found directly in the
// mapping table, this is some sort of reference type.
Method method = selectMethods.get(returnType);
if (method == null) {
return selectMethods.get(Object.class);
}
return method;
}
/**
* Perform a select operation when the return value is
* a void. This one is slightly different from the
* rest, as the container operation performed is an
* update() rather than a select() because there's
* no value to return.
*
* @param obj The ejb object we're executing on behalf of.
* @param methodSignature
* The signature of the selectxxxx method being invoked.
* @param args The arguments to the select. These need to match
* the method signature.
*
* @exception FinderException
*/
public static void execute_void(Object obj, String methodSignature, Object... args) throws FinderException {
BeanContext beanContext = (BeanContext) obj;
Container container = beanContext.getContainer();
if (!(container instanceof CmpContainer)) {
throw new FinderException("Deployment is not connected to a CmpContainer " + beanContext.getDeploymentID());
}
CmpContainer cmpContainer = (CmpContainer) container;
cmpContainer.update(beanContext, methodSignature, args);
}
/**
* The single execution stub for all non-primitive
* select operations. This method has an additional
* returnType parameter used to instantiate the return
* value.
*
* @param obj The EJB object we're operating against.
* @param methodSignature
* The signature of the ejbSelectxxxx method.
* @param returnType The return type signature of the method.
* @param args The select arguments.
*
* @return An object of the specified type...which might be
* one of the collection types.
* @exception FinderException
*/
public static Object execute_Object(Object obj, String methodSignature, String returnType, Object... args) throws FinderException {
BeanContext beanContext = (BeanContext) obj;
Container container = beanContext.getContainer();
if (!(container instanceof CmpContainer)) {
throw new FinderException("Deployment is not connected to a CmpContainer " + beanContext.getDeploymentID());
}
CmpContainer cmpContainer = (CmpContainer) container;
return cmpContainer.select(beanContext, methodSignature, returnType, args);
}
public static char execute_char(Object obj, String methodSignature, Object... args) throws FinderException {
BeanContext beanContext = (BeanContext) obj;
Container container = beanContext.getContainer();
if (!(container instanceof CmpContainer)) {
throw new FinderException("Deployment is not connected to a CmpContainer " + beanContext.getDeploymentID());
}
CmpContainer cmpContainer = (CmpContainer) container;
Character result = (Character)cmpContainer.select(beanContext, methodSignature, "char", args);
return result.charValue();
}
public static byte execute_byte(Object obj, String methodSignature, Object... args) throws FinderException {
BeanContext beanContext = (BeanContext) obj;
Container container = beanContext.getContainer();
if (!(container instanceof CmpContainer)) {
throw new FinderException("Deployment is not connected to a CmpContainer " + beanContext.getDeploymentID());
}
CmpContainer cmpContainer = (CmpContainer) container;
Number result = (Number)cmpContainer.select(beanContext, methodSignature, "byte", args);
return result.byteValue();
}
public static boolean execute_boolean(Object obj, String methodSignature, Object... args) throws FinderException {
BeanContext beanContext = (BeanContext) obj;
Container container = beanContext.getContainer();
if (!(container instanceof CmpContainer)) {
throw new FinderException("Deployment is not connected to a CmpContainer " + beanContext.getDeploymentID());
}
CmpContainer cmpContainer = (CmpContainer) container;
Boolean result = (Boolean)cmpContainer.select(beanContext, methodSignature, "byte", args);
return result.booleanValue();
}
public static short execute_short(Object obj, String methodSignature, Object... args) throws FinderException {
BeanContext beanContext = (BeanContext) obj;
Container container = beanContext.getContainer();
if (!(container instanceof CmpContainer)) {
throw new FinderException("Deployment is not connected to a CmpContainer " + beanContext.getDeploymentID());
}
CmpContainer cmpContainer = (CmpContainer) container;
Number result = (Number)cmpContainer.select(beanContext, methodSignature, "short", args);
return result.shortValue();
}
public static int execute_int(Object obj, String methodSignature, Object... args) throws FinderException {
BeanContext beanContext = (BeanContext) obj;
Container container = beanContext.getContainer();
if (!(container instanceof CmpContainer)) {
throw new FinderException("Deployment is not connected to a CmpContainer " + beanContext.getDeploymentID());
}
CmpContainer cmpContainer = (CmpContainer) container;
Number result = (Number)cmpContainer.select(beanContext, methodSignature, "int", args);
return result.intValue();
}
public static long execute_long(Object obj, String methodSignature, Object... args) throws FinderException {
BeanContext beanContext = (BeanContext) obj;
Container container = beanContext.getContainer();
if (!(container instanceof CmpContainer)) {
throw new FinderException("Deployment is not connected to a CmpContainer " + beanContext.getDeploymentID());
}
CmpContainer cmpContainer = (CmpContainer) container;
Number result = (Number)cmpContainer.select(beanContext, methodSignature, "long", args);
return result.longValue();
}
public static float execute_float(Object obj, String methodSignature, Object... args) throws FinderException {
BeanContext beanContext = (BeanContext) obj;
Container container = beanContext.getContainer();
if (!(container instanceof CmpContainer)) {
throw new FinderException("Deployment is not connected to a CmpContainer " + beanContext.getDeploymentID());
}
CmpContainer cmpContainer = (CmpContainer) container;
Number result = (Number)cmpContainer.select(beanContext, methodSignature, "float", args);
return result.floatValue();
}
public static double execute_double(Object obj, String methodSignature, Object... args) throws FinderException {
BeanContext beanContext = (BeanContext) obj;
Container container = beanContext.getContainer();
if (!(container instanceof CmpContainer)) {
throw new FinderException("Deployment is not connected to a CmpContainer " + beanContext.getDeploymentID());
}
CmpContainer cmpContainer = (CmpContainer) container;
Number result = (Number)cmpContainer.select(beanContext, methodSignature, "double", args);
return result.doubleValue();
}
}