/*
* Copyright 2010 salaboy.
*
* Licensed 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.
* under the License.
*/
package org.drools.grid.distributed.util;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import net.jini.core.lookup.ServiceItem;
import net.jini.core.lookup.ServiceTemplate;
import net.jini.discovery.LookupDiscoveryManager;
import net.jini.lease.LeaseRenewalManager;
import net.jini.lookup.ServiceDiscoveryManager;
import org.drools.grid.DirectoryNodeService;
import org.drools.grid.ExecutionNodeService;
/**
*
* @author salaboy
*/
public class RioResourceLocator {
public static ExecutionNodeService locateExecutionNodeById(String id) throws IOException, InterruptedException{
IDEntry[] ids = new IDEntry[]{new IDEntry(id)};
Class[] classes = new Class[]{ExecutionNodeService.class};
ServiceTemplate tmpl = new ServiceTemplate(null, classes, ids);
LookupDiscoveryManager ldm =
new LookupDiscoveryManager(LookupDiscoveryManager.ALL_GROUPS,
null,
null);
ServiceDiscoveryManager sdm =
new ServiceDiscoveryManager(ldm, new LeaseRenewalManager());
/* Wait no more then 10 seconds to discover the service */
ServiceItem item = sdm.lookup(tmpl, null, 30000);
if(item == null){
throw new IllegalStateException("No Execution Node Found");
}
ExecutionNodeService executionNode = (ExecutionNodeService) item.service;
return executionNode;
}
public static DirectoryNodeService locateDirectoryNodeById(String id) throws IOException, InterruptedException{
IDEntry[] ids = new IDEntry[]{new IDEntry(id)};
Class[] classes = new Class[]{DirectoryNodeService.class};
ServiceTemplate tmpl = new ServiceTemplate(null, classes, ids);
LookupDiscoveryManager ldm =
new LookupDiscoveryManager(LookupDiscoveryManager.ALL_GROUPS,
null,
null);
ServiceDiscoveryManager sdm =
new ServiceDiscoveryManager(ldm, new LeaseRenewalManager());
/* Wait no more then 10 seconds to discover the service */
ServiceItem item = sdm.lookup(tmpl, null, 30000);
if(item == null){
throw new IllegalStateException("No Directory Node Found");
}
DirectoryNodeService directoryNode = (DirectoryNodeService) item.service;
return directoryNode;
}
public static List<ExecutionNodeService> locateExecutionNodes() throws IOException, InterruptedException{
List<ExecutionNodeService> executionNodes = new ArrayList<ExecutionNodeService>();
Class[] classes = new Class[]{ExecutionNodeService.class};
ServiceTemplate tmpl = new ServiceTemplate(null, classes, null);
LookupDiscoveryManager ldm =
new LookupDiscoveryManager(LookupDiscoveryManager.ALL_GROUPS,
null,
null);
System.out.println("Discovering ExecutionNodeService services ...");
ServiceDiscoveryManager sdm =
new ServiceDiscoveryManager(ldm, new LeaseRenewalManager());
/* Wait no more then 10 seconds to discover the service */
ServiceItem[] items = sdm.lookup(tmpl, 1,100, null, 30000);
for (int i = 0; i < items.length; i++) {
if (items[i].service instanceof ExecutionNodeService) {
executionNodes.add((ExecutionNodeService) items[i].service);
}
}
return executionNodes;
}
public static List<DirectoryNodeService> locateDirectoryNodes() throws IOException, InterruptedException{
List<DirectoryNodeService> directoryNodes = new ArrayList<DirectoryNodeService>();
Class[] classes = new Class[]{DirectoryNodeService.class};
ServiceTemplate tmpl = new ServiceTemplate(null, classes, null);
LookupDiscoveryManager ldm =
new LookupDiscoveryManager(LookupDiscoveryManager.ALL_GROUPS,
null,
null);
System.out.println("Discovering DirectoryNodeService services ...");
ServiceDiscoveryManager sdm =
new ServiceDiscoveryManager(ldm, new LeaseRenewalManager());
/* Wait no more then 10 seconds to discover the service */
ServiceItem[] items = sdm.lookup(tmpl, 1,100, null, 30000);
for (int i = 0; i < items.length; i++) {
if (items[i].service instanceof DirectoryNodeService) {
directoryNodes.add((DirectoryNodeService) items[i].service);
}
}
return directoryNodes;
}
}