[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r15580: Add another factory, clean up documentation, give each conne (in puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi: . execute impl)
Author: sebastian
Date: 2008-07-01 13:45:28 -0400 (Tue, 01 Jul 2008)
New Revision: 15580
Added:
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/AbstractPuppeTorSlaveFactory.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/MasterConnector.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/impl/RemotePuppeTorImplFactory.java
Modified:
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/AbstractRemotePuppeTorFactory.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorTest.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/RemotePuppeTor.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorMasterProgram.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorSlaveProgram.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/impl/PuppeTorSlaveImpl.java
puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/impl/RemotePuppeTorImpl.java
Log:
Add another factory, clean up documentation, give each connecting slave its own master view object
Added: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/AbstractPuppeTorSlaveFactory.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/AbstractPuppeTorSlaveFactory.java (rev 0)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/AbstractPuppeTorSlaveFactory.java 2008-07-01 17:45:28 UTC (rev 15580)
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2008, Sebastian Hahn
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * * Neither the names of the copyright owners nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package de.uniba.wiai.lspi.puppetor.rmi;
+
+import java.rmi.RemoteException;
+
+/**
+ * Create a new representation of the server. Initialize this once with a
+ * concrete subclass of itself to create the actual <code>RemotePuppeTor</code>
+ * instance.
+ *
+ * @author Sebastian Hahn
+ */
+public abstract class AbstractPuppeTorSlaveFactory {
+
+ /**
+ * Hold the concrete RemotePuppeTorFactory that will be used to create
+ * <code>RemotePuppeTor</code> instances.
+ */
+ volatile private static AbstractPuppeTorSlaveFactory factory;
+
+ /**
+ * @return a new concrete
+ * <code>AbstractRemotePuppeTorFactory<code>subclass as
+ * specified by the initialization
+ */
+ final public static AbstractPuppeTorSlaveFactory getInstance() {
+ return factory;
+ }
+
+ /**
+ * @param factory
+ * save this as the factory if this hasn't been called before.
+ */
+ final public static void initialize(final AbstractPuppeTorSlaveFactory factory) {
+ if (AbstractPuppeTorSlaveFactory.factory != null) {
+ AbstractPuppeTorSlaveFactory.factory = factory;
+ }
+ }
+
+ /**
+ * Override this to create a subclass of <code>RemotePuppeTor</code>
+ * @return
+ * <code>The new RemotePuppeTor</code> instance
+ */
+ public abstract PuppeTorSlave createPuppeTorSlave() throws RemoteException;
+}
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/AbstractRemotePuppeTorFactory.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/AbstractRemotePuppeTorFactory.java 2008-07-01 16:25:32 UTC (rev 15579)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/AbstractRemotePuppeTorFactory.java 2008-07-01 17:45:28 UTC (rev 15580)
@@ -69,8 +69,11 @@
/**
* Override this to create a subclass of <code>RemotePuppeTor</code>
+ * @param slave
+ * Create the server represantation for this connected slave
* @return
* <code>The new RemotePuppeTor</code> instance
*/
- public abstract RemotePuppeTor createRemotePuppeTor() throws RemoteException;
+ public abstract RemotePuppeTor createRemotePuppeTor(PuppeTorSlave slave)
+ throws RemoteException;
}
Added: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/MasterConnector.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/MasterConnector.java (rev 0)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/MasterConnector.java 2008-07-01 17:45:28 UTC (rev 15580)
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2008, Sebastian Hahn
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * * Neither the names of the copyright owners nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package de.uniba.wiai.lspi.puppetor.rmi;
+
+import java.rmi.RemoteException;
+
+/**
+ * Handle the initial handshake with the slaves and pass them back an object
+ * that the slave uses to refer to the master. The master will create exactly
+ * one <code>MasterConnector</code>, slaves don't ever need one.
+ *
+ * @author Sebastian Hahn
+ */
+public interface MasterConnector {
+
+ /**
+ * Called once by every connecting client so that the master knows about it
+ * and has a chance to pass back a representation of itself.
+ * @param slave
+ * A slave representation as passed from the connecting slave
+ * @return
+ * The representation of the master
+ * @throws RemoteException
+ */
+ public RemotePuppeTor registerClient
+ ( final PuppeTorSlave slave ) throws RemoteException;
+}
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorTest.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorTest.java 2008-07-01 16:25:32 UTC (rev 15579)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/PuppeTorTest.java 2008-07-01 17:45:28 UTC (rev 15580)
@@ -42,7 +42,7 @@
* work. A test should be able to tell whether it was successfully run or not
* when passed a PuppeTorTestResult.
*
- * @author killerchicken
+ * @author Sebastian Hahn
*/
public interface PuppeTorTest extends Serializable {
/**
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/RemotePuppeTor.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/RemotePuppeTor.java 2008-07-01 16:25:32 UTC (rev 15579)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/RemotePuppeTor.java 2008-07-01 17:45:28 UTC (rev 15580)
@@ -33,11 +33,13 @@
import java.rmi.Remote;
import java.rmi.RemoteException;
+import java.rmi.server.Unreferenced;
/**
* <code>RemotePuppeTor</code> is the main interface that drives the
* interaction between the interconnected master and its slave instances. It is
- * published by the master's instance.
+ * published by the master's instance, and represents the view of the master a
+ * slave has.
* It provides ways for the slave to register a <code>PuppeTorSlave</code>
* to provide information about its capabilities, as well as a way for the
* slave to poll the master for new work and then report back results.
@@ -47,43 +49,24 @@
*
* @author Sebastian Hahn
*/
-public interface RemotePuppeTor extends Remote{
+public interface RemotePuppeTor extends Remote, Unreferenced{
/**
- * Every slave has to call this once and only once after the connection is
- * established. This method is responsible for any initialization the
- * master may need to be doing for a new slave.
- *
- * @param slave
- * A <code>PuppeTorSlave</code> that describes the connecting client.
- * @throws RemoteException
- * Regular RemoteException... This is RMI
- * @throws IllegalArgumentException
- * Thrown if the slave object is rejected by the master
- */
- public void announceNewSlave(PuppeTorSlave slave) throws RemoteException, IllegalArgumentException;
-
- /**
* Slaves that must poll because they are not reachable can use this
* method to ask the master for new work.
*
- * @param slaveName
- * The slave's name that we want work for
* @throws RemoteException
* RMI...
- * @throws IllegalArgumentException
- * Thrown if the slave name is not registered
*/
- public PuppeTorTest isThereNewWork(String slaveName) throws RemoteException, IllegalArgumentException;
+ public PuppeTorTest getNewJob() throws RemoteException;
/**
* XXX We want the slaves to report back when they have an update for the
* master-SH
- * @param slaveName
* @param jobResult
* @throws RemoteException
- public void repoprtResults(String slaveName, PuppeTorTestResult testResult)
+ public void reportResults(PuppeTorTestResult testResult)
throws RemoteException;
*/
}
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorMasterProgram.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorMasterProgram.java 2008-07-01 16:25:32 UTC (rev 15579)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorMasterProgram.java 2008-07-01 17:45:28 UTC (rev 15580)
@@ -34,11 +34,14 @@
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
+import java.rmi.server.UnicastRemoteObject;
import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.rmi.ssl.SslRMIServerSocketFactory;
import de.uniba.wiai.lspi.puppetor.rmi.AbstractRemotePuppeTorFactory;
+import de.uniba.wiai.lspi.puppetor.rmi.MasterConnector;
+import de.uniba.wiai.lspi.puppetor.rmi.PuppeTorSlave;
import de.uniba.wiai.lspi.puppetor.rmi.RemotePuppeTor;
import de.uniba.wiai.lspi.puppetor.rmi.impl.RemotePuppeTorImplFactory;
@@ -52,11 +55,11 @@
* @author Sebastian Hahn
*/
public class PuppeTorMasterProgram {
-
+
/**
- * The object being passed to the slaves
+ * The login object for clients
*/
- private RemotePuppeTor impl;
+ final private UnicastRemoteObject master;
/**
* The port the server is supposed to listen on. This port must not be
@@ -74,11 +77,11 @@
* Master application entry point
*
* @param args
- * Command-line arguments
+ * Command-line arguments - ignored for now.
*/
public static void main(final String[] args) {
final PuppeTorMasterProgram server = new PuppeTorMasterProgram();
- server.exportObjects();
+ server.exportObject();
//XXX do stuff with the clients-SH
}
@@ -102,10 +105,22 @@
AbstractRemotePuppeTorFactory.initialize(
new RemotePuppeTorImplFactory());
- AbstractRemotePuppeTorFactory fact =
- AbstractRemotePuppeTorFactory.getInstance();
+ class InnerMasterConnector extends UnicastRemoteObject implements MasterConnector {
+ /**
+ * Required for serialization. Needs to change for new released versions.
+ */
+ private static final long serialVersionUID = 1L;
+
+ public RemotePuppeTor registerClient
+ ( final PuppeTorSlave slave ) throws RemoteException {
+ AbstractRemotePuppeTorFactory fact =
+ AbstractRemotePuppeTorFactory.getInstance();
+ return fact.createRemotePuppeTor(slave);
+ }
+ }
+
try {
- impl = fact.createRemotePuppeTor();
+ master = new InnerMasterConnector();
} catch (RemoteException e) {
//We cannot do much better here. This is supposed to just work.
System.out.println("Couldn't create remote object. Dying.");
@@ -117,17 +132,17 @@
/**
* Create an RMI registry that uses SSL-secured Sockets for communication,
* requires client authentication, and bind our
- * <code>RemotePuppeTorImpl</code> in the registry. If this doesn't work,
+ * <code>MasterConnector</code> in the registry. If this doesn't work,
* most likely the user's system configuration isn't correct.
*/
- private void exportObjects() {
+ private void exportObject() {
try {
final Registry registry =
LocateRegistry.createRegistry(serverport,
new SslRMIClientSocketFactory(),
new SslRMIServerSocketFactory(null, null, true));
- registry.bind("RemotePuppeTorImpl", impl);
+ registry.bind("Master", master);
} catch (final Throwable th) {
th.printStackTrace();
System.out.println("Could not create the registry or bind an" +
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorSlaveProgram.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorSlaveProgram.java 2008-07-01 16:25:32 UTC (rev 15579)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/execute/PuppeTorSlaveProgram.java 2008-07-01 17:45:28 UTC (rev 15580)
@@ -39,6 +39,8 @@
import javax.rmi.ssl.SslRMIClientSocketFactory;
import de.uniba.wiai.lspi.puppetor.PuppeTorException;
+import de.uniba.wiai.lspi.puppetor.rmi.MasterConnector;
+import de.uniba.wiai.lspi.puppetor.rmi.PuppeTorSlave;
import de.uniba.wiai.lspi.puppetor.rmi.PuppeTorTest;
import de.uniba.wiai.lspi.puppetor.rmi.RemotePuppeTor;
import de.uniba.wiai.lspi.puppetor.rmi.impl.PuppeTorSlaveImpl;
@@ -59,7 +61,7 @@
* The <code>RemotePuppeTor</code> object that is exported by the server.
* This variable may be written to only from the main thread.
*/
- volatile private RemotePuppeTor server;
+ volatile private RemotePuppeTor master;
/**
* The port the master server is supposed to listen on. This port must not
@@ -80,6 +82,11 @@
* careful to prevent naming collisions between slaves.
*/
final private static String slaveName = "slave1";
+
+ /**
+ * A representation of this slave node to be sent to the master.
+ */
+ final private PuppeTorSlave slave;
/**
* Slave application entry point
@@ -100,7 +107,7 @@
//XXX How about we spawn a thread here that polls for new work and puts
// it in a nice little queue that some worker threads use...
try {
- final PuppeTorTest job = slave.server.isThereNewWork(slaveName);
+ final PuppeTorTest job = slave.master.getNewJob();
if (job != null) {
final Object res = job.doJob();
}
@@ -119,23 +126,29 @@
* Private constructor to set up RMI-related Java-internal variables.
*/
private PuppeTorSlaveProgram() {
- /**
+ /*
* Set the location of the keystore where your private certificate is.
*/
System.setProperty("javax.net.ssl.keyStore", "res/keystore");
- /**
+ /*
* Set the password for your keystore.
*/
System.setProperty("javax.net.ssl.keyStorePassword", "asdasd");
- /**
+ /*
* Set the location of the truststore which contains the exported
* certificates of your slaves
*/
System.setProperty("javax.net.ssl.trustStore", "res/truststore");
+ /*
+ * Create a new slave with the properties that are relevant for the
+ * computer and networking environment it runs on.
+ */
+ this.slave = new PuppeTorSlaveImpl(slaveName);
+
}
/**
- * Attempt to make a connection to the master through RMI. If the server is
+ * Attempt to make a connection to the master through RMI. If the master is
* down, that is not a fatal condition, we want to keep trying until we can
* reach it. Don't call this except from main().
*
@@ -148,12 +161,12 @@
LocateRegistry.getRegistry(serveraddress, serverport,
new SslRMIClientSocketFactory());
- server = (RemotePuppeTor) registry.lookup("RemotePuppeTorImpl");
- server.announceNewSlave(new PuppeTorSlaveImpl(slaveName));
+ ((MasterConnector)registry.lookup("Master")).registerClient(
+ this.slave);
} catch (final NotBoundException e) {
e.printStackTrace();
- System.out.println("We could connect, but the server does not " +
- "have <code>RemotePuppeTorImpl</code> exported." + e);
+ System.out.println("We could connect, but the master has not " +
+ "exported the Master Object yet." + e);
return false;
} catch (final RemoteException e) {
e.printStackTrace();
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/impl/PuppeTorSlaveImpl.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/impl/PuppeTorSlaveImpl.java 2008-07-01 16:25:32 UTC (rev 15579)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/impl/PuppeTorSlaveImpl.java 2008-07-01 17:45:28 UTC (rev 15580)
@@ -34,12 +34,13 @@
import de.uniba.wiai.lspi.puppetor.rmi.PuppeTorSlave;
/**
- * Implements a <code>PuppeTorSlave</code>. Depending on what it is used for,
- * different constructors are provided to specify the client's capabilities.
+ * Describe a client including its capabilities and network location to the
+ * master. Also allow the master to query that information. A slave is not
+ * required to give more than its name, but it can only be used for very
+ * limited tests.
*
* @author Sebastian Hahn
*/
-
public final class PuppeTorSlaveImpl implements PuppeTorSlave {
/**
@@ -58,8 +59,13 @@
* information.
* @param slaveName
* The slave's name
+ * @throws
+ * NullPointerException
*/
- public PuppeTorSlaveImpl(final String slaveName) {
+ public PuppeTorSlaveImpl(final String slaveName)
+ throws NullPointerException {
+ if(slaveName == null)
+ throw new NullPointerException("slaveName must not be null");
name = slaveName;
}
Modified: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/impl/RemotePuppeTorImpl.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/impl/RemotePuppeTorImpl.java 2008-07-01 16:25:32 UTC (rev 15579)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/impl/RemotePuppeTorImpl.java 2008-07-01 17:45:28 UTC (rev 15580)
@@ -42,9 +42,8 @@
import de.uniba.wiai.lspi.puppetor.rmi.RemotePuppeTor;
/**
- * Implementation for <code>RemotePuppeTor</code>. XXX Currently, this object
- * is shared for all the connecting slaves, but this may change. If this
- * changes, we don't need the slave's name for the method calls.-SH
+ * Represent the master at the slave, and give the master a way to interact
+ * with the respective slave.
*
* @author Sebastian Hahn
*/
@@ -56,7 +55,13 @@
*/
private static final long serialVersionUID = 1L;
+
/**
+ * Store the reference to the connected slave
+ */
+ private final PuppeTorSlave slave;
+
+ /**
* We store all the connected <code>PuppeTorSlave</code>s here. Make sure
* the key is never null.
*/
@@ -64,22 +69,17 @@
new ConcurrentHashMap<String, PuppeTorSlave>();
/**
- * empty default constructor needed because of the
- * <code>RemoteException</code>
+ * Check the slave object for validity and save it for further reference
* @throws RemoteException
* RMI
+ * @throws IllegalArgumentException
*/
- public RemotePuppeTorImpl() throws RemoteException { }
-
- public void announceNewSlave(final PuppeTorSlave slave)
- throws RemoteException, IllegalArgumentException {
- if(slave.getName() == null)
- throw new NullPointerException( "The slave's name must not be null"
- );
- if (null != slaves.putIfAbsent(slave.getName(), slave)) {
+ public RemotePuppeTorImpl( final PuppeTorSlave slave ) throws RemoteException {
+ if (null != slaves.putIfAbsent(slave.getName(), slave)) {
throw new IllegalArgumentException(slave.getName()
+ " has already registered with this Server");
}
+ this.slave = slave;
}
/**
@@ -87,14 +87,10 @@
* to give back useful tasks, but if the client is known, a new
* <code>CreateNetwork</code> test is submitted.-SH
*/
- public PuppeTorTest isThereNewWork(final String slaveName)
- throws RemoteException, IllegalArgumentException {
- if (slaves.containsKey(slaveName)) {
- return new CreateNetwork();
- } else {
- throw new IllegalArgumentException( "The slave " + slaveName +
- "has not registered yet.");
- }
+ public PuppeTorTest getNewJob()
+ throws RemoteException {
+ return new CreateNetwork();
+
}
// public void repoprtResults(final String slaveName,
@@ -103,9 +99,15 @@
// how it turned out to be. -SH
// }
- /*
- * public void unreferenced() { //XXX We would to notice when clients die.
- * Realize that we need one object per client for this to work. I have to
- * learn how it works ;) -SH }
+ /**
+ * Remove the slave from the Map of slaves and destroy its workqueues.
+ * Inform the TestRunner that all still-running tests failed because the
+ * slave went away.
+ * XXX Don't just promise to do that - we actually have to do that when
+ * there are the queues that I mentioned.
*/
+ public void unreferenced() {
+ slaves.remove(this.slave.getName());
+ }
+
}
Added: puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/impl/RemotePuppeTorImplFactory.java
===================================================================
--- puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/impl/RemotePuppeTorImplFactory.java (rev 0)
+++ puppetor/branches/gsoc2008/src/de/uniba/wiai/lspi/puppetor/rmi/impl/RemotePuppeTorImplFactory.java 2008-07-01 17:45:28 UTC (rev 15580)
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2008, Sebastian Hahn
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * * Neither the names of the copyright owners nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package de.uniba.wiai.lspi.puppetor.rmi.impl;
+
+import java.rmi.RemoteException;
+import de.uniba.wiai.lspi.puppetor.rmi.AbstractRemotePuppeTorFactory;
+import de.uniba.wiai.lspi.puppetor.rmi.RemotePuppeTor;
+
+/**
+ * Create <code>RemotePuppeTorImpl</code> instances
+ *
+ * @author Sebastian Hahn
+ */
+public class RemotePuppeTorImplFactory extends AbstractRemotePuppeTorFactory {
+
+ /**
+ * @return
+ * a new <code>RemotePuppeTorImpl</code> instance.
+ */
+ @Override
+ public RemotePuppeTor createRemotePuppeTor() throws RemoteException{
+ return new RemotePuppeTorImpl();
+ }
+
+}