Mercurial > hg > Database > Christie
changeset 32:307ac87ddcf7
add TakeFrom annotation
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/christie/annotation/PeekFrom.java Thu Feb 15 15:48:23 2018 +0900 @@ -0,0 +1,12 @@ +package christie.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface PeekFrom { + String value(); +}
--- a/src/main/java/christie/annotation/Take.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/annotation/Take.java Thu Feb 15 15:48:23 2018 +0900 @@ -11,5 +11,4 @@ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface Take { - String value(); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/christie/annotation/TakeFrom.java Thu Feb 15 15:48:23 2018 +0900 @@ -0,0 +1,13 @@ +package christie.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface TakeFrom { + String value(); +} +
--- a/src/main/java/christie/codegear/CodeGear.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/codegear/CodeGear.java Thu Feb 15 15:48:23 2018 +0900 @@ -1,7 +1,9 @@ package christie.codegear; import christie.annotation.Peek; +import christie.annotation.PeekFrom; import christie.annotation.Take; +import christie.annotation.TakeFrom; import christie.datagear.*; import christie.datagear.command.Command; import christie.datagear.command.PeekCommand; @@ -32,12 +34,17 @@ for (Field field : this.getClass().getDeclaredFields()) {//AnnotationからInputDataGearをセット if (field.isAnnotationPresent(Take.class)) { Take ano = field.getAnnotation(Take.class); - setTakeCommand(ano.value(), field.getName(), new DataGear(field.getType())); + setTakeCommand("local", field.getName(), new DataGear(field.getType())); } else if (field.isAnnotationPresent(Peek.class)) { Peek ano = field.getAnnotation(Peek.class); + setPeekCommand("local", field.getName(), new DataGear(field.getType())); + } if (field.isAnnotationPresent(TakeFrom.class)) { + TakeFrom ano = field.getAnnotation(TakeFrom.class); + setTakeCommand(ano.value(), field.getName(), new DataGear(field.getType())); + } else if (field.isAnnotationPresent(PeekFrom.class)) { + PeekFrom ano = field.getAnnotation(PeekFrom.class); setPeekCommand(ano.value(), field.getName(), new DataGear(field.getType())); } - //ToDo:add remote peek } idg.finishInput(cgm, commandList);
--- a/src/main/java/christie/codegear/InputDataGear.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/codegear/InputDataGear.java Thu Feb 15 15:48:23 2018 +0900 @@ -1,7 +1,9 @@ package christie.codegear; import christie.annotation.Peek; +import christie.annotation.PeekFrom; import christie.annotation.Take; +import christie.annotation.TakeFrom; import christie.datagear.command.Command; import christie.datagear.dg.DataGear; @@ -33,8 +35,7 @@ } for(Command cm : commandList){ - cgm.getDGM(cm.toDgmName).take(cm); - //ToDo:add peek + cgm.getDGM(cm.toDgmName).runCommand(cm); } } @@ -63,7 +64,13 @@ } else if (field.isAnnotationPresent(Peek.class)){ Peek ano = field.getAnnotation(Peek.class); setField(field); - } //ToDo:implements RemotePut + } else if (field.isAnnotationPresent(TakeFrom.class)){ + TakeFrom ano = field.getAnnotation(TakeFrom.class); + setField(field); + } else if (field.isAnnotationPresent(PeekFrom.class)){ + PeekFrom ano = field.getAnnotation(PeekFrom.class); + setField(field); + } } }
--- a/src/main/java/christie/daemon/IncomingTcpConnection.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/daemon/IncomingTcpConnection.java Thu Feb 15 15:48:23 2018 +0900 @@ -7,6 +7,7 @@ import christie.datagear.command.Command; import christie.datagear.command.CommandType; import christie.datagear.RemoteMessage; +import christie.datagear.command.RemotePeekCommand; import christie.datagear.command.RemoteTakeCommand; import christie.datagear.dg.MessagePackDataGear; import org.msgpack.MessagePack; @@ -61,29 +62,19 @@ break; case REMOTEPEEK: + cgm.getLocalDGM().runCommand(new RemotePeekCommand(msg, connection)); + break; case REMOTETAKE: - - RemoteTakeCommand cmd = null; - try { - cmd = new RemoteTakeCommand(msg.fromDgmName, msg.key, Class.forName(msg.clazz), connection); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - - cgm.getLocalDGM().take(cmd); + cgm.getLocalDGM().runCommand(new RemoteTakeCommand(msg, connection)); break; case REPLY://待っていたwaitListに渡してcsにセット data = new byte[unpacker.readInt()]; connection.socket.getInputStream().read(data); + try { MessagePackDataGear dg = new MessagePackDataGear(data, Class.forName(msg.clazz)); - - DataGearManager dgm = cgm.getDGM(msg.fromDgmName); - Command cm = dgm.waitList.getAndRemoveCommand(msg.key); - cm.dg = dg; - dgm.runCommand(cm); - + cgm.getDGM(msg.fromDgmName).resolveWaitCommand(msg.key, dg); } catch (ClassNotFoundException e) { e.printStackTrace(); }
--- a/src/main/java/christie/datagear/Command/PutCommand.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/datagear/Command/PutCommand.java Thu Feb 15 15:48:23 2018 +0900 @@ -25,7 +25,7 @@ try { byte[] command = packer.write(createRemoteMessage()); - byte[] data = new MessagePackDataGear(dg.getData(), dg.getClazz()).getMessagePack(); + byte[] data = new MessagePackDataGear(dg.getData()).getMessagePack(); byte[] dataSize = packer.write(data.length); buf = ByteBuffer.allocate(command.length+dataSize.length+data.length);
--- a/src/main/java/christie/datagear/Command/RemotePeekCommand.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/datagear/Command/RemotePeekCommand.java Thu Feb 15 15:48:23 2018 +0900 @@ -1,10 +1,16 @@ package christie.datagear.command; import christie.daemon.Connection; +import christie.datagear.RemoteMessage; public class RemotePeekCommand extends RemoteTakeCommand { - public RemotePeekCommand(String fromDgmName, String key, Class clazz, Connection cn) { - super(fromDgmName, key, clazz, cn); + public RemotePeekCommand(RemoteMessage msg, Connection cn) { + super(msg, cn); + this.type = CommandType.REMOTEPEEK; + } + + public RemotePeekCommand(String fromDgmName, Command cm, Connection cn) { + super(fromDgmName, cm, cn); this.type = CommandType.REMOTEPEEK; } }
--- a/src/main/java/christie/datagear/Command/RemoteTakeCommand.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/datagear/Command/RemoteTakeCommand.java Thu Feb 15 15:48:23 2018 +0900 @@ -1,6 +1,7 @@ package christie.datagear.command; import christie.daemon.Connection; +import christie.datagear.RemoteMessage; import christie.datagear.dg.MessagePackDataGear; import org.msgpack.MessagePack; @@ -9,12 +10,25 @@ public class RemoteTakeCommand extends Command { - public RemoteTakeCommand(String fromDgmName, String key, Class clazz, Connection cn) { + public RemoteTakeCommand(RemoteMessage msg, Connection cn) { + this.type = CommandType.REMOTETAKE; + this.fromDgmName = msg.fromDgmName; + this.key = msg.key; + try { + this.clazz = Class.forName(msg.clazz); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + this.dg = new MessagePackDataGear(this.clazz); + this.connection = cn; + } + + public RemoteTakeCommand(String fromDgmName, Command cm, Connection cn) { this.type = CommandType.REMOTETAKE; this.fromDgmName = fromDgmName; - this.key = key; + this.key = cm.key; + this.clazz = cm.clazz; this.dg = new MessagePackDataGear(clazz); - this.clazz = clazz; this.connection = cn; }
--- a/src/main/java/christie/datagear/Command/ReplyCommand.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/datagear/Command/ReplyCommand.java Thu Feb 15 15:48:23 2018 +0900 @@ -5,11 +5,11 @@ public class ReplyCommand extends PutCommand { - public ReplyCommand(String fromDgmName, String key, DataGear dg, Connection cn){ - super(0, null, key, dg); - this.fromDgmName = fromDgmName; + public ReplyCommand(Command cm){ + super(0, null, cm.key, cm.dg); + this.fromDgmName = cm.fromDgmName; this.type = CommandType.REPLY; - this.connection = cn; + this.connection = cm.connection; } public void setData(Object data){
--- a/src/main/java/christie/datagear/DataGearManager.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/datagear/DataGearManager.java Thu Feb 15 15:48:23 2018 +0900 @@ -1,6 +1,7 @@ package christie.datagear; import christie.datagear.command.Command; +import christie.datagear.dg.DataGear; /** * Created by e125769 on 12/7/17. @@ -9,9 +10,7 @@ public abstract class DataGearManager { protected DataGears dataGears = new DataGears(); public WaitList waitList = new WaitList(); - public abstract void take(Command cm); public abstract void put(String key, Object data); - public abstract void metaPut(int cgmID, String key, Object data);//this is used from local only public abstract void runCommand(Command cm); - + public abstract void resolveWaitCommand(String key, DataGear dg); }
--- a/src/main/java/christie/datagear/LocalDataGearManager.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/datagear/LocalDataGearManager.java Thu Feb 15 15:48:23 2018 +0900 @@ -8,25 +8,11 @@ */ public class LocalDataGearManager extends DataGearManager { - public void take(Command cm) { - if (dataGears.containsKey(cm.key)) { - runCommand(cm); - } else { - waitList.add(cm); - } - } - public void put(String key, Object data) {//main use - DataGear dg = new DataGear(data, data.getClass()); + DataGear dg = new DataGear(data); put(key, dg); } - @Override - public void metaPut(int cgmID, String key, Object data) { - DataGear dg = new DataGear(data, data.getClass()); - runCommand(new PutCommand(cgmID, "local", key, dg)); - } - public void put(String key, DataGear dg){ runCommand(new PutCommand(1, "local", key, dg)); } @@ -42,23 +28,40 @@ break; case TAKE: - takeAndSetData(cm); - cm.setInputs(); + if (dataGears.containsKey(cm.key)) { + takeAndSetData(cm); + cm.setInputs(); + } else { + waitList.add(cm); + } break; case REMOTETAKE: - takeAndSetData(cm); - runCommand(new ReplyCommand(cm.fromDgmName, cm.key, cm.dg, cm.connection)); + if (dataGears.containsKey(cm.key)) { + takeAndSetData(cm); + runCommand(new ReplyCommand(cm)); + } else { + waitList.add(cm); + } break; case PEEK: - peekAndSetData(cm); - cm.setInputs(); + if (dataGears.containsKey(cm.key)) { + peekAndSetData(cm); + cm.setInputs(); + } else { + waitList.add(cm); + } break; - case REMOTEPEEK://ToDo:implement - //peekAndSetData(cm); - //runCommand(new RemotePeekCommand(cm.cgmID, cm.fromDgmName, cm.key, cm.dg, cm.connection)); + case REMOTEPEEK: + if (dataGears.containsKey(cm.key)) { + peekAndSetData(cm); + runCommand(new ReplyCommand(cm)); + } else { + waitList.add(cm); + } + break; case REPLY: cm.connection.write(cm); @@ -66,6 +69,11 @@ } } + @Override + public void resolveWaitCommand(String key, DataGear dg) { + + } + private void takeAndSetData(Command cm){ cm.dg.setData(dataGears.take(cm.key)); }
--- a/src/main/java/christie/datagear/RemoteDataGearManager.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/datagear/RemoteDataGearManager.java Thu Feb 15 15:48:23 2018 +0900 @@ -54,31 +54,31 @@ } @Override - public void take(Command cm) { - waitList.add(cm); - RemoteTakeCommand remoteCmd = new RemoteTakeCommand(connection.name, cm.key, cm.clazz, connection); - connection.write(remoteCmd); - } - - public void metaPut(int cgmID, String key, Object data){//meta - Command cm = new PutCommand(0, null, key, new DataGear(data, data.getClass())); + public void put(String key, Object data) { + Command cm = new PutCommand(0, null, key, new DataGear(data)); connection.write(cm); } @Override - public void put(String key, Object data) { - metaPut(1, key, data);//don't use cgmID + public void runCommand(Command cm) { + waitList.add(cm); + Command remoteCmd = null; + switch (cm.type) { + case PEEK: + remoteCmd = new RemotePeekCommand(connection.name, cm, connection); + break; + case TAKE: + remoteCmd = new RemoteTakeCommand(connection.name, cm, connection); + break; + } + connection.write(remoteCmd); } @Override - public void runCommand(Command cm) { - switch (cm.type) { - case PUT: - break; - case TAKE: - cm.cg.getIdg().setInputs(cm.key, cm.dg); - break; - } + public void resolveWaitCommand(String key, DataGear dg) { + Command cm = waitList.getAndRemoveCommand(key); + cm.dg = dg; + cm.setInputs(); } }
--- a/src/main/java/christie/datagear/dg/DataGear.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/datagear/dg/DataGear.java Thu Feb 15 15:48:23 2018 +0900 @@ -6,8 +6,8 @@ protected T data = null; protected Class<T> clazz = null; - public DataGear(T data, Class clazz) {//for normal - setClazz(clazz); + public DataGear(T data) {//for normal + setClazz(data.getClass()); setData(data); }
--- a/src/main/java/christie/datagear/dg/MessagePackDataGear.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/datagear/dg/MessagePackDataGear.java Thu Feb 15 15:48:23 2018 +0900 @@ -9,8 +9,8 @@ private int dataSize; private MessagePack packer = new MessagePack(); - public MessagePackDataGear(T data, Class clazz){ - super(data, clazz); + public MessagePackDataGear(T data){ + super(data); getMessagePack(); }
--- a/src/main/java/christie/test/Remote/CreateRemotePutTest.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/test/Remote/CreateRemotePutTest.java Thu Feb 15 15:48:23 2018 +0900 @@ -8,7 +8,7 @@ @Override protected void run(CodeGearManager cgm) {//できるだけ並列に走らせるためにStartCodeGearには書かない cgm.setup(new RemotePutTest()); - getDGM("remote").put("hoge", 1); + getDGM("remote").put("count", 1); getDGM("remote").put("cgmID", cgm.cgmID); } }
--- a/src/main/java/christie/test/Remote/RemotePutTest.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/test/Remote/RemotePutTest.java Thu Feb 15 15:48:23 2018 +0900 @@ -3,22 +3,21 @@ import christie.annotation.Take; import christie.codegear.CodeGear; import christie.codegear.CodeGearManager; -import christie.datagear.dg.DataGear; public class RemotePutTest extends CodeGear { - @Take("local") - public int hoge; + @Take + public int count; - @Take("local") + @Take public int cgmID; @Override protected void run(CodeGearManager cgm) { - if (hoge != 10){ - System.out.println(cgmID + " : " + hoge); + if (count != 10){ + System.out.println(cgmID + " : " + count); cgm.setup(new RemotePutTest()); - getDGM("remote").put("hoge", hoge + 1); + getDGM("remote").put("count", count + 1); getDGM("remote").put("cgmID", cgm.cgmID); } }
--- a/src/main/java/christie/test/RemoteTake/CreateRemoteTakeTest.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/test/RemoteTake/CreateRemoteTakeTest.java Thu Feb 15 15:48:23 2018 +0900 @@ -9,7 +9,7 @@ @Override protected void run(CodeGearManager cgm) { cgm.setup(new RemoteTakeTest()); - getLocalDGM().put("hoge", 1); + getLocalDGM().put("count", 1); getLocalDGM().put("cgmID", cgm.cgmID); } }
--- a/src/main/java/christie/test/RemoteTake/RemoteTakeTest.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/test/RemoteTake/RemoteTakeTest.java Thu Feb 15 15:48:23 2018 +0900 @@ -1,27 +1,26 @@ package christie.test.RemoteTake; -import christie.annotation.Take; +import christie.annotation.TakeFrom; import christie.codegear.CodeGear; import christie.codegear.CodeGearManager; -import christie.datagear.dg.DataGear; public class RemoteTakeTest extends CodeGear{ - @Take("remote") - public int hoge; + @TakeFrom("remote") + int count; - @Take("remote") - public int cgmID; + @TakeFrom("remote") + int cgmID; @Override protected void run(CodeGearManager cgm) { - if (hoge <= 10){ - System.out.println(cgmID + " : " +hoge); + if (count <= 10){ + System.out.println(cgmID + " : " + count); cgm.setup(new RemoteTakeTest()); } - getLocalDGM().put("hoge", hoge + 1); + getLocalDGM().put("count", count + 1); getLocalDGM().put("cgmID", cgm.cgmID); } }
--- a/src/main/java/christie/test/TestLocal/TestCodeGear.java Tue Feb 13 18:29:37 2018 +0900 +++ b/src/main/java/christie/test/TestLocal/TestCodeGear.java Thu Feb 15 15:48:23 2018 +0900 @@ -11,7 +11,7 @@ */ public class TestCodeGear extends CodeGear { - @Take("local") + @Take int hoge; public void run(CodeGearManager cgm){