⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ejbinvokerjob.java

📁 定时器开源项目, 相对于 jcrontab, Quartz 算是更完整的一个项目, 随著开发的版本上来, 他已经脱离只是写在程序里面的计时器, 在指定的时间或区间, 处理所指定的事件. 也加入了 se
💻 JAVA
字号:
/* * Copyright James House (c) 2001-2004 *  * All rights reserved. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: 1. * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. 2. Redistributions in * binary form must reproduce the above copyright notice, this list of * conditions and the following disclaimer in the documentation and/or other * materials provided with the distribution. *  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *   */package org.quartz.jobs.ee.ejb;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.rmi.RemoteException;import java.util.Hashtable;import javax.ejb.EJBHome;import javax.ejb.EJBMetaData;import javax.ejb.EJBObject;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.rmi.PortableRemoteObject;import org.quartz.Job;import org.quartz.JobDataMap;import org.quartz.JobDetail;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;/** * <p> * A <code>Job</code> that invokes a method on an EJB. * </p> *  * <p> * Expects the properties corresponding to the following keys to be in the * <code>JobDataMap</code> when it executes: * <ul> * <li><code>EJB_JNDI_NAME_KEY</code>- the JNDI name (location) of the * EJB's home interface.</li> * <li><code>EJB_METHOD_KEY</code>- the name of the method to invoke on the * EJB.</li> * <li><code>EJB_ARGS_KEY</code>- an Object[] of the args to pass to the * method (optional, if left out, there are no arguments).</li> * <li><code>EJB_ARG_TYPES_KEY</code>- an Object[] of the args to pass to * the method (optional, if left out, the types will be derived by calling * getClass() on each of the arguments).</li> * </ul> * <br/> * The following keys can also be used at need: * <ul> * <li><code>INITIAL_CONTEXT_FACTORY</code> - the context factory used to  * build the context.</li> * <li><code>PROVIDER_URL</code> - the name of the environment property * for specifying configuration information for the service provider to use. * </li> * </ul> * </p> *  * @author Andrew Collins * @author James House * @author Joel Shellman * @author <a href="mailto:bonhamcm@thirdeyeconsulting.com">Chris Bonham</a> */public class EJBInvokerJob implements Job {    /*     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     *      * Constants.     *      * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     */    public static final String EJB_JNDI_NAME_KEY = "ejb";    public static final String EJB_METHOD_KEY = "method";    public static final String EJB_ARG_TYPES_KEY = "argTypes";    public static final String EJB_ARGS_KEY = "args";        public static final String INITIAL_CONTEXT_FACTORY = "java.naming.factory.initial";        public static final String PROVIDER_URL = "java.naming.provider.url";    /*     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     *      * Constructors.     *      * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     */    public EJBInvokerJob() {        // nothing    }    /*     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     *      * Interface.     *      * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     */    public void execute(JobExecutionContext context)            throws JobExecutionException {        JobDetail detail = context.getJobDetail();        JobDataMap dataMap = detail.getJobDataMap();        String ejb = dataMap.getString(EJB_JNDI_NAME_KEY);        String method = dataMap.getString(EJB_METHOD_KEY);        Object[] arguments = (Object[]) dataMap.get(EJB_ARGS_KEY);        if (arguments == null) {            arguments = new Object[0];        }        if (ejb == null) {         // must specify remote home        throw new JobExecutionException(); }        InitialContext jndiContext = null;        // get initial context        try {            jndiContext = getInitialContext(dataMap);        } catch (NamingException ne) {            throw new JobExecutionException(ne);        }        Object value = null;        // locate home interface        try {            value = jndiContext.lookup(ejb);        } catch (NamingException ne) {            throw new JobExecutionException(ne);        }        // get home interface        EJBHome ejbHome = (EJBHome) PortableRemoteObject.narrow(value,                EJBHome.class);        // get meta data        EJBMetaData metaData = null;        try {            metaData = ejbHome.getEJBMetaData();        } catch (RemoteException re) {            throw new JobExecutionException(re);        }        // get home interface class        Class homeClass = metaData.getHomeInterfaceClass();        // get remote interface class        Class remoteClass = metaData.getRemoteInterfaceClass();        // get home interface        ejbHome = (EJBHome) PortableRemoteObject.narrow(ejbHome, homeClass);        Method methodCreate = null;        try {            // create method 'create()' on home interface            methodCreate = homeClass.getDeclaredMethod("create", null);        } catch (NoSuchMethodException nsme) {            throw new JobExecutionException(nsme);        }        // create remote object        EJBObject remoteObj = null;        try {            // invoke 'create()' method on home interface            remoteObj = (EJBObject) methodCreate.invoke(ejbHome, null);        } catch (IllegalAccessException iae) {            throw new JobExecutionException(iae);        } catch (InvocationTargetException ite) {            throw new JobExecutionException(ite);        }        // execute user-specified method on remote object        Method methodExecute = null;        try {            // create method signature            Class[] argTypes = (Class[]) dataMap.get(EJB_ARG_TYPES_KEY);            if (argTypes == null) {                argTypes = new Class[arguments.length];                for (int i = 0; i < arguments.length; i++) {                    argTypes[i] = arguments[i].getClass();                }            }            // get method on remote object            methodExecute = remoteClass.getDeclaredMethod(method, argTypes);        } catch (NoSuchMethodException nsme) {            throw new JobExecutionException(nsme);        }        try {            // invoke user-specified method on remote object            methodExecute.invoke(remoteObj, arguments);        } catch (IllegalAccessException iae) {            throw new JobExecutionException(iae);        } catch (InvocationTargetException ite) {            throw new JobExecutionException(ite);        }    }    private InitialContext getInitialContext(JobDataMap jobDataMap)        throws NamingException {        Hashtable params = new Hashtable(2);                String initialContextFactory =            jobDataMap.getString(INITIAL_CONTEXT_FACTORY);        if (initialContextFactory != null) {            params.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory);        }                String providerUrl = jobDataMap.getString(PROVIDER_URL);        if (providerUrl != null) {            params.put(Context.PROVIDER_URL, providerUrl);        }                if (params.size() == 0)        {            return new InitialContext();        }        else        {            return new InitialContext(params);        }    }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -