00001 /** 00002 * C-JDBC: Clustered JDBC. 00003 * Copyright (C) 2002-2005 French National Institute For Research In Computer 00004 * Science And Control (INRIA). 00005 * Contact: c-jdbc@objectweb.org 00006 * 00007 * This library is free software; you can redistribute it and/or modify it 00008 * under the terms of the GNU Lesser General Public License as published by the 00009 * Free Software Foundation; either version 2.1 of the License, or any later 00010 * version. 00011 * 00012 * This library is distributed in the hope that it will be useful, but WITHOUT 00013 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00014 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 00015 * for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public License 00018 * along with this library; if not, write to the Free Software Foundation, 00019 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 00020 * 00021 * Initial developer(s): Emmanuel Cecchet. 00022 * Contributor(s): ______________________. 00023 */ 00024 00025 package org.objectweb.cjdbc.controller.virtualdatabase.protocol; 00026 00027 import java.io.Serializable; 00028 import java.sql.SQLException; 00029 00030 import org.objectweb.cjdbc.common.sql.AbstractRequest; 00031 import org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager; 00032 00033 /** 00034 * <code>DistributedRequest</code> is an abstract class that defines the 00035 * interface for distributed execution of a request (horizontal scalability). 00036 * 00037 * @author <a href="mailto:Emmanuel.Cecchet@inria.fr">Emmanuel Cecchet </a> 00038 * @version 1.0 00039 */ 00040 public abstract class DistributedRequest implements Serializable 00041 { 00042 protected AbstractRequest request; 00043 00044 /** 00045 * Builds a new <code>DistributedRequest</code> object. 00046 * 00047 * @param request request to execute 00048 */ 00049 public DistributedRequest(AbstractRequest request) 00050 { 00051 this.request = request; 00052 } 00053 00054 /** 00055 * Returns the request value. 00056 * 00057 * @return Returns the request. 00058 */ 00059 public final AbstractRequest getRequest() 00060 { 00061 return request; 00062 } 00063 00064 /** 00065 * Schedule the request. This method blocks until the request is scheduled. 00066 * 00067 * @param drm a distributed request manager 00068 * @throws SQLException if an error occurs. 00069 */ 00070 public abstract void scheduleRequest(DistributedRequestManager drm) 00071 throws SQLException; 00072 00073 /** 00074 * Code to be executed by the distributed request manager receiving the 00075 * request. 00076 * 00077 * @param drm a distributed request manager 00078 * @return an Object to be sent back to the caller 00079 * @throws SQLException if an error occurs. 00080 */ 00081 public abstract Object executeScheduledRequest(DistributedRequestManager drm) 00082 throws SQLException; 00083 00084 }