/** * This file is part of CloudML [ http://cloudml.org ] * * Copyright (C) 2012 - SINTEF ICT * Contact: Franck Chauvel <franck.chauvel@sintef.no> * * Module: root * * CloudML is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * CloudML is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with CloudML. If not, see * <http://www.gnu.org/licenses/>. */ /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.cloudml.mrt.sample; import java.util.logging.Level; import java.util.logging.Logger; import org.cloudml.mrt.Coordinator; import org.cloudml.mrt.PeerStub; import org.cloudml.mrt.cmd.CmdWrapper; /** * * @author huis */ public class MrtModificationSample { private static final Logger journal = Logger.getLogger(MrtModificationSample.class.getName()); public static void main(String[] args){ sampleProgrammatic(); } public static void sampleProgrammatic(){ //Start a coordinator, which is the main wrapper of the cloudml model Coordinator coord = new Coordinator("sample://sensApp"); journal.log(Level.INFO, "started"); coord.start(); //Add a listener which collects and prints the changes every 0.5 second. PeerStub observer = new SystemOutPeerStub("Observer"); Object res = null; res = coord.process("!listenToAny ", observer); journal.log(Level.INFO, res.toString()); // Now starts the code to get and set attributes and properties. //A PeerStub identifies who launches the modifications PeerStub committer = new SystemOutPeerStub("Committer"); //A wrapper hides the complexity of invoking the coordinator CmdWrapper wrapper = new CmdWrapper(coord, committer); //Get a single property: Check the value before update res = wrapper.eGet("/componentInstances[name='sensapp-sl1']/status"); journal.log(Level.INFO, res.toString()); //Set a single property wrapper.eSet("/componentInstances[name='sensapp-sl1']", wrapper.makePair("status", "RUNNING")); //Check the updated value res = wrapper.eGet("/componentInstances[name='sensapp-sl1']/status"); journal.log(Level.INFO, res.toString()); //Set multiple properties together wrapper.eSet( "/componentInstances[name='sensapp-sl1']", wrapper.makePair("properties/cpu", "80"), wrapper.makePair("properties/cpu-timestamp", "13439083") ); //Get multiple properties together res = wrapper.eGet( "/componentInstances[name='sensapp-sl1']", "properties/cpu", "properties/cpu-timestamp", "status" ); journal.log(Level.INFO, res.toString()); } public static void sampleByString(){ //Start a coordinator, which is the main wrapper of the cloudml model Coordinator coord = new Coordinator("sample://sensApp"); journal.log(Level.INFO, "started"); coord.start(); //Add a listener which collects and prints the changes every 0.5 second. PeerStub observer = new SystemOutPeerStub("Observer"); Object res = null; res = coord.process("!listenToAny ", observer); journal.log(Level.INFO, res.toString()); PeerStub stub = new SystemOutPeerStub("SampleUser"); //Query the status of a component instance named 'sensapp-sl1' res = coord.process("!getSnapshot { path : \"/componentInstances[name='sensapp-sl1']/status\" } ", stub); journal.log(Level.INFO, res.toString()); //Update the value of status res = coord.process( "!commit { " + "modifications: [" + "!set { " + "parent : \"/componentInstances[name='sensapp-sl1']\", " + "keyValues : { status : RUNNING } " + "} " + "] " + "}", stub ); //Query again res = coord.process("!getSnapshot { path : \"/componentInstances[name='sensapp-sl1']/status\" } ", stub); journal.log(Level.INFO, res.toString()); // Add or update (if exists) two properties: cpu and cpu-timestamp res = coord.process("!commit { modifications: [!set { parent : \"/componentInstances[name='sensapp-sl1']\", keyValues : { cpu : 80, cpu-timestamp : 12343480 } } ] }", stub); // Query three properties together res = coord.process("!getSnapshot { path : \"/componentInstances[name='sensapp-sl1']\" , multimaps : { status : status, cpu : properties/cpu, timestamp : properties/cpu-timestamp } }", stub); journal.log(Level.INFO, res.toString()); journal.log(Level.INFO, "finished"); } }