/* * Licensed to the Apache Software Foundation (ASF) under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional information regarding * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the License. You may obtain a * copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package org.apache.geode.internal.cache.execute; import java.io.Serializable; import java.util.Properties; import org.apache.geode.LogWriter; import org.apache.geode.cache.execute.FunctionAdapter; import org.apache.geode.cache.execute.FunctionContext; import org.apache.geode.distributed.DistributedSystem; import org.apache.geode.distributed.internal.InternalDistributedSystem; public class TestFunction extends FunctionAdapter { public static final String TEST_FUNCTION1 = "TestFunction1"; public static final String TEST_FUNCTION2 = "TestFunction2"; public static final String TEST_FUNCTION3 = "TestFunction3"; public static final String TEST_FUNCTION4 = "TestFunction4"; public static final String TEST_FUNCTION5 = "TestFunction5"; private final Properties props; private static final String ID = "id"; private static final String HAVE_RESULTS = "haveResults"; public TestFunction() { super(); this.props = new Properties(); } public Properties getProps() { return props; } public TestFunction(boolean haveResults, String id) { this.props = new Properties(); this.props.setProperty(HAVE_RESULTS, Boolean.toString(haveResults)); this.props.setProperty(ID, id); } public void execute(FunctionContext context) { String id = this.props.getProperty(ID); if (id.equals(TEST_FUNCTION1)) { execute1(context); } else if (id.equals(TEST_FUNCTION2)) { execute2(context); } else if (id.equals(TEST_FUNCTION3)) { execute2(context); } else if (id.equals(TEST_FUNCTION4)) { execute2(context); } else if (id.equals(TEST_FUNCTION5)) { execute5(context); } } public void execute1(FunctionContext context) { DistributedSystem ds = InternalDistributedSystem.getAnyInstance(); LogWriter logger = ds.getLogWriter(); logger.info("Executing executeException in TestFunction on Member : " + ds.getDistributedMember() + "with Context : " + context); context.getResultSender().lastResult((Serializable) context.getArguments()); } public void execute2(FunctionContext context) { DistributedSystem ds = InternalDistributedSystem.getAnyInstance(); LogWriter logger = ds.getLogWriter(); try { synchronized (this) { this.wait(20000000); } } catch (InterruptedException e) { } context.getResultSender().lastResult(Boolean.TRUE); } public void execute5(FunctionContext context) { DistributedSystem ds = InternalDistributedSystem.getAnyInstance(); LogWriter logger = ds.getLogWriter(); if (this.props.get("TERMINATE") != null && this.props.get("TERMINATE").equals("YES")) { logger.info("Function Terminated"); } else { try { synchronized (this) { logger.info("Function Running"); this.wait(20000); } } catch (InterruptedException e) { } } context.getResultSender().lastResult(Boolean.TRUE); } public String getId() { return this.props.getProperty(ID); } public boolean hasResult() { return Boolean.valueOf(this.props.getProperty(HAVE_RESULTS)).booleanValue(); } /* * (non-Javadoc) * * @see org.apache.geode.internal.cache.xmlcache.Declarable2#getConfig() */ public Properties getConfig() { return this.props; } /* * (non-Javadoc) * * @see org.apache.geode.cache.Declarable#init(java.util.Properties) */ public void init(Properties props) { this.props.putAll(props); } }