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

📄 standardeventlistener.java

📁 intra_mart是日本NDD公司开发的著名企业应用解决方案中间件。集成了J2ee服务器
💻 JAVA
字号:
/*
 * StandardEventListener.java
 *
 * Created on 2001/12/04, 18:33
 */

package jp.co.intra_mart.framework.base.event;

import java.util.ResourceBundle;
import javax.naming.InitialContext;
import javax.transaction.UserTransaction;

import jp.co.intra_mart.framework.base.data.DataManager;
import jp.co.intra_mart.framework.base.data.DataAccessController;
import jp.co.intra_mart.framework.system.log.LogConstant;
import jp.co.intra_mart.framework.system.log.LogManager;

import java.util.MissingResourceException;

import jp.co.intra_mart.framework.base.data.DataConnectException;
import jp.co.intra_mart.framework.base.data.DataConnectorException;
import jp.co.intra_mart.framework.base.data.DataPropertyException;
import jp.co.intra_mart.framework.base.data.DAOException;
import jp.co.intra_mart.framework.system.exception.ApplicationException;
import jp.co.intra_mart.framework.system.exception.IllegalSystemException;
import jp.co.intra_mart.framework.system.exception.SystemException;

/**
 * 斈梡揑側價僕僱僗儘僕僢僋梡偺僋儔僗偱偡丅
 *
 * @author INTRAMART
 * @version 1.0
 */
public abstract class StandardEventListener implements EventListener {

    /**
     * 僨乕僞傾僋僙僗僐儞僩儘乕儔
     */
    private DataAccessController dataAccessController;

    /**
     * 僩儔儞僓僋僔儑儞
     */
    private boolean inTransaction = false;

    /**
     * 偙偺僀儀儞僩儕僗僫偱巊梡偡傞僨乕僞傾僋僙僗僐儞僩儘乕儔偱偡丅
     * 偙偺僋儔僗傪宲彸偡傞応崌丄儊僜僢僪{@link #fire(jp.co.intra_mart.framework.base.event.Event)}撪偱偼僨乕僞傾僋僙僗僐儞僩儘乕儔偺庢摼偵偼偙偺儊僜僢僪傪巊偆傛偆偵偟偰偔偩偝偄丅
     *
     * @return 僨乕僞傾僋僙僗僐儞僩儘乕儔
     */
    protected DataAccessController getDataAccessController() {
        return this.dataAccessController;
    }

    /**
     * DAO傪庢摼偟傑偡丅
     * 僉乕偲愙懕忣曬偱巜掕偝傟偨DAO傪庢摼偟傑偡丅
     *
     * @param application 傾僾儕働乕僔儑儞ID
     * @param key DAO偺僉乕
     * @param connect 愙懕忣曬
     * @return DAO
     * @throws DataPropertyException 僾儘僷僥傿偺庢摼偵幐攕
     * @throws DataConnectorException 僨乕僞僐僱僋僞偺庢摼偵幐攕
     * @throws DAOException DAO偺庢摼偵幐攕
     * @throws DataConnectException 僨乕僞儕僜乕僗偲偺愙懕偵幐攕
     */
    protected Object getDAO(String application, String key, String connect)
        throws
            DataPropertyException,
            DataConnectorException,
            DAOException,
            DataConnectException {
        return getDataAccessController().getDAO(application, key, connect);
    }

    /**
     * 張棟傪幚峴偟傑偡丅
     * 偙偺僋儔僗偱偼埲壓偺傛偆側弴斣偱張棟傪峴偄傑偡丅
     * <OL>
     * <LI>儐乕僓僩儔儞僓僋僔儑儞偺奐巒
     * <LI>僀儀儞僩僩儕僈偺幚峴(慜張棟)
     * <LI>僀儀儞僩張棟偺幚峴({@link #fire(jp.co.intra_mart.framework.base.event.Event)})
     * <LI>僀儀儞僩僩儕僈偺幚峴(屻張棟)
     * <LI>娙堈僩儔儞僓僋僔儑儞偺僐儈僢僩({@link jp.co.intra_mart.framework.base.data.DataAccessController#commit()})
     * <LI>儐乕僓僩儔儞僓僋僔儑儞偺僐儈僢僩
     * </OL>
     *
     * @param event 僀儀儞僩
     * @return 僀儀儞僩張棟寢壥
     * @throws ApplicationException 僀儀儞僩張棟帪偵傾僾儕働乕僔儑儞椺奜偑敪惗
     * @throws SystemException 僔僗僥儉張棟帪偵傾僾儕働乕僔儑儞椺奜偑敪惗
     */
    public EventResult execute(Event event)
        throws SystemException, ApplicationException {
        DataManager manager = DataManager.getDataManager();
        EventTriggerList triggerList = null;
        EventTriggerList postTriggerList = null;
        EventResult result = null;
        InitialContext ic = null;
        UserTransaction ut = null;

        // 僨乕僞傾僋僙僗僐儞僩儘乕儔偺庢摼
        this.dataAccessController = manager.getDataAccessController();

        // 僀儀儞僩僩儕僈乮慜張棟乯偺庢摼
        try {
            triggerList =
                new EventTriggerList(event.getApplication(), event.getKey());
        } catch (Throwable e) {
            // 僄儔乕儘僌偵弌椡
            LogManager.getLogManager().getLogAgent().sendMessage(
                EventManager.class.getName(),
                LogConstant.LEVEL_ERROR,
                EventManager.LOG_HEAD + e.getMessage(),
                e);
            triggerList = null;
        }

        // 僀儀儞僩僩儕僈乮屻張棟乯偺庢摼
        try {
            postTriggerList =
                new EventTriggerList(
                    event.getApplication(),
                    event.getKey(),
                    false);
        } catch (Throwable e) {
            // 僄儔乕儘僌偵弌椡
            LogManager.getLogManager().getLogAgent().sendMessage(
                EventManager.class.getName(),
                LogConstant.LEVEL_ERROR,
                EventManager.LOG_HEAD + e.getMessage(),
                e);
            postTriggerList = null;
        }

        // 僩儔儞僓僋僔儑儞偺奐巒
        if (!this.inTransaction) {
            try {
                ic = new InitialContext();
                ut = (UserTransaction)ic.lookup("java:comp/UserTransaction");
                ut.begin();
            } catch (Throwable e) {
                try {
                    this.dataAccessController.release();
                } catch (Throwable ex) {
                    // 僄儔乕儘僌偵弌椡
                    LogManager.getLogManager().getLogAgent().sendMessage(
                        EventManager.class.getName(),
                        LogConstant.LEVEL_ERROR,
                        EventManager.LOG_HEAD + ex.getMessage(),
                        ex);
                }
                throw new SystemException(e.getMessage(), e);
            }
        }

        try {
            // 慜僀儀儞僩僩儕僈偺幚峴
            if (triggerList != null) {
                triggerList.fireAll(event, this.dataAccessController);
            }

            try {
                // 僀儀儞僩張棟偺幚峴
                result = fire(event);

                // 屻僀儀儞僩僩儕僈偺幚峴
                if (postTriggerList != null) {
                    postTriggerList.fireAll(event, this.dataAccessController);
                }

                // 僩儔儞僓僋僔儑儞偺僐儈僢僩
                this.dataAccessController.commit();
            } catch (Throwable e) {
                // 椺奜偑敪惗偟偨応崌丄儘乕儖僶僢僋偡傞
                try {
                    this.dataAccessController.rollback();
                } catch (Throwable ex) {
                    // 僐儈僢僩帪偺椺奜傪僄儔乕儘僌偵弌椡
                    LogManager.getLogManager().getLogAgent().sendMessage(
                        EventManager.class.getName(),
                        LogConstant.LEVEL_ERROR,
                        EventManager.LOG_HEAD + ex.getMessage(),
                        ex);
                }
                throw e;
            }

            // 儐乕僓僩儔儞僓僋僔儑儞偺僐儈僢僩
            if (!this.inTransaction) {
                ut.commit();
            }
        } catch (Throwable e) {
            // 儐乕僓僩儔儞僓僋僔儑儞偺儘乕儖僶僢僋
            if (!this.inTransaction) {
                try {
                    ut.rollback();
                } catch (Throwable ex) {
                    // 儘乕儖僶僢僋帪偺椺奜傪僄儔乕儘僌偵弌椡
                    LogManager.getLogManager().getLogAgent().sendMessage(
                        EventManager.class.getName(),
                        LogConstant.LEVEL_ERROR,
                        EventManager.LOG_HEAD + ex.getMessage(),
                        ex);
                }
            }
            if (e instanceof SystemException) {
                throw (SystemException)e;
            } else if (e instanceof ApplicationException) {
                throw (ApplicationException)e;
            } else {
                // SystemException偲ApplicationException埲奜偼僔僗僥儉堎忢偲偡傞
                String message = null;
                try {
                    message =
                        ResourceBundle
                            .getBundle("jp.co.intra_mart.framework.base.event.i18n")
                            .getString("Common.UnsupposedExceptionExecuteEvent");
                } catch (MissingResourceException ex) {
                }
                throw new IllegalSystemException(message, e);
            }
        } finally {
            // 僨乕僞傾僋僙僗僐儞僩儘乕儔偺儕儕乕僗
            try {
                this.dataAccessController.release();
            } catch (Throwable e) {
                // 儕儕乕僗帪偺椺奜傪僄儔乕儘僌偵弌椡
                LogManager.getLogManager().getLogAgent().sendMessage(
                    EventManager.class.getName(),
                    LogConstant.LEVEL_ERROR,
                    EventManager.LOG_HEAD + e.getMessage(),
                    e);
            }
        }

        // 僀儀儞僩張棟寢壥傪曉偡
        return result;
    }

    /**
     * 僀儀儞僩偵懳偡傞張棟偱偡丅
     *
     * @param event 僀儀儞僩
     * @return 僀儀儞僩張棟寢壥
     * @throws SystemException 僔僗僥儉椺奜偑敪惗
     * @throws ApplicationException 傾僾儕働乕僔儑儞椺奜偑敪惗
     */
    protected abstract EventResult fire(Event event)
        throws SystemException, ApplicationException;

    /**
     * 偙偺僀儀儞僩儕僗僫偑僩儔儞僓僋僔儑儞偺拞偱幚峴偝傟偰偄傞偐偳偆偐偺忣曬傪愝掕偟傑偡丅
     *
     * @param transaction 僩儔儞僓僋僔儑儞偺拞偱幚峴偝傟偰偄傞応崌丗true丄偦偆偱側偄応崌丗false
     * @since 4.2
     */
    public void setInTransaction(boolean transaction) {
        this.inTransaction = transaction;
    }

    /**
     * 僀儀儞僩張棟傪幚峴偟傑偡丅
     *
     * @param event 僀儀儞僩
     * @return 僀儀儞僩張棟寢壥
     * @throws EventManagerException 僀儀儞僩儅僱乕僕儍偺惗惉偵幐攕
     * @throws EventException 僀儀儞僩張棟幚峴偵幐攕
     * @throws SystemException 僀儀儞僩張棟帪偵僔僗僥儉椺奜偑敪惗
     * @throws ApplicationException 僀儀儞僩張棟帪偵傾僾儕働乕僔儑儞椺奜偑敪惗
     * @since 4.2
     */
    protected EventResult dispatchEvent(Event event)
        throws
            EventManagerException,
            EventException,
            SystemException,
            ApplicationException {

        return EventManager.getEventManager().dispatch(event, true);
    }
}

⌨️ 快捷键说明

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