blob: d7cd753241bb6a66e3721f77384d1af30640c9c5 [file] [log] [blame]
/*
* 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.ignite.snippets.services;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteServices;
import org.apache.ignite.Ignition;
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.services.ServiceConfiguration;
import org.junit.jupiter.api.Test;
public class ServiceExample {
@Test
void serviceExample() {
//tag::start-with-method[]
Ignite ignite = Ignition.start();
//get the services interface associated with all server nodes
IgniteServices services = ignite.services();
//start a node singleton
services.deployClusterSingleton("myCounterService", new MyCounterServiceImpl());
//end::start-with-method[]
//tag::access-service[]
//access the service by name
MyCounterService counterService = ignite.services().serviceProxy("myCounterService",
MyCounterService.class, false); //non-sticky proxy
//call a service method
counterService.increment();
//end::access-service[]
// Print the latest counter value from our counter service.
System.out.println("Incremented value : " + counterService.get());
//tag::undeploy[]
services.cancel("myCounterService");
//end::undeploy[]
ignite.close();
}
@Test
void deployWithClusterGroup() {
//tag::deploy-with-cluster-group[]
Ignite ignite = Ignition.start();
//deploy the service to the nodes that host the cache named "myCache"
ignite.services(ignite.cluster().forCacheNodes("myCache"));
//end::deploy-with-cluster-group[]
ignite.close();
}
//tag::node-filter[]
public static class ServiceFilter implements IgnitePredicate<ClusterNode> {
@Override
public boolean apply(ClusterNode node) {
// The service will be deployed on the server nodes
// that have the 'west.coast.node' attribute.
return !node.isClient() && node.attributes().containsKey("west.coast.node");
}
}
//end::node-filter[]
@Test
void affinityKey() {
//tag::deploy-by-key[]
Ignite ignite = Ignition.start();
//making sure the cache exists
ignite.getOrCreateCache("orgCache");
ServiceConfiguration serviceCfg = new ServiceConfiguration();
// Setting service instance to deploy.
serviceCfg.setService(new MyCounterServiceImpl());
// Setting service name.
serviceCfg.setName("serviceName");
serviceCfg.setTotalCount(1);
// Specifying the cache name and key for the affinity based deployment.
serviceCfg.setCacheName("orgCache");
serviceCfg.setAffinityKey(123);
IgniteServices services = ignite.services();
// Deploying the service.
services.deploy(serviceCfg);
//end::deploy-by-key[]
ignite.close();
}
@Test
void deployingWithNodeFilter() {
System.setProperty("west.coast.node", "true");
//tag::deploy-with-node-filter[]
Ignite ignite = Ignition.start();
ServiceConfiguration serviceCfg = new ServiceConfiguration();
// Setting service instance to deploy.
serviceCfg.setService(new MyCounterServiceImpl());
serviceCfg.setName("serviceName");
serviceCfg.setMaxPerNodeCount(1);
// Setting the nodes filter.
serviceCfg.setNodeFilter(new ServiceFilter());
// Getting an instance of IgniteService.
IgniteServices services = ignite.services();
// Deploying the service.
services.deploy(serviceCfg);
//end::deploy-with-node-filter[]
ignite.close();
}
@Test
void startWithConfig() {
//tag::start-with-service-config[]
Ignite ignite = Ignition.start();
ServiceConfiguration serviceCfg = new ServiceConfiguration();
serviceCfg.setName("myCounterService");
serviceCfg.setMaxPerNodeCount(1);
serviceCfg.setTotalCount(1);
serviceCfg.setService(new MyCounterServiceImpl());
ignite.services().deploy(serviceCfg);
//end::start-with-service-config[]
ignite.close();
}
@Test
void serviceConfiguration() {
//tag::service-configuration[]
ServiceConfiguration serviceCfg = new ServiceConfiguration();
serviceCfg.setName("myCounterService");
serviceCfg.setMaxPerNodeCount(1);
serviceCfg.setTotalCount(1);
serviceCfg.setService(new MyCounterServiceImpl());
IgniteConfiguration igniteCfg = new IgniteConfiguration()
.setServiceConfiguration(serviceCfg);
// Start the node.
Ignite ignite = Ignition.start(igniteCfg);
//end::service-configuration[]
ignite.close();
}
}