package eu.play_project.dcep.distribution.tests.srbench.performance; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.util.LinkedList; import org.objectweb.proactive.core.component.Fractive; import org.objectweb.proactive.core.component.representative.PAComponentRepresentative; import org.objectweb.proactive.core.util.URIBuilder; import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.QueryFactory; import eu.play_platform.platformservices.bdpl.syntax.windows.visitor.ElementWindowVisitor; import eu.play_project.dcep.api.DcepManagmentApi; import eu.play_project.dcep.distributedetalis.api.DistributedEtalisTestApi; import eu.play_project.play_commons.constants.Namespace; import eu.play_project.play_platformservices.QueryTemplateImpl; import eu.play_project.play_platformservices.api.BdplQuery; import eu.play_project.play_platformservices.api.HistoricalQuery; import eu.play_project.play_platformservices.api.QueryDetails; import eu.play_project.play_platformservices_querydispatcher.api.EleGenerator; import eu.play_project.play_platformservices_querydispatcher.bdpl.code_generator.realtime.EleGeneratorForConstructQuery; import eu.play_project.play_platformservices_querydispatcher.bdpl.visitor.realtime.WindowVisitor; /** * Connect to a DistributedEtalis instance and use the api(s). * @author Stefan Obermeier * */ public class SingleDistributedEtalisInstancePublisher { private static DistributedEtalisTestApi testApiI1; private static DcepManagmentApi managementApiI1; private static DistributedEtalisTestApi testApiI2; private static DcepManagmentApi managementApiI2; private static DistributedEtalisTestApi testApiI3; private static DcepManagmentApi managementApiI3; public static void main(String[] args) throws RemoteException, NotBoundException, Exception { // Connect to DistributedEtalis instance 1. PAComponentRepresentative root1 = Fractive.lookup(URIBuilder.buildURI(args[0], args[1], "rmi", 1099).toString()); testApiI1 = ((eu.play_project.dcep.distributedetalis.api.DistributedEtalisTestApi) root1.getFcInterface(DistributedEtalisTestApi.class.getSimpleName())); managementApiI1 = ((eu.play_project.dcep.api.DcepManagmentApi) root1.getFcInterface(DcepManagmentApi.class.getSimpleName())); // // Connect to DistributedEtalis instance 2. PAComponentRepresentative root2 = Fractive.lookup(URIBuilder.buildURI(args[2], args[3], "rmi", 1099).toString()); testApiI2 = ((eu.play_project.dcep.distributedetalis.api.DistributedEtalisTestApi) root2.getFcInterface(DistributedEtalisTestApi.class.getSimpleName())); managementApiI2 = ((eu.play_project.dcep.api.DcepManagmentApi) root2.getFcInterface(DcepManagmentApi.class.getSimpleName())); // // Connect to DistributedEtalis instance 3. // PAComponentRepresentative root3 = Fractive.lookup(URIBuilder.buildURI(args[4], args[5], "rmi", 1099).toString()); // testApiI3 = ((eu.play_project.dcep.distributedetalis.api.DistributedEtalisTestApi) root3.getFcInterface(DistributedEtalisTestApi.class.getSimpleName())); // managementApiI3 = ((eu.play_project.dcep.api.DcepManagmentApi) root3.getFcInterface(DcepManagmentApi.class.getSimpleName())); BdplQuery q = generateEle(getSparqlQueries("benchmarks/srbench/q3.eprq")); // Register queries. mw managementApiI1.registerEventPattern(q); managementApiI2.registerEventPattern(q); // managementApiI3.registerEventPattern(q); // Start publishing events. new EventProducerThread(1000000, 40, testApiI1); new EventProducerThread(1000000, 40, testApiI2); //new EventProducerThread(1000, 1000, testApiI1); //new EventProducerThread(1000, 200, testApiI1); //new EventProducerThread(1000, 8, testApiI1); } private static BdplQuery generateEle(String queryString) { // Parse query Query query = QueryFactory.create(queryString, com.hp.hpl.jena.query.Syntax.syntaxBDPL); // Use custom visitor EleGenerator visitor1 = new EleGeneratorForConstructQuery(); String patternId = "'" + Namespace.PATTERN.getUri() + Math.random() * 1000000 + "'"; //String patternId = "'p1'"; visitor1.setPatternId(patternId); visitor1.generateQuery(query); String etalisPattern = visitor1.getEle(); QueryDetails details = new QueryDetails(patternId); // Set properties for windows in QueryDetails ElementWindowVisitor windowVisitor = new WindowVisitor(details); query.getWindow().accept(windowVisitor); BdplQuery bdplQuery = BdplQuery.builder() .ele(etalisPattern) .details(details) .bdpl("") .constructTemplate(new QueryTemplateImpl()) .historicalQueries(new LinkedList<HistoricalQuery>()) .build(); return bdplQuery; } public static void delay(int delay) { try { Thread.sleep(delay); } catch (InterruptedException e) { e.printStackTrace(); } } private static String getSparqlQueries(String queryFile){ try { InputStream is = SingleDistributedEtalisInstancePublisher.class.getClassLoader().getResourceAsStream(queryFile); BufferedReader br = new BufferedReader(new InputStreamReader(is)); StringBuffer sb = new StringBuffer(); String line; while (null != (line = br.readLine())) { sb.append(line); sb.append("\n"); } br.close(); is.close(); return sb.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } }