Package org.apache.openejb.core.cmp.cmp2

Source Code of org.apache.openejb.core.cmp.cmp2.EjbSelect

/*
* 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();
    }
}
TOP

Related Classes of org.apache.openejb.core.cmp.cmp2.EjbSelect

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.