001/* 002 * HA-JDBC: High-Availability JDBC 003 * Copyright (C) 2012 Paul Ferraro 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Lesser General Public License as published by 007 * the Free Software Foundation, either version 3 of the License, or 008 * (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Lesser General Public License for more details. 014 * 015 * You should have received a copy of the GNU Lesser General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018package net.sf.hajdbc.state.distributed; 019 020import java.util.Map; 021 022import net.sf.hajdbc.Database; 023import net.sf.hajdbc.distributed.Command; 024import net.sf.hajdbc.durability.InvocationEvent; 025import net.sf.hajdbc.durability.InvokerEvent; 026 027public class InvokerCommand<Z, D extends Database<Z>> implements Command<Void, StateCommandContext<Z, D>> 028{ 029 private static final long serialVersionUID = 5093904550015002207L; 030 031 private final RemoteInvokerDescriptor descriptor; 032 033 protected InvokerCommand(RemoteInvokerDescriptor descriptor) 034 { 035 this.descriptor = descriptor; 036 } 037 038 /** 039 * {@inheritDoc} 040 * @see net.sf.hajdbc.distributed.Command#execute(java.lang.Object) 041 */ 042 @Override 043 public Void execute(StateCommandContext<Z, D> context) 044 { 045 Map<InvocationEvent, Map<String, InvokerEvent>> invokers = context.getRemoteInvokers(this.descriptor); 046 047 InvokerEvent event = this.descriptor.getEvent(); 048 String databaseId = event.getDatabaseId(); 049 050 synchronized (invokers) 051 { 052 Map<String, InvokerEvent> map = invokers.get(event); 053 054 if (map != null) 055 { 056 map.put(databaseId, event); 057 } 058 } 059 060 return null; 061 } 062 063 /** 064 * {@inheritDoc} 065 * @see java.lang.Object#toString() 066 */ 067 @Override 068 public String toString() 069 { 070 return String.format("%s(%s)", this.getClass().getSimpleName(), this.descriptor); 071 } 072}