Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

ExecReadRequest.java

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.sql.SQLException;
00028 
00029 import org.objectweb.cjdbc.common.i18n.Translate;
00030 import org.objectweb.cjdbc.common.sql.SelectRequest;
00031 import org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager;
00032 
00033 /**
00034  * Execute a write request between several controllers.
00035  * 
00036  * @author <a href="mailto:Emmanuel.Cecchet@inria.fr">Emmanuel Cecchet </a>
00037  * @version 1.0
00038  */
00039 public class ExecReadRequest extends DistributedRequest
00040 {
00041   private long controllerId;
00042 
00043   /**
00044    * Creates a new <code>ExecReadRequest</code> object.
00045    * 
00046    * @param controllerId unique id of the controller that originally received
00047    *          this request
00048    * @param request select request to execute
00049    */
00050   public ExecReadRequest(long controllerId, SelectRequest request)
00051   {
00052     super(request);
00053     this.controllerId = controllerId;
00054   }
00055 
00056   /**
00057    * @see org.objectweb.cjdbc.controller.virtualdatabase.protocol.DistributedRequest#scheduleRequest(org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager)
00058    */
00059   public void scheduleRequest(DistributedRequestManager drm)
00060       throws SQLException
00061   {
00062     if (controllerId == drm.getControllerId())
00063       throw new SQLException(
00064           "No backends are available in the cluster to execute the query ("
00065               + request.getSQLShortForm(drm.getVirtualDatabase()
00066                   .getSQLShortFormLength()) + ")");
00067   }
00068 
00069   /**
00070    * @see org.objectweb.cjdbc.controller.virtualdatabase.protocol.DistributedRequest#executeScheduledRequest(org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager)
00071    */
00072   public Object executeScheduledRequest(DistributedRequestManager drm)
00073       throws SQLException
00074   {
00075     try
00076     {
00077       return drm.execReadRequest((SelectRequest) request);
00078     }
00079     catch (SQLException e)
00080     {
00081       drm.getLogger().warn(
00082           Translate.get("virtualdatabase.distributed.read.sqlexception", e
00083               .getMessage()), e);
00084       throw e;
00085     }
00086     catch (RuntimeException re)
00087     {
00088       drm.getLogger().warn(
00089           Translate.get("virtualdatabase.distributed.read.exception", re
00090               .getMessage()), re);
00091       throw new SQLException(re.getMessage());
00092     }
00093   }
00094 
00095 }

Generated on Mon Apr 11 22:01:32 2005 for C-JDBC by  doxygen 1.3.9.1