ExecutionEngine InvokableProfile
From Gcube Wiki
Revision as of 12:01, 12 February 2010 by Giorgos.papanikos (Talk | contribs) (New page: =Java Object= As a concrete example, lets assume we want to profile the following class <source lang=java> public class Calculator implements IExecutionContextEnabled { private int salt...)
Java Object
As a concrete example, lets assume we want to profile the following class
public class Calculator implements IExecutionContextEnabled { private int salt = 0; private IExecutionContext Context = null; public Calculator(){} public Calculator(int salt) {this.salt = salt;} public static int GetProposedSalt(){return 10;} public int add(int []parts) { int count=0; for(int i=0;i<parts.length;i+=1) {count+=parts[i];} return count; } public int add(int [][][]parts) { int count=0; for(int i=0;i<parts.length;i+=1) { for(int q=0;q<parts[i].length;q+=1) { count+=this.add(parts[i][q]); } } return count; } public int[] add(int [][]parts) { int []res=new int[parts.length]; for(int i=0;i<parts.length;i+=1) { int count=0; for(int q=0;q<parts[i].length;q+=1) { count+=parts[i][q]; } res[i]=count; } return res; } public int add(CalculatorHolder []holders) { int count=0; for(int i=0;i<holders.length;i+=1) { count+=(holders[i].X+holders[i].Y); } return count; } public CalculatorHolder[] add(CalculatorHolder [][]holders) { CalculatorHolder []res=new CalculatorHolder[holders.length]; for(int i=0;i<holders.length;i+=1) { int count=0; for(int q=0;q<holders[i].length;q+=1){ count+=(holders[i][q].X+holders[i][q].Y); } res[i]=new CalculatorHolder(); res[i].Result=count; } return res; } public CalculatorHolder[][] random() { CalculatorHolder[][] ret=new CalculatorHolder[3][3]; ret[0][0]=new CalculatorHolder(1); ret[0][1]=new CalculatorHolder(2); ret[0][2]=new CalculatorHolder(3); ret[1][0]=new CalculatorHolder(4); ret[1][1]=new CalculatorHolder(5); ret[1][2]=new CalculatorHolder(6); ret[2][0]=new CalculatorHolder(7); ret[2][1]=new CalculatorHolder(8); ret[2][2]=new CalculatorHolder(9); return ret; } public int add(int x, Integer y) { if (this.Context != null) this.Context.Report("in the process of adding"); return x + y; } public int minus(int x, Integer y){ if (this.Context != null) this.Context.Report("in the process of subtracting"); return x - y; } public int multiply(int x, Integer y) { if (this.Context != null) this.Context.Report("in the process of multiplying"); return x * y; } public int multiplySalted(int x, Integer y) { if (this.Context != null) this.Context.Report("in the process of multiplying with salt"); return x * y * this.salt; } public CalculatorHolder multiplySaltedHolder(CalculatorHolder Holder) { if (this.Context != null) this.Context.Report("in the process of multiplying with salt with holder info"); Holder.Result = Holder.X * Holder.Y * Holder.Salt; return Holder; } public IExecutionContext GetExecutionContext() { return this.Context; } public void SetExecutionContext(IExecutionContext Context) { this.Context = Context; } }
The respective Invokable Profile for this Java Object could be the following
<?xml version="1.0" encoding="UTF-8"?> <execprf:InvocableProfile xmlns:execprf="http://profile.execution.madgik.di.uoa.gr" type="Pojo"> <execprf:item> <execprf:className value="gr.uoa.di.madgik.callables.test.Calculator"/> <execprf:context supported="true"> <execprf:type value="Simple"/> <execprf:keepAlive value="false"/> <execprf:reportsProgress value="true"/> <execprf:gRSProxy value="false"/> </execprf:context> </execprf:item> <execprf:calls> <execprf:call type="Simple"> <execprf:method name="gr.uoa.di.madgik.callables.test.Calculator"/> <execprf:signature>public gr.uoa.di.madgik.callables.test.Calculator()</execprf:signature> </execprf:call> <execprf:call type="Simple"> <execprf:method name="gr.uoa.di.madgik.callables.test.Calculator"/> <execprf:signature>public gr.uoa.di.madgik.callables.test.Calculator(int)</execprf:signature> <execprf:argument type="Simple"> <execprf:order value="0"/> <execprf:name value="salt"/> <execprf:token value="[execprfBeginToken]salt[execprfEndToken]"/> <execprf:type value="int"/> <execprf:engineType value="IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:argument> </execprf:call> <execprf:call type="Simple"> <execprf:method name="minus"/> <execprf:signature>public int gr.uoa.di.madgik.callables.test.Calculator.minus(int,java.lang.Integer)</execprf:signature> <execprf:argument type="Simple"> <execprf:order value="0"/> <execprf:name value="x"/> <execprf:token value="[execprfBeginToken]x[execprfEndToken]"/> <execprf:type value="int"/> <execprf:engineType value="IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:argument> <execprf:argument type="Simple"> <execprf:order value="1"/> <execprf:name value="y"/> <execprf:token value="[execprfBeginToken]y[execprfEndToken]"/> <execprf:type value="java.lang.Integer"/> <execprf:engineType value="IntegerClass"/> <execprf:converter value="none"/> </execprf:argument> <execprf:return> <execprf:type value="int"/> <execprf:engineType value="IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:return> </execprf:call> <execprf:call type="Simple"> <execprf:method name="GetProposedSalt"/> <execprf:signature>public static int gr.uoa.di.madgik.callables.test.Calculator.GetProposedSalt()</execprf:signature> <execprf:return> <execprf:type value="int"/> <execprf:engineType value="IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:return> </execprf:call> <execprf:call type="Simple"> <execprf:method name="multiplySalted"/> <execprf:signature>public int gr.uoa.di.madgik.callables.test.Calculator.multiplySalted(int,java.lang.Integer)</execprf:signature> <execprf:argument type="Simple"> <execprf:order value="0"/> <execprf:name value="x"/> <execprf:token value="[execprfBeginToken]x[execprfEndToken]"/> <execprf:type value="int"/> <execprf:engineType value="IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:argument> <execprf:argument type="Simple"> <execprf:order value="1"/> <execprf:name value="y"/> <execprf:token value="[execprfBeginToken]y[execprfEndToken]"/> <execprf:type value="java.lang.Integer"/> <execprf:engineType value="IntegerClass"/> <execprf:converter value="none"/> </execprf:argument> <execprf:return> <execprf:type value="int"/> <execprf:engineType value="IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:return> </execprf:call> <execprf:call type="Simple"> <execprf:method name="multiplySaltedHolder"/> <execprf:signature>public gr.uoa.di.madgik.callables.test.CalculatorHolder gr.uoa.di.madgik.callables.test.Calculator.multiplySaltedHolder(gr.uoa.di.madgik.callables.test.CalculatorHolder)</execprf:signature> <execprf:argument type="Simple"> <execprf:order value="0"/> <execprf:name value="Holder"/> <execprf:token value="[execprfBeginToken]Holder[execprfEndToken]"/> <execprf:type value="gr.uoa.di.madgik.callables.test.CalculatorHolder"/> <execprf:engineType value="Convertable"/> <execprf:converter value="gr.uoa.di.madgik.execution.test.CalculatorHolderConverter"/> </execprf:argument> <execprf:return> <execprf:type value="gr.uoa.di.madgik.callables.test.CalculatorHolder"/> <execprf:engineType value="Convertable"/> <execprf:converter value="gr.uoa.di.madgik.execution.test.CalculatorHolderConverter"/> </execprf:return> </execprf:call> <execprf:call type="Simple"> <execprf:method name="add"/> <execprf:signature>public int gr.uoa.di.madgik.callables.test.Calculator.add(int[])</execprf:signature> <execprf:argument type="Simple"> <execprf:order value="0"/> <execprf:name value="parts"/> <execprf:token value="[execprfBeginToken]parts[execprfEndToken]"/> <execprf:type value="[I"/> <execprf:engineType value="[IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:argument> <execprf:return> <execprf:type value="int"/> <execprf:engineType value="IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:return> </execprf:call> <execprf:call type="Simple"> <execprf:method name="add"/> <execprf:signature>public int gr.uoa.di.madgik.callables.test.Calculator.add(int[][][])</execprf:signature> <execprf:argument type="Simple"> <execprf:order value="0"/> <execprf:name value="parts"/> <execprf:token value="[execprfBeginToken]parts[execprfEndToken]"/> <execprf:type value="[[[I"/> <execprf:engineType value="[[[IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:argument> <execprf:return> <execprf:type value="int"/> <execprf:engineType value="IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:return> </execprf:call> <execprf:call type="Simple"> <execprf:method name="add"/> <execprf:signature>public int[] gr.uoa.di.madgik.callables.test.Calculator.add(int[][])</execprf:signature> <execprf:argument type="Simple"> <execprf:order value="0"/> <execprf:name value="parts"/> <execprf:token value="[execprfBeginToken]parts[execprfEndToken]"/> <execprf:type value="[[I"/> <execprf:engineType value="[[IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:argument> <execprf:return> <execprf:type value="[I"/> <execprf:engineType value="[IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:return> </execprf:call> <execprf:call type="Simple"> <execprf:method name="add"/> <execprf:signature>public int gr.uoa.di.madgik.callables.test.Calculator.add(gr.uoa.di.madgik.callables.test.CalculatorHolder[])</execprf:signature> <execprf:argument type="Simple"> <execprf:order value="0"/> <execprf:name value="holders"/> <execprf:token value="[execprfBeginToken]holders[execprfEndToken]"/> <execprf:type value="[Lgr.uoa.di.madgik.callables.test.CalculatorHolder;"/> <execprf:engineType value="[Convertable"/> <execprf:converter value="gr.uoa.di.madgik.execution.test.CalculatorHolderConverter"/> </execprf:argument> <execprf:return> <execprf:type value="int"/> <execprf:engineType value="IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:return> </execprf:call> <execprf:call type="Simple"> <execprf:method name="add"/> <execprf:signature>public gr.uoa.di.madgik.callables.test.CalculatorHolder[] gr.uoa.di.madgik.callables.test.Calculator.add(gr.uoa.di.madgik.callables.test.CalculatorHolder[][])</execprf:signature> <execprf:argument type="Simple"> <execprf:order value="0"/> <execprf:name value="holders"/> <execprf:token value="[execprfBeginToken]holders[execprfEndToken]"/> <execprf:type value="[[Lgr.uoa.di.madgik.callables.test.CalculatorHolder;"/> <execprf:engineType value="[[Convertable"/> <execprf:converter value="gr.uoa.di.madgik.execution.test.CalculatorHolderConverter"/> </execprf:argument> <execprf:return> <execprf:type value="[Lgr.uoa.di.madgik.callables.test.CalculatorHolder;"/> <execprf:engineType value="[Convertable"/> <execprf:converter value="gr.uoa.di.madgik.execution.test.CalculatorHolderConverter"/> </execprf:return> </execprf:call> <execprf:call type="Simple"> <execprf:method name="add"/> <execprf:signature>public int gr.uoa.di.madgik.callables.test.Calculator.add(int,java.lang.Integer)</execprf:signature> <execprf:argument type="Simple"> <execprf:order value="0"/> <execprf:name value="x"/> <execprf:token value="[execprfBeginToken]x[execprfEndToken]"/> <execprf:type value="int"/> <execprf:engineType value="IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:argument> <execprf:argument type="Simple"> <execprf:order value="1"/> <execprf:name value="y"/> <execprf:token value="[execprfBeginToken]y[execprfEndToken]"/> <execprf:type value="java.lang.Integer"/> <execprf:engineType value="IntegerClass"/> <execprf:converter value="none"/> </execprf:argument> <execprf:return> <execprf:type value="int"/> <execprf:engineType value="IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:return> </execprf:call> <execprf:call type="Simple"> <execprf:method name="random"/> <execprf:signature>public gr.uoa.di.madgik.callables.test.CalculatorHolder[][] gr.uoa.di.madgik.callables.test.Calculator.random()</execprf:signature> <execprf:return> <execprf:type value="[[Lgr.uoa.di.madgik.callables.test.CalculatorHolder;"/> <execprf:engineType value="[[Convertable"/> <execprf:converter value="gr.uoa.di.madgik.execution.test.CalculatorHolderConverter"/> </execprf:return> </execprf:call> <execprf:call type="Simple"> <execprf:method name="multiply"/> <execprf:signature>public int gr.uoa.di.madgik.callables.test.Calculator.multiply(int,java.lang.Integer)</execprf:signature> <execprf:argument type="Simple"> <execprf:order value="0"/> <execprf:name value="x"/> <execprf:token value="[execprfBeginToken]x[execprfEndToken]"/> <execprf:type value="int"/> <execprf:engineType value="IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:argument> <execprf:argument type="Simple"> <execprf:order value="1"/> <execprf:name value="y"/> <execprf:token value="[execprfBeginToken]y[execprfEndToken]"/> <execprf:type value="java.lang.Integer"/> <execprf:engineType value="IntegerClass"/> <execprf:converter value="none"/> </execprf:argument> <execprf:return> <execprf:type value="int"/> <execprf:engineType value="IntegerPrimitive"/> <execprf:converter value="none"/> </execprf:return> </execprf:call> </execprf:calls> </execprf:InvocableProfile>
Moving into a more complex example let's assume we want to profile the following class
public class ReflectablesOperator { public ReflectablesOperator(){} public PrimitiveContainer ProduceReflectable() { PrimitiveContainer cont=new PrimitiveContainer(); cont.setBooleanClassField(true); cont.setBooleanPrimitiveField(false); cont.setDoubleClassField(4.6); cont.setDoublePrimitiveField(5.2); cont.setFloatClassField(2.4f); cont.setFloatPrimitiveField(3.6f); cont.setIntegerClassField(3); cont.setIntegerPrimitiveField(4); cont.setStringField("Hello world"); cont.setPoxyLocatorField(new LocalProxyLocator()); cont.setStoreLocatorField(new LocalStoreLocator()); return cont; } public PrimitiveContainer[] ArrayProduceReflectable() { PrimitiveContainer cont=this.ProduceReflectable(); PrimitiveContainer[] arr=new PrimitiveContainer[]{cont,cont,cont}; return arr; } public String ConsumeReflectable(PrimitiveContainer cont) {return cont.toString();} public String ArrayConsumeReflectable(PrimitiveContainer[] cont) { StringBuilder buf=new StringBuilder(); buf.append("<array>"); for(PrimitiveContainer cont1 : cont) { buf.append(cont1.toString()); } buf.append("</array>"); return buf.toString(); } public String ConsumeReflectable(SubPrimitiveContainer cont) { return cont.toString(); } public String ArrayConsumeReflectable(SubPrimitiveContainer[] cont) { StringBuilder buf=new StringBuilder(); buf.append("<array>"); for(SubPrimitiveContainer cont1 : cont) { buf.append(cont1.toString()); } buf.append("</array>"); return buf.toString(); } public ArrayOfPrimitiveContainer ProduceArrayofPrimitives() { ArrayOfPrimitiveContainer cont=new ArrayOfPrimitiveContainer(); cont.setIntegerPrimitiveArray(new int[]{1,2,3,4,5,6,7,8,9}); cont.setIntegerPrimitiveMultiArray(new int[][][][]{ { { {1,2,3},{1,2,3},{1,2,3} }, { {1,2,3},{1,2,3},{1,2,3} }, { {1,2,3},{1,2,3},{1,2,3} } }, { { {1,2,3},{1,2,3},{1,2,3} }, { {1,2,3},{1,2,3},{1,2,3} }, { {1,2,3},{1,2,3},{1,2,3} } }, { { {1,2,3},{1,2,3},{1,2,3} }, { {1,2,3},{1,2,3},{1,2,3} }, { {1,2,3},{1,2,3},{1,2,3} } } }); return cont; } public ArrayOfPrimitiveContainer[] ArrayProduceArrayofPrimitives() { ArrayOfPrimitiveContainer cont=new ArrayOfPrimitiveContainer(); cont.setIntegerPrimitiveArray(new int[]{1,2,3,4,5,6,7,8,9}); cont.setIntegerPrimitiveMultiArray(new int[][][][]{ { { {1,2,3},{1,2,3},{1,2,3} }, { {1,2,3},{1,2,3},{1,2,3} }, { {1,2,3},{1,2,3},{1,2,3} } }, { { {1,2,3},{1,2,3},{1,2,3} }, { {1,2,3},{1,2,3},{1,2,3} }, { {1,2,3},{1,2,3},{1,2,3} } }, { { {1,2,3},{1,2,3},{1,2,3} }, { {1,2,3},{1,2,3},{1,2,3} }, { {1,2,3},{1,2,3},{1,2,3} } } }); return new ArrayOfPrimitiveContainer[]{cont,cont,cont}; } public String ConsumeArrayofPrimitives(ArrayOfPrimitiveContainer cont){ return cont.toString(); } public String ArrayConsumeArrayofPrimitives(ArrayOfPrimitiveContainer []cont) { StringBuilder buf=new StringBuilder(); buf.append("<array>"); for(ArrayOfPrimitiveContainer cont1 : cont) { buf.append(cont1.toString()); } buf.append("</array>"); return buf.toString(); } public ArrayOfContainers ProduceArrayofContainers() { PrimitiveContainer cont=this.ProduceReflectable(); ArrayOfContainers cont2=new ArrayOfContainers(); cont2.setCont(cont); cont2.setOneDContainers(new PrimitiveContainer[]{cont,cont,cont}); cont2.setMultiDContainers(new PrimitiveContainer[][][][]{ { { {cont,cont,cont},{cont,cont,cont},{cont,cont,cont} }, { {cont,cont,cont},{cont,cont,cont},{cont,cont,cont} }, { {cont,cont,cont},{cont,cont,cont},{cont,cont,cont} } } , { { {cont,cont,cont},{cont,cont,cont},{cont,cont,cont} }, { {cont,cont,cont},{cont,cont,cont},{cont,cont,cont} }, { {cont,cont,cont},{cont,cont,cont},{cont,cont,cont} } }}); return cont2; } public ArrayOfContainers []ArrayProduceArrayofContainers() { PrimitiveContainer cont=this.ProduceReflectable(); ArrayOfContainers cont2=new ArrayOfContainers(); cont2.setCont(cont); cont2.setOneDContainers(new PrimitiveContainer[]{cont,cont,cont}); cont2.setMultiDContainers(new PrimitiveContainer[][][][]{ { { {cont,cont,cont},{cont,cont,cont},{cont,cont,cont} }, { {cont,cont,cont},{cont,cont,cont},{cont,cont,cont} }, { {cont,cont,cont},{cont,cont,cont},{cont,cont,cont} } } , { { {cont,cont,cont},{cont,cont,cont},{cont,cont,cont} }, { {cont,cont,cont},{cont,cont,cont},{cont,cont,cont} }, { {cont,cont,cont},{cont,cont,cont},{cont,cont,cont} } }}); return new ArrayOfContainers[]{cont2,cont2,cont2}; } public String ConsumeArrayofContainers(ArrayOfContainers cont) { return cont.toString(); } public String ArrayConsumeArrayofContainers(ArrayOfContainers []cont) { StringBuilder buf=new StringBuilder(); buf.append("<array>"); for(ArrayOfContainers cont1 : cont) { buf.append(cont1.toString()); } buf.append("</array>"); return buf.toString(); } public String ConsumeArrayofSubContainers(ArrayOfSubContainers cont) { return cont.toString(); } public String ArrayConsumeArrayofSubContainers(ArrayOfSubContainers []cont) { StringBuilder buf=new StringBuilder(); buf.append("<array>"); for(ArrayOfSubContainers cont1 : cont) { buf.append(cont1.toString()); } buf.append("</array>"); return buf.toString(); } }