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.StoredProcedure; 00031 import org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager; 00032 00033 /** 00034 * This class defines a ExecReadStoredProcedure 00035 * 00036 * @author <a href="mailto:Emmanuel.Cecchet@inria.fr">Emmanuel Cecchet </a> 00037 * @version 1.0 00038 */ 00039 public class ExecReadStoredProcedure extends DistributedRequest 00040 { 00041 00042 /** 00043 * Creates a new <code>ExecReadStoredProcedure</code> object to execute a 00044 * read stored procedure on multiple controllers. 00045 * 00046 * @param proc the stored procedure to execute 00047 */ 00048 public ExecReadStoredProcedure(StoredProcedure proc) 00049 { 00050 super(proc); 00051 } 00052 00053 /** 00054 * @see org.objectweb.cjdbc.controller.virtualdatabase.protocol.DistributedRequest#scheduleRequest(org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager) 00055 */ 00056 public void scheduleRequest(DistributedRequestManager drm) 00057 throws SQLException 00058 { 00059 drm.lazyTransactionStart(request); 00060 } 00061 00062 /** 00063 * @see org.objectweb.cjdbc.controller.virtualdatabase.protocol.DistributedRequest#executeScheduledRequest(org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager) 00064 */ 00065 public Object executeScheduledRequest(DistributedRequestManager drm) 00066 throws SQLException 00067 { 00068 try 00069 { 00070 return drm 00071 .execDistributedReadStoredProcedureLocally((StoredProcedure) request); 00072 } 00073 catch (SQLException e) 00074 { 00075 drm.getLogger().warn( 00076 Translate.get( 00077 "virtualdatabase.distributed.read.procedure.sqlexception", e 00078 .getMessage()), e); 00079 throw e; 00080 } 00081 catch (RuntimeException re) 00082 { 00083 drm.getLogger().warn( 00084 Translate.get("virtualdatabase.distributed.read.procedure.exception", 00085 re.getMessage()), re); 00086 throw new SQLException(re.getMessage()); 00087 } 00088 } 00089 00090 }