summaryrefslogtreecommitdiff
path: root/same/src
diff options
context:
space:
mode:
authorKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-01-19 17:14:32 +0100
committerKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-01-19 17:14:32 +0100
commit3c33d22719225630761cb1ad97252dab977e2e36 (patch)
tree587d90d4e7ae9541c29c6d5189f61b5590835bae /same/src
parenta1c3d1ad9b2815e827e52662b91974145e9b5a20 (diff)
Implement the library interface to a SameClientImpl.
Diffstat (limited to 'same/src')
-rw-r--r--same/src/main/java/com/orbekk/same/ClientApp.java4
-rw-r--r--same/src/main/java/com/orbekk/same/ClientServiceImpl.java22
-rw-r--r--same/src/main/java/com/orbekk/same/Same.java42
-rw-r--r--same/src/main/java/com/orbekk/same/SameInterface.java7
-rw-r--r--same/src/main/java/com/orbekk/same/UpdateConflict.java3
5 files changed, 65 insertions, 13 deletions
diff --git a/same/src/main/java/com/orbekk/same/ClientApp.java b/same/src/main/java/com/orbekk/same/ClientApp.java
index 970f16d..3095a59 100644
--- a/same/src/main/java/com/orbekk/same/ClientApp.java
+++ b/same/src/main/java/com/orbekk/same/ClientApp.java
@@ -12,7 +12,7 @@ public class ClientApp {
private Server server;
private static final int timeout = 1000;
- public ClientServiceImpl getClient(int port, String networkName,
+ public SameInterface getClient(int port, String networkName,
String masterUrl) {
logger.info("Starting client with port:{}, networkName:{}, masterUrl:{}",
new Object[]{port, networkName, masterUrl});
@@ -46,7 +46,7 @@ public class ClientApp {
}
client.joinNetwork(masterUrl + "MasterService.json");
- return client;
+ return new Same(client);
}
public void run(int port, String networkName,
diff --git a/same/src/main/java/com/orbekk/same/ClientServiceImpl.java b/same/src/main/java/com/orbekk/same/ClientServiceImpl.java
index 46cdd86..75df9cc 100644
--- a/same/src/main/java/com/orbekk/same/ClientServiceImpl.java
+++ b/same/src/main/java/com/orbekk/same/ClientServiceImpl.java
@@ -1,5 +1,6 @@
package com.orbekk.same;
+import org.codehaus.jackson.type.TypeReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,16 +53,29 @@ public class ClientServiceImpl implements ClientService, UrlReceiver {
"Run discovery service.", masterUrl);
}
}
+
+ String lib_get(String name) {
+ return state.getDataOf(name);
+ }
+
+ <T> T lib_get(String name, TypeReference<T> type) {
+ return state.getParsedData(name, type);
+ }
- public boolean sendStateUpdate(String componentName, String data,
- long revision) {
+ void lib_set(String name, String data) throws UpdateConflict {
String masterUrl = state.getDataOf(".masterUrl");
+ long revision = state.getRevision(name) + 1;
MasterService master = connections.getMaster(masterUrl);
try {
- return master.updateStateRequest(componentName, data, revision);
+ boolean success = master.updateStateRequest(name, data,
+ revision);
+ if (!success) {
+ throw new UpdateConflict("State update conflict when " +
+ "updating " + name);
+ }
} catch (Exception e) {
logger.error("Unable to contact master. Update fails.");
- return false;
+ throw new UpdateConflict("Unable to contact master. Update fails.");
}
}
diff --git a/same/src/main/java/com/orbekk/same/Same.java b/same/src/main/java/com/orbekk/same/Same.java
new file mode 100644
index 0000000..b70c7aa
--- /dev/null
+++ b/same/src/main/java/com/orbekk/same/Same.java
@@ -0,0 +1,42 @@
+package com.orbekk.same;
+
+import java.util.List;
+
+import org.codehaus.jackson.type.TypeReference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Same implements SameInterface {
+ private Logger logger = LoggerFactory.getLogger(getClass());
+ private ClientServiceImpl client;
+
+ public Same(ClientServiceImpl client) {
+ this.client = client;
+ }
+
+ @Override
+ public String get(String id) {
+ return client.lib_get(id);
+ }
+
+ @Override
+ public <T> T get(String id, TypeReference<T> type) {
+ return client.lib_get(id, type);
+ }
+
+ @Override
+ public List<String> getList(String id) {
+ return client.lib_get(id, new TypeReference<List<String>>() { });
+ }
+
+ @Override
+ public void set(String id, String data) throws UpdateConflict {
+ client.lib_set(id, data);
+ }
+
+ @Override
+ public void setObject(String id, Object data) {
+ throw new RuntimeException("Not implemented.");
+ }
+
+}
diff --git a/same/src/main/java/com/orbekk/same/SameInterface.java b/same/src/main/java/com/orbekk/same/SameInterface.java
index a778f39..7541636 100644
--- a/same/src/main/java/com/orbekk/same/SameInterface.java
+++ b/same/src/main/java/com/orbekk/same/SameInterface.java
@@ -29,13 +29,6 @@ public interface SameInterface {
void set(String id, String data) throws UpdateConflict;
/**
- * Set the state.
- *
- * Retry until there is no conflict.
- */
- void forceSet(String id, String data);
-
- /**
* Set from an object: Pass it, e.g., a List<String>.
*/
void setObject(String id, Object data);
diff --git a/same/src/main/java/com/orbekk/same/UpdateConflict.java b/same/src/main/java/com/orbekk/same/UpdateConflict.java
index 35fbb01..4ea5887 100644
--- a/same/src/main/java/com/orbekk/same/UpdateConflict.java
+++ b/same/src/main/java/com/orbekk/same/UpdateConflict.java
@@ -1,4 +1,7 @@
package com.orbekk.same;
public class UpdateConflict extends Exception {
+ public UpdateConflict(String string) {
+ super(string);
+ }
}