001: /*
002: * $Header: /export/home/cvsroot/MyPersonalizerRepository/MyPersonalizer/Subsystems/Kernel/Sources/es/udc/mypersonalizer/kernel/model/actions/ActionProcessorSingleton.java,v 1.1.1.1 2004/03/25 12:08:37 fbellas Exp $
003: * $Revision: 1.1.1.1 $
004: * $Date: 2004/03/25 12:08:37 $
005: *
006: * =============================================================================
007: *
008: * Copyright (c) 2003, The MyPersonalizer Development Group
009: * (http://www.tic.udc.es/~fbellas/mypersonalizer/index.html) at
010: * University Of A Coruna
011: * All rights reserved.
012: *
013: * Redistribution and use in source and binary forms, with or without
014: * modification, are permitted provided that the following conditions are met:
015: *
016: * - Redistributions of source code must retain the above copyright notice,
017: * this list of conditions and the following disclaimer.
018: *
019: * - Redistributions in binary form must reproduce the above copyright notice,
020: * this list of conditions and the following disclaimer in the documentation
021: * and/or other materials provided with the distribution.
022: *
023: * - Neither the name of the University Of A Coruna nor the names of its
024: * contributors may be used to endorse or promote products derived from
025: * this software without specific prior written permission.
026: *
027: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
028: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
029: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
030: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
031: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
032: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
033: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
034: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
035: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
036: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
037: * POSSIBILITY OF SUCH DAMAGE.
038: *
039: */
040:
041: package es.udc.mypersonalizer.kernel.model.actions;
042:
043: import es.udc.mypersonalizer.kernel.config.ActionProcessorConfig;
044: import es.udc.mypersonalizer.kernel.config.KernelConfig;
045: import es.udc.mypersonalizer.kernel.config.KernelConfigManager;
046: import es.udc.mypersonalizer.kernel.log.Log;
047: import es.udc.mypersonalizer.kernel.log.LogManager;
048: import es.udc.mypersonalizer.kernel.log.LogNamingConventions;
049: import es.udc.mypersonalizer.kernel.util.exceptions.InternalErrorException;
050: import es.udc.mypersonalizer.kernel.util.exceptions.ModelException;
051: import java.io.Serializable;
052:
053: /**
054: * This abstract utility class is a singleton which provides an implementation
055: * for executing model actions.<p>
056: * This actions are picked from the ActionRegistrySingleton and executed
057: * in transactional or non-transactional mode.<p>
058: * The concrete implementation to return at getSingleton is user defined
059: * by the ActionProcessorSingleton.class configuration parameter.
060: * <p>
061: *
062: * @author Daniel Fernandez
063: * @author David Barral
064: * @since 1.0
065: */
066: public abstract class ActionProcessorSingleton {
067:
068: /**
069: * The ActionProcessorSingleton's specific implementation singleton instance
070: */
071: private static ActionProcessorSingleton instance = null;
072:
073: /*
074: * We need to read ActionProcessorSingleton.class from the configuration
075: * parameters and create the implementation instance
076: */
077: static {
078:
079: try {
080: KernelConfig kernelConfig = KernelConfigManager.getConfig();
081:
082: ActionProcessorConfig actionProcessorConfig = kernelConfig
083: .getKernelModelConfig().getActionProcessorConfig();
084:
085: String className = actionProcessorConfig.getClassName();
086:
087: Class singletonClass = Class.forName(className);
088: instance = (ActionProcessorSingleton) singletonClass
089: .newInstance();
090:
091: } catch (Exception e) {
092:
093: Log mypersonalizerLog = LogManager
094: .getLog(LogNamingConventions.MYPERSONALIZER);
095: mypersonalizerLog.write(
096: "Could not initialize configuration for "
097: + "ActionProcessorSingleton", e,
098: ActionProcessorSingleton.class);
099:
100: }
101:
102: }
103:
104: /**
105: * Returns the concrete singleton implementation
106: *
107: * @return a ActionProcessorSingleton the singleton implementation
108: */
109: public static ActionProcessorSingleton getInstance() {
110: return instance;
111: }
112:
113: /**
114: * Executes the model action specified by actionName taking event as
115: * the action's parameter.<p>
116: * The action is executed in transactional or non-transactional mode
117: * basing on its "transactional" parameter
118: *
119: * @return a Serializable with the result of the execution
120: * @param actionName the name of the action (defined in configuration)
121: * @param event the event that works as this action's parameters
122: * @throws InternalErrorException if execution throws an internal error
123: * (it causes rollback)
124: * @throws ModelException if execution throws a model error (it does not
125: * causes rollback)
126: */
127: public abstract Serializable execute(String actionName,
128: Serializable event) throws InternalErrorException,
129: ModelException;
130:
131: }
|