00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
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
00035
00036
00037
00038
00039 public class ExecReadRequest extends DistributedRequest
00040 {
00041 private long controllerId;
00042
00043
00044
00045
00046
00047
00048
00049
00050 public ExecReadRequest(long controllerId, SelectRequest request)
00051 {
00052 super(request);
00053 this.controllerId = controllerId;
00054 }
00055
00056
00057
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
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 }