Annex

30.1. The starter example files

org.objectweb.proactive.examples.components.userguide.starter.Service

package org.objectweb.proactive.examples.components.userguide.starter;

public interface Service {
    public void print(String msg);
}

org.objectweb.proactive.examples.components.userguide.starter.ServerImpl

package org.objectweb.proactive.examples.components.userguide.starter;

public class ServerImpl implements Service {
    public void print(String msg) {
        System.err.println("=> Server: " + msg);
    }
}

org.objectweb.proactive.examples.components.userguide.starter.Server.fractal

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE definition PUBLIC "-//objectweb.org//DTD Fractal ADL 2.0//EN"
 "classpath://org/objectweb/proactive/core/component/adl/xml/proactive.dtd">

<definition name="org.objectweb.proactive.examples.components.userguide.starter.Server">
    <interface name="s" role="server" signature=
"org.objectweb.proactive.examples.components.userguide.starter.Service"/>

    <content class="org.objectweb.proactive.examples.components.userguide.starter.ServerImpl"/>

    <controller desc="primitive"/>
</definition>

org.objectweb.proactive.examples.components.userguide.starter.ClientImpl.java

package org.objectweb.proactive.examples.components.userguide.starter;

import org.objectweb.fractal.api.control.BindingController;


public class ClientImpl implements Runnable, BindingController {
    private Service service;

    public ClientImpl() {
        // the following instruction was removed, because ProActive requires empty no-args
 constructors
        // otherwise this instruction is executed also at the construction of the stub
        //System.err.println("CLIENT created");
    }

    public void run() {
        System.err.println("---- Calling service method ----");
        service.print("hello world");
    }

    public String[] listFc() {
        return new String[] { "s" };
    }

    public Object lookupFc(final String cItf) {
        if (cItf.equals("s")) {
            return service;
        }
        return null;
    }

    public void bindFc(final String cItf, final Object sItf) {
        if (cItf.equals("s")) {
            service = (Service) sItf;
        }
    }

    public void unbindFc(final String cItf) {
        if (cItf.equals("s")) {
            service = null;
        }
    }
}

org.objectweb.proactive.examples.components.userguide.starter.Client.fractal

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE definition PUBLIC "-//objectweb.org//DTD Fractal ADL 2.0//EN"
 "classpath://org/objectweb/proactive/core/component/adl/xml/proactive.dtd">

<definition name="org.objectweb.proactive.examples.components.userguide.starter.Client">
  <interface name="m" role="server" signature="java.lang.Runnable"/>
  <interface name="s" role="client" signature=
"org.objectweb.proactive.examples.components.userguide.starter.Service"/>

  <content class="org.objectweb.proactive.examples.components.userguide.starter.ClientImpl"/>

  <controller desc="primitive"/>
</definition>

org.objectweb.proactive.examples.components.userguide.starter.Main.java

package org.objectweb.proactive.examples.components.userguide.starter;

import java.util.HashMap;

import org.objectweb.fractal.adl.Factory;
import org.objectweb.fractal.api.Component;
import org.objectweb.fractal.api.control.BindingController;
import org.objectweb.fractal.util.Fractal;
import org.objectweb.proactive.core.component.adl.FactoryFactory;
import org.objectweb.proactive.core.component.adl.Registry;
import org.objectweb.proactive.core.config.PAProperties;
import org.objectweb.proactive.extensions.gcmdeployment.PAGCMDeployment;
import org.objectweb.proactive.gcmdeployment.GCMApplication;


public class Main {
    public static void main(String[] args) throws Exception {
        PAProperties.FRACTAL_PROVIDER.setValue("org.objectweb.proactive.core.component.Fractive");
        GCMApplication gcma = PAGCMDeployment
                .loadApplicationDescriptor(Main.class
                        .getResource(
"/org/objectweb/proactive/examples/components/userguide/starter/applicationDescriptor.xml"));
        gcma.startDeployment();

        Factory factory = FactoryFactory.getFactory();
        HashMap<String, GCMApplication> context = new HashMap<String, GCMApplication>(1);
        context.put("deployment-descriptor", gcma);

        // creates server component
        Component server = (Component) factory.newComponent(
                "org.objectweb.proactive.examples.components.userguide.starter.Server", context);

        // creates client component
        Component client = (Component) factory.newComponent(
                "org.objectweb.proactive.examples.components.userguide.starter.Client", context);

        // bind components
        BindingController bc = ((BindingController) client.getFcInterface("binding-controller"));
        bc.bindFc("s", server.getFcInterface("s"));

        // start components
        Fractal.getLifeCycleController(server).startFc();
        Fractal.getLifeCycleController(client).startFc();

        // launch the application
        ((Runnable) client.getFcInterface("m")).run();

        // stop components
        Fractal.getLifeCycleController(client).stopFc();
        Fractal.getLifeCycleController(server).stopFc();

        Registry.instance().clear();
        gcma.kill();
    }
}

org.objectweb.proactive.examples.components.userguide.starter.deploymentDescriptor.xml

<?xml version="1.0" encoding="UTF-8"?>
<GCMDeployment xmlns="urn:gcm:deployment:1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="urn:gcm:deployment:1.0
 http://proactive.inria.fr/schemas/gcm/1.0/ExtensionSchemas.xsd  ">
  
  <environment>
    <javaPropertyVariable name="user.home"/>
  </environment>

  <resources>
    <host refid="localhost"/>
  </resources>

  <infrastructure>
    <hosts>
      <host id="localhost" os="unix" hostCapacity="1" vmCapacity="2">
        <homeDirectory base="root" relpath="${user.home}" />
      </host>
    </hosts>
  </infrastructure>

</GCMDeployment>

org.objectweb.proactive.examples.components.userguide.starter.applicationDescriptor.xml

<?xml version="1.0" encoding="UTF-8"?>
<GCMApplication xmlns="urn:gcm:application:1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="urn:gcm:application:1.0
 http://proactive.inria.fr/schemas/gcm/1.0/ApplicationDescriptorSchema.xsd">

	<environment>
		<javaPropertyVariable name="proactive.home" />
		<javaPropertyVariable name="java.home" />
		<javaPropertyVariable name="user.dir" />
	</environment>


	<application>
		<proactive base="root" relpath="${proactive.home}">
			<configuration>
 				<java base="root" relpath="${java.home}/bin/java"/>
				<proactiveClasspath type="append">
					<pathElement base="proactive" relpath="classes/Examples"/>
					<pathElement base="proactive" relpath="dist/lib/clover.jar"/>
				</proactiveClasspath>					
			</configuration> 
			<virtualNode id="VN">
				<nodeProvider refid="main-VN" />
			</virtualNode>
		</proactive>
	</application>

	<resources>
		<nodeProvider id="main-VN">
			<file path="deploymentDescriptor.xml" />
		</nodeProvider>
	</resources>
</GCMApplication>