# HG changeset patch # User akahori # Date 1552395074 -32400 # Node ID 3bddbfd6ea02c01868bc1fa6b62cc0892f4dd9ce # Parent 7d08e76d2553c60daccbed0d75bfafe9ae6b8822 fix command builder diff -r 7d08e76d2553 -r 3bddbfd6ea02 src/main/java/christie/codegear/CodeGear.java --- a/src/main/java/christie/codegear/CodeGear.java Tue Mar 12 19:35:10 2019 +0900 +++ b/src/main/java/christie/codegear/CodeGear.java Tue Mar 12 21:51:14 2019 +0900 @@ -21,7 +21,6 @@ private CodeGearManager cgm; private DataGearManager localDGM; private CodeGearExecutor cge; - private static final CommandBuilder cb = new CommandBuilder(); protected abstract void run(CodeGearManager cgm); @@ -55,12 +54,12 @@ } public void setCommand(CommandType type, String toDgmName, String key, DataGear dg){ - Command command = cb.init(type).cg(this) - .cgmID(cgm.cgmID) - .toDgmName(toDgmName) - .key(key) - .dg(dg) - .build(); + Command command = new CommandBuilder().init(type).cg(this) + .cgmID(cgm.cgmID) + .toDgmName(toDgmName) + .key(key) + .dg(dg) + .build(); commandList.add(command); } diff -r 7d08e76d2553 -r 3bddbfd6ea02 src/main/java/christie/daemon/IncomingTcpConnection.java --- a/src/main/java/christie/daemon/IncomingTcpConnection.java Tue Mar 12 19:35:10 2019 +0900 +++ b/src/main/java/christie/daemon/IncomingTcpConnection.java Tue Mar 12 21:51:14 2019 +0900 @@ -20,8 +20,6 @@ CodeGearManager cgm; Connection connection; private MessagePack packer = new MessagePack(); - private static final CommandBuilder cb = new CommandBuilder(); - public IncomingTcpConnection(Connection connection) { this.connection = connection; @@ -53,9 +51,12 @@ case PUT: data = new byte[unpacker.readInt()]; connection.socket.getInputStream().read(data); + try { MessagePackDataGear dg = new MessagePackDataGear(data, Class.forName(msg.clazz)); + //System.out.println(Class.forName(msg.clazz)); cgm.getLocalDGM().put(msg.key, dg); + } catch (ClassNotFoundException e) { e.printStackTrace(); } @@ -64,11 +65,16 @@ case REMOTEPEEK: case REMOTETAKE: - Command cm = cb.init(type).fromDgmName(msg.fromDgmName) - .key(msg.key) - .clazz(Class.forName(msg.clazz)) - .connection(connection).build(); - cgm.getLocalDGM().runCommand(cm); + try { + Command cm = new CommandBuilder().init(type).fromDgmName(msg.fromDgmName) + .key(msg.key) + .clazz(Class.forName(msg.clazz)) + .connection(connection).build(); + cgm.getLocalDGM().runCommand(cm); + + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } break; case REPLY://待っていたwaitListに渡してcsにセット @@ -92,8 +98,6 @@ return; } catch (IOException e) { e.printStackTrace(); - } catch (ClassNotFoundException e) { - e.printStackTrace(); } } } diff -r 7d08e76d2553 -r 3bddbfd6ea02 src/main/java/christie/datagear/DataGearManager.java --- a/src/main/java/christie/datagear/DataGearManager.java Tue Mar 12 19:35:10 2019 +0900 +++ b/src/main/java/christie/datagear/DataGearManager.java Tue Mar 12 21:51:14 2019 +0900 @@ -12,7 +12,6 @@ public abstract class DataGearManager { protected DataGears dataGears = new DataGears(); public WaitList waitList = new WaitList(); - protected CommandBuilder cb = new CommandBuilder(); public abstract void put(String key, Object data); public abstract void runCommand(Command cm); public abstract void resolveWaitCommand(String key, DataGear dg); diff -r 7d08e76d2553 -r 3bddbfd6ea02 src/main/java/christie/datagear/LocalDataGearManager.java --- a/src/main/java/christie/datagear/LocalDataGearManager.java Tue Mar 12 19:35:10 2019 +0900 +++ b/src/main/java/christie/datagear/LocalDataGearManager.java Tue Mar 12 21:51:14 2019 +0900 @@ -16,7 +16,12 @@ } public void put(String key, DataGear dg) { - runCommand(cb.init(CommandType.PUT).cgmID(1).toDgmName("local").key(key).dg(dg).build()); + Command cm = new CommandBuilder().init(CommandType.PUT).cgmID(1) + .toDgmName("local") + .key(key) + .dg(dg) + .build(); + runCommand(cm); } public void runCommand(Command cm){ diff -r 7d08e76d2553 -r 3bddbfd6ea02 src/main/java/christie/datagear/RemoteDataGearManager.java --- a/src/main/java/christie/datagear/RemoteDataGearManager.java Tue Mar 12 19:35:10 2019 +0900 +++ b/src/main/java/christie/datagear/RemoteDataGearManager.java Tue Mar 12 21:51:14 2019 +0900 @@ -61,9 +61,9 @@ @Override public void put(String key, Object data) { - Command cm = cb.init(CommandType.PUT).key(key) - .dg(new DataGear(data)) - .build(); + Command cm = new CommandBuilder().init(CommandType.PUT).key(key) + .dg(new DataGear(data)) + .build(); // これ入れないと, connectionがnullの時があるのでしょうがなくwait. // コンストラクタで呼び出されるThreadをやめて実効すればいんだけどね... if(!connect) connectWait(); @@ -83,11 +83,11 @@ type = CommandType.REMOTETAKE; break; } - Command remoteCmd = cb.init(type).fromDgmName(connection.name) - .key(cm.key) - .clazz(cm.clazz) - .connection(connection) - .build(); + Command remoteCmd = new CommandBuilder().init(type).fromDgmName(connection.name) + .key(cm.key) + .clazz(cm.clazz) + .connection(connection) + .build(); connection.write(remoteCmd); } @@ -102,13 +102,13 @@ @Override public void finish() { - Command cmd = cb.init(CommandType.FINISH).build(); + Command cmd = new CommandBuilder().init(CommandType.FINISH).build(); connection.sendCommand(cmd); } @Override public void close() { - Command cmd = cb.init(CommandType.CLOSE).connection(connection).build(); + Command cmd = new CommandBuilder().init(CommandType.CLOSE).connection(connection).build(); connection.sendCommand(cmd); } diff -r 7d08e76d2553 -r 3bddbfd6ea02 src/main/java/christie/datagear/command/Command.java --- a/src/main/java/christie/datagear/command/Command.java Tue Mar 12 19:35:10 2019 +0900 +++ b/src/main/java/christie/datagear/command/Command.java Tue Mar 12 21:51:14 2019 +0900 @@ -12,7 +12,7 @@ public String key = null; public String toDgmName = null;// for take public String fromDgmName = "local";//for remotetake/reply - public int cgmID = -1;// for local meta + public Integer cgmID = -1;// for local meta public CodeGear cg = null;//for localtake public DataGear dg = null;//for put/localtake/reply public Class clazz = null;// for remote @@ -52,7 +52,12 @@ this.dg.setData(obj); } - + @Override + public String toString() { + return "Command : type = " + type + ", key = " + key + " toDgmName = " + + toDgmName + " fromDgmName = " + fromDgmName + " cgmID = " + cgmID + + " cg = " + cg + " dg = " + dg + " clazz = " + clazz + " coonection = " + connection ; + } //public void removeInputs(){ //cg.getIdg().removeInputs(key); diff -r 7d08e76d2553 -r 3bddbfd6ea02 src/main/java/christie/datagear/command/CommandBuilder.java --- a/src/main/java/christie/datagear/command/CommandBuilder.java Tue Mar 12 19:35:10 2019 +0900 +++ b/src/main/java/christie/datagear/command/CommandBuilder.java Tue Mar 12 21:51:14 2019 +0900 @@ -6,25 +6,23 @@ public class CommandBuilder { protected CommandType type; // need - protected String key; - protected String toDgmName;// for take - protected String fromDgmName;//for remotetake/reply - protected int cgmID = -1;// for local meta + protected String key = null; + protected String toDgmName = null;// for take + protected String fromDgmName = "local";//for remotetake/reply + protected Integer cgmID = null;// for local meta protected CodeGear cg = null;//for localtake protected DataGear dg = null;//for put/localtake/reply protected Class clazz = null;// for remote protected Connection connection = null;//for reply - private Object _lock = new Object(); - private Boolean sync = false; + private CommandFactory factory = new CommandFactory(); - public synchronized CommandBuilder init(CommandType type){ - //lock(); + public CommandBuilder init(CommandType type){ this.type = type; this.key = null; this.toDgmName = null; this.fromDgmName = "local"; - this.cgmID = -1; + this.cgmID = null; this.cg = null; this.dg = null; this.clazz = null; @@ -75,68 +73,39 @@ public Command build(){ if(type == null) throw new NullPointerException(); - return CommandFactory.getCommand(type, this); + return factory.getCommand(type, this); } - public void lock(){ - synchronized (_lock){ - while(sync){ - try { - _lock.wait(); - } catch (InterruptedException e) { - } - } - } - sync = true; - } + private class CommandFactory{ - public void unLock(){ - synchronized (_lock){ - _lock.notify(); - sync = false; - } - } - - private static class CommandFactory{ - - public static Command getCommand(CommandType type, CommandBuilder cb) { + public Command getCommand(CommandType type, CommandBuilder cb) { switch (type) { case PUT: //check need param - if (cb.key == null || cb.dg == null) { - throw new NullPointerException(); - } + + checkNull(cb.key, cb.dg); return new PutCommand(cb); case TAKE: //check need param - if (cb.cg == null || cb.cgmID == -1 || cb.toDgmName == null || cb.key == null || cb.dg == null) { - throw new NullPointerException(); - } + checkNull(cb.cgmID, cb.cg, cb.toDgmName, cb.key, cb.dg); return new TakeCommand(cb); case PEEK: - if (cb.cg == null || cb.cgmID == -1 || cb.toDgmName == null || cb.key == null || cb.dg == null) { - throw new NullPointerException(); - } + checkNull(cb.cgmID, cb.cg, cb.toDgmName, cb.key, cb.dg); return new PeekCommand(cb); case REMOTETAKE: - if (cb.fromDgmName.equals("local") || cb.key == null || cb.connection == null || cb.clazz == null) { - throw new NullPointerException(); - } + if (cb.fromDgmName.equals("local")) throw new NullPointerException(); + checkNull(cb.key, cb.connection, cb.clazz); return new RemoteTakeCommand(cb); case REMOTEPEEK: - if (cb.fromDgmName.equals("local") || cb.key == null || cb.connection == null || cb.clazz == null) { - throw new NullPointerException(); - } + if (cb.fromDgmName.equals("local")) throw new NullPointerException(); + checkNull(cb.key, cb.connection, cb.clazz); return new RemotePeekCommand(cb); case REPLY: - if (cb.fromDgmName.equals("local") || cb.key == null || cb.dg == null || cb.connection == null) { - throw new NullPointerException(); - } + if (cb.fromDgmName.equals("local")) throw new NullPointerException(); + checkNull(cb.key, cb.connection, cb.dg); return new ReplyCommand(cb); case CLOSE: - if (cb.connection == null) { - throw new NullPointerException(); - } + checkNull(cb.connection); return new CloseCommand(cb); case FINISH: return new FinishCommand(cb); @@ -144,6 +113,16 @@ //cb.unLock(); return null; } + + public void checkNull(Object... params){ + for(Object param: params){ + if(param == null){ + System.out.println(key + dg); + throw new NullPointerException(); + + } + } + } } } diff -r 7d08e76d2553 -r 3bddbfd6ea02 src/main/java/christie/datagear/command/PutCommand.java --- a/src/main/java/christie/datagear/command/PutCommand.java Tue Mar 12 19:35:10 2019 +0900 +++ b/src/main/java/christie/datagear/command/PutCommand.java Tue Mar 12 21:51:14 2019 +0900 @@ -13,7 +13,9 @@ public PutCommand(CommandBuilder cb){ super(cb); + if(dg == null) System.out.println(toString()); this.clazz = dg.getClazz(); + } @Override diff -r 7d08e76d2553 -r 3bddbfd6ea02 src/main/java/christie/datagear/command/TakeCommand.java --- a/src/main/java/christie/datagear/command/TakeCommand.java Tue Mar 12 19:35:10 2019 +0900 +++ b/src/main/java/christie/datagear/command/TakeCommand.java Tue Mar 12 21:51:14 2019 +0900 @@ -10,7 +10,7 @@ public class TakeCommand extends Command { - public TakeCommand(CommandBuilder cb){ + public TakeCommand(CommandBuilder cb) { super(cb); this.clazz = dg.getClazz(); } @@ -22,16 +22,7 @@ @Override public void execute() { - setInputs(); - } + cg.getIdg().setInputs(key, dg); - /*@Override - public void run(Object dataGear) { - setDg(dataGear); - - }*/ - - public void setInputs(){ - cg.getIdg().setInputs(key, dg); } } diff -r 7d08e76d2553 -r 3bddbfd6ea02 src/main/java/christie/datagear/dg/DataGear.java --- a/src/main/java/christie/datagear/dg/DataGear.java Tue Mar 12 19:35:10 2019 +0900 +++ b/src/main/java/christie/datagear/dg/DataGear.java Tue Mar 12 21:51:14 2019 +0900 @@ -62,4 +62,8 @@ return data; } + @Override + public String toString() { + return "DataGear : classname " + clazz; + } }