<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FDesign_Pattern%2FCall_Back_Pattern</id>
		<title>Java/Design Pattern/Call Back Pattern - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FDesign_Pattern%2FCall_Back_Pattern"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Design_Pattern/Call_Back_Pattern&amp;action=history"/>
		<updated>2026-04-22T04:02:40Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Design_Pattern/Call_Back_Pattern&amp;diff=7787&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Design_Pattern/Call_Back_Pattern&amp;diff=7787&amp;oldid=prev"/>
				<updated>2010-06-01T06:50:39Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:50, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Design_Pattern/Call_Back_Pattern&amp;diff=7786&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Design_Pattern/Call_Back_Pattern&amp;diff=7786&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:45Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Callback Pattern in Java ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//[C] 2002 Sun Microsystems, Inc.---&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
public class RunCallbackPattern {&lt;br /&gt;
    public static void main(String [] arguments){&lt;br /&gt;
        System.out.println(&amp;quot;Example for the Callback pattern&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;This code will run two RMI objects to demonstrate&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; callback capability. One will be CallbackClientImpl,&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; which will request a project from the other remote&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; object, CallbackServerImpl.&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;To demonstrate how the Callback pattern allows the&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; client to perform independent processing, the main&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; progam thread will go into a wait loop until the&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; server sends the object to its client.&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Running the RMI compiler (rmic)&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        try{&lt;br /&gt;
            Process p1 = Runtime.getRuntime().exec(&amp;quot;rmic CallbackServerImpl&amp;quot;);&lt;br /&gt;
            Process p2 = Runtime.getRuntime().exec(&amp;quot;rmic CallbackClientImpl&amp;quot;);&lt;br /&gt;
            p1.waitFor();&lt;br /&gt;
            p2.waitFor();&lt;br /&gt;
        }&lt;br /&gt;
        catch (IOException exc){&lt;br /&gt;
            System.err.println(&amp;quot;Unable to run rmic utility. Exiting application.&amp;quot;);&lt;br /&gt;
            System.exit(1);&lt;br /&gt;
        }&lt;br /&gt;
        catch (InterruptedException exc){&lt;br /&gt;
            System.err.println(&amp;quot;Threading problems encountered while using the rmic utility.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Starting the rmiregistry&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        Process rmiProcess = null;&lt;br /&gt;
        try{&lt;br /&gt;
            rmiProcess = Runtime.getRuntime().exec(&amp;quot;rmiregistry&amp;quot;);&lt;br /&gt;
            Thread.sleep(15000);&lt;br /&gt;
        }&lt;br /&gt;
        catch (IOException exc){&lt;br /&gt;
            System.err.println(&amp;quot;Unable to start the rmiregistry. Exiting application.&amp;quot;);&lt;br /&gt;
            System.exit(1);&lt;br /&gt;
        }&lt;br /&gt;
        catch (InterruptedException exc){&lt;br /&gt;
            System.err.println(&amp;quot;Threading problems encountered when starting the rmiregistry.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Creating the client and server objects&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        CallbackServerImpl callbackServer = new CallbackServerImpl();&lt;br /&gt;
        CallbackClientImpl callbackClient = new CallbackClientImpl();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;CallbackClientImpl requesting a project&amp;quot;);&lt;br /&gt;
        callbackClient.requestProject(&amp;quot;New Java Project&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        try{&lt;br /&gt;
            while(!callbackClient.isProjectAvailable()){&lt;br /&gt;
                System.out.println(&amp;quot;Project not available yet; sleeping for 2 seconds&amp;quot;);&lt;br /&gt;
                Thread.sleep(2000);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        catch (InterruptedException exc){}&lt;br /&gt;
        System.out.println(&amp;quot;Project retrieved: &amp;quot; + callbackClient.getProject());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
import java.rmi.Naming;&lt;br /&gt;
import java.rmi.server.UnicastRemoteObject;&lt;br /&gt;
public class CallbackServerImpl implements CallbackServer{&lt;br /&gt;
    private static final String CALLBACK_SERVER_SERVICE_NAME = &amp;quot;callbackServer&amp;quot;;&lt;br /&gt;
    public CallbackServerImpl(){&lt;br /&gt;
        try {&lt;br /&gt;
            UnicastRemoteObject.exportObject(this);&lt;br /&gt;
            Naming.rebind(CALLBACK_SERVER_SERVICE_NAME, this);&lt;br /&gt;
        }&lt;br /&gt;
        catch (Exception exc){&lt;br /&gt;
            System.err.println(&amp;quot;Error using RMI to register the CallbackServerImpl &amp;quot; + exc);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void getProject(String projectID, String callbackMachine,&lt;br /&gt;
      String callbackObjectName){&lt;br /&gt;
        new CallbackServerDelegate(projectID, callbackMachine, callbackObjectName);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
import java.rmi.Remote;&lt;br /&gt;
import java.rmi.RemoteException;&lt;br /&gt;
public interface CallbackServer extends Remote{&lt;br /&gt;
    public void getProject(String projectID, String callbackMachine,&lt;br /&gt;
      String callbackObjectName) throws RemoteException;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
import java.net.InetAddress;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.UnknownHostException;&lt;br /&gt;
import java.rmi.Naming;&lt;br /&gt;
import java.rmi.server.UnicastRemoteObject;&lt;br /&gt;
import java.rmi.NotBoundException;&lt;br /&gt;
import java.rmi.RemoteException;&lt;br /&gt;
public class CallbackClientImpl implements CallbackClient{&lt;br /&gt;
    private static final String CALLBACK_CLIENT_SERVICE_NAME = &amp;quot;callbackClient&amp;quot;;&lt;br /&gt;
    private static final String CALLBACK_SERVER_SERVICE_NAME = &amp;quot;callbackServer&amp;quot;;&lt;br /&gt;
    private static final String CALLBACK_SERVER_MACHINE_NAME = &amp;quot;localhost&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    private Project requestedProject;&lt;br /&gt;
    private boolean projectAvailable;&lt;br /&gt;
    &lt;br /&gt;
    public CallbackClientImpl(){&lt;br /&gt;
        try {&lt;br /&gt;
            UnicastRemoteObject.exportObject(this);&lt;br /&gt;
            Naming.rebind(CALLBACK_CLIENT_SERVICE_NAME, this);&lt;br /&gt;
        }&lt;br /&gt;
        catch (Exception exc){&lt;br /&gt;
            System.err.println(&amp;quot;Error using RMI to register the CallbackClientImpl &amp;quot; + exc);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void receiveProject(Project project){&lt;br /&gt;
        requestedProject = project;&lt;br /&gt;
        projectAvailable = true;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void requestProject(String projectName){&lt;br /&gt;
        try{&lt;br /&gt;
            String url = &amp;quot;//&amp;quot; + CALLBACK_SERVER_MACHINE_NAME + &amp;quot;/&amp;quot; + CALLBACK_SERVER_SERVICE_NAME;&lt;br /&gt;
            Object remoteServer = Naming.lookup(url);&lt;br /&gt;
            if (remoteServer instanceof CallbackServer){&lt;br /&gt;
                ((CallbackServer)remoteServer).getProject(projectName,&lt;br /&gt;
                   InetAddress.getLocalHost().getHostName(),&lt;br /&gt;
                   CALLBACK_CLIENT_SERVICE_NAME);&lt;br /&gt;
            }&lt;br /&gt;
            projectAvailable = false;&lt;br /&gt;
        }&lt;br /&gt;
        catch (RemoteException exc){}&lt;br /&gt;
        catch (NotBoundException exc){}&lt;br /&gt;
        catch (MalformedURLException exc){}&lt;br /&gt;
        catch (UnknownHostException exc){}&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public Project getProject(){ return requestedProject; }&lt;br /&gt;
    public boolean isProjectAvailable(){ return projectAvailable; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.rmi.Naming;&lt;br /&gt;
import java.rmi.NotBoundException;&lt;br /&gt;
import java.rmi.RemoteException;&lt;br /&gt;
public class CallbackServerDelegate implements Runnable{&lt;br /&gt;
    private Thread processingThread;&lt;br /&gt;
    private String projectID;&lt;br /&gt;
    private String callbackMachine;&lt;br /&gt;
    private String callbackObjectName;&lt;br /&gt;
    &lt;br /&gt;
    public CallbackServerDelegate(String newProjectID, String newCallbackMachine,&lt;br /&gt;
      String newCallbackObjectName){&lt;br /&gt;
        projectID = newProjectID;&lt;br /&gt;
        callbackMachine = newCallbackMachine;&lt;br /&gt;
        callbackObjectName = newCallbackObjectName;&lt;br /&gt;
        processingThread = new Thread(this);&lt;br /&gt;
        processingThread.start();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void run(){&lt;br /&gt;
        Project result = getProject();&lt;br /&gt;
        sendProjectToClient(result);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private Project getProject(){&lt;br /&gt;
        return new Project(projectID, &amp;quot;Test project&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void sendProjectToClient(Project project){&lt;br /&gt;
        try{&lt;br /&gt;
            String url = &amp;quot;//&amp;quot; + callbackMachine + &amp;quot;/&amp;quot; + callbackObjectName;&lt;br /&gt;
            Object remoteClient = Naming.lookup(url);&lt;br /&gt;
            if (remoteClient instanceof CallbackClient){&lt;br /&gt;
                ((CallbackClient)remoteClient).receiveProject(project);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        catch (RemoteException exc){}&lt;br /&gt;
        catch (NotBoundException exc){}&lt;br /&gt;
        catch (MalformedURLException exc){}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.rmi.Naming;&lt;br /&gt;
import java.rmi.NotBoundException;&lt;br /&gt;
import java.rmi.RemoteException;&lt;br /&gt;
public class CallbackServerWorkThread implements Runnable{&lt;br /&gt;
    private Thread processingThread;&lt;br /&gt;
    private String projectID;&lt;br /&gt;
    private String callbackMachine;&lt;br /&gt;
    private String callbackObjectName;&lt;br /&gt;
    &lt;br /&gt;
    public CallbackServerWorkThread(String newProjectID, String newCallbackMachine,&lt;br /&gt;
      String newCallbackObjectName){&lt;br /&gt;
        projectID = newProjectID;&lt;br /&gt;
        callbackMachine = newCallbackMachine;&lt;br /&gt;
        callbackObjectName = newCallbackObjectName;&lt;br /&gt;
        processingThread = new Thread(this);&lt;br /&gt;
        processingThread.start();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void run(){&lt;br /&gt;
        Project result = getProject();&lt;br /&gt;
        sendProjectToClient(result);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private Project getProject(){&lt;br /&gt;
        return new Project(projectID, &amp;quot;Test project&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void sendProjectToClient(Project project){&lt;br /&gt;
        try{&lt;br /&gt;
            String url = &amp;quot;//&amp;quot; + callbackMachine + &amp;quot;/&amp;quot; + callbackObjectName;&lt;br /&gt;
            Object remoteClient = Naming.lookup(url);&lt;br /&gt;
            if (remoteClient instanceof CallbackClient){&lt;br /&gt;
                ((CallbackClient)remoteClient).receiveProject(project);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        catch (RemoteException exc){}&lt;br /&gt;
        catch (NotBoundException exc){}&lt;br /&gt;
        catch (MalformedURLException exc){}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class Command implements java.io.Serializable{&lt;br /&gt;
    public static final int GET_PROJECT = 1;&lt;br /&gt;
    public static final int GET_TASK = 2;&lt;br /&gt;
    public static final int CREATE_CONTACT = 4;&lt;br /&gt;
    public static final int ADD_ADDRESS = 8;&lt;br /&gt;
    public static final int REMOVE_ADDRESS = 16;&lt;br /&gt;
    public static final int FINALIZE_CONTACT = 32;&lt;br /&gt;
    &lt;br /&gt;
    private int command;&lt;br /&gt;
    private Object [] arguments;&lt;br /&gt;
    &lt;br /&gt;
    public int getCommand(){&lt;br /&gt;
        return command;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public Object [] getArguments(){&lt;br /&gt;
        return arguments;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void setArguments(Object [] newArguments){&lt;br /&gt;
        arguments = newArguments;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void setCommand(int newCommand){&lt;br /&gt;
        command = newCommand;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public Command(int name, Object [] argumentList){&lt;br /&gt;
        command = name;&lt;br /&gt;
        arguments = argumentList;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
public class Project implements ProjectItem{&lt;br /&gt;
    private String name;&lt;br /&gt;
    private String description;&lt;br /&gt;
    private ArrayList projectItems = new ArrayList();&lt;br /&gt;
    &lt;br /&gt;
    public Project(){ }&lt;br /&gt;
    public Project(String newName, String newDescription){&lt;br /&gt;
        name = newName;&lt;br /&gt;
        description = newDescription;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getName(){ return name; }&lt;br /&gt;
    public String getDescription(){ return description; }&lt;br /&gt;
    public ArrayList getProjectItems(){ return projectItems; }&lt;br /&gt;
    &lt;br /&gt;
    public void setName(String newName){ name = newName; }&lt;br /&gt;
    public void setDescription(String newDescription){ description = newDescription; }&lt;br /&gt;
    &lt;br /&gt;
    public void addProjectItem(ProjectItem element){&lt;br /&gt;
        if (!projectItems.contains(element)){&lt;br /&gt;
            projectItems.add(element);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void removeProjectItem(ProjectItem element){&lt;br /&gt;
        projectItems.remove(element);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String toString(){ return name + &amp;quot;, &amp;quot; + description; }&lt;br /&gt;
}&lt;br /&gt;
import java.net.Socket;&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
public class ServerWorkThread implements Runnable{&lt;br /&gt;
    private Thread processingThread;&lt;br /&gt;
    private Socket requestSocket;&lt;br /&gt;
    private Command command;&lt;br /&gt;
    &lt;br /&gt;
    public ServerWorkThread(Socket clientRequestSocket){&lt;br /&gt;
        requestSocket = clientRequestSocket;&lt;br /&gt;
        processingThread = new Thread(this);&lt;br /&gt;
        processingThread.start();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void retrieveCommand(){&lt;br /&gt;
        try{&lt;br /&gt;
            ObjectInputStream in = new ObjectInputStream(requestSocket.getInputStream());&lt;br /&gt;
            Object request = in.readObject();&lt;br /&gt;
            requestSocket.close();&lt;br /&gt;
            if (request instanceof Command){&lt;br /&gt;
                command = (Command)request;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        catch (ClassNotFoundException exc){&lt;br /&gt;
        }&lt;br /&gt;
        catch (IOException exc){&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    protected void processCommand(){&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void run(){&lt;br /&gt;
        retrieveCommand();&lt;br /&gt;
        processCommand();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public Command getCommand(){&lt;br /&gt;
        return command;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    protected Socket getRequestSocket(){&lt;br /&gt;
        return requestSocket;&lt;br /&gt;
    } &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
public class Task implements ProjectItem{&lt;br /&gt;
    private String name;&lt;br /&gt;
    private ArrayList projectItems = new ArrayList();&lt;br /&gt;
    private double timeRequired;&lt;br /&gt;
    &lt;br /&gt;
    public Task(){ }&lt;br /&gt;
    public Task(String newName, double newTimeRequired){&lt;br /&gt;
        name = newName;&lt;br /&gt;
        timeRequired = newTimeRequired;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getName(){ return name; }&lt;br /&gt;
    public ArrayList getProjectItems(){ return projectItems; }&lt;br /&gt;
    public double getTimeRequired(){ return timeRequired; }&lt;br /&gt;
    &lt;br /&gt;
    public void setName(String newName){ name = newName; }&lt;br /&gt;
    public void setTimeRequired(double newTimeRequired){ timeRequired = newTimeRequired; }&lt;br /&gt;
    &lt;br /&gt;
    public void addProjectItem(ProjectItem element){&lt;br /&gt;
        if (!projectItems.contains(element)){&lt;br /&gt;
            projectItems.add(element);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void removeProjectItem(ProjectItem element){&lt;br /&gt;
        projectItems.remove(element);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
import java.net.ServerSocket;&lt;br /&gt;
import java.net.Socket;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
public class ThreadedServer{&lt;br /&gt;
    private static final int DEFAULT_SERVER_PORT = 2001;&lt;br /&gt;
    &lt;br /&gt;
    private boolean shutdown;&lt;br /&gt;
    private int serverPort = DEFAULT_SERVER_PORT;&lt;br /&gt;
    &lt;br /&gt;
    public void runServer(){&lt;br /&gt;
        try{&lt;br /&gt;
            ServerSocket mainServer = new ServerSocket(serverPort);&lt;br /&gt;
            while (!shutdown){&lt;br /&gt;
                Socket requestSocket = mainServer.accept();&lt;br /&gt;
                new ServerWorkThread(requestSocket);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        catch (IOException exc){&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public int getServerPort(){&lt;br /&gt;
        return serverPort;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public boolean isShutdown(){&lt;br /&gt;
        return shutdown;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void setShutdown(boolean isShutdown){&lt;br /&gt;
        shutdown = isShutdown;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void setServerPort(int newServerPort){&lt;br /&gt;
        serverPort = newServerPort;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
import java.rmi.Remote;&lt;br /&gt;
import java.rmi.RemoteException;&lt;br /&gt;
public interface CallbackClient extends Remote{&lt;br /&gt;
    public void receiveProject(Project project) throws RemoteException;&lt;br /&gt;
}&lt;br /&gt;
import java.io.Serializable;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
public interface ProjectItem extends Serializable{&lt;br /&gt;
    public ArrayList getProjectItems();&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Chain Pattern ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//[C] 2002 Sun Microsystems, Inc.---&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.FileOutputStream;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.ObjectInputStream;&lt;br /&gt;
import java.io.ObjectOutputStream;&lt;br /&gt;
import java.io.Serializable;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
public class RunChainPattern {&lt;br /&gt;
    public static void main(String [] arguments){&lt;br /&gt;
        System.out.println(&amp;quot;Example for the Chain of Responsibility pattern&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;This code uses chain of responsibility to obtain&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; the owner for a particular ProjectItem, and to&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; build up a list of project details. In each case,&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; a call to the appropriate getter method, getOwner&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; or getDetails, will pass the method call up the&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; project tree.&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;For getOwner, the call will return the first non-null&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; owner field encountered. For getDetails, the method&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; will build a series of details, stopping when it&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; reaches a ProjectItem that is designated as a&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; primary task.&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Deserializing a test Project for Visitor pattern&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        if (!(new File(&amp;quot;data.ser&amp;quot;).exists())){&lt;br /&gt;
            DataCreator.serialize(&amp;quot;data.ser&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        Project project = (Project)(DataRetriever.deserializeData(&amp;quot;data.ser&amp;quot;));&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Retrieving Owner and details for each item in the Project&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        getItemInfo(project);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private static void getItemInfo(ProjectItem item){&lt;br /&gt;
        System.out.println(&amp;quot;ProjectItem: &amp;quot; + item);&lt;br /&gt;
        System.out.println(&amp;quot;  Owner: &amp;quot; + item.getOwner());&lt;br /&gt;
        System.out.println(&amp;quot;  Details: &amp;quot; + item.getDetails());&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        if (item.getProjectItems() != null){&lt;br /&gt;
            Iterator subElements = item.getProjectItems().iterator();&lt;br /&gt;
            while (subElements.hasNext()){&lt;br /&gt;
                getItemInfo((ProjectItem)subElements.next());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
interface Contact extends Serializable{&lt;br /&gt;
    public static final String SPACE = &amp;quot; &amp;quot;;&lt;br /&gt;
    public String getFirstName();&lt;br /&gt;
    public String getLastName();&lt;br /&gt;
    public String getTitle();&lt;br /&gt;
    public String getOrganization();&lt;br /&gt;
    &lt;br /&gt;
    public void setFirstName(String newFirstName);&lt;br /&gt;
    public void setLastName(String newLastName);&lt;br /&gt;
    public void setTitle(String newTitle);&lt;br /&gt;
    public void setOrganization(String newOrganization);&lt;br /&gt;
}&lt;br /&gt;
class ContactImpl implements Contact{&lt;br /&gt;
    private String firstName;&lt;br /&gt;
    private String lastName;&lt;br /&gt;
    private String title;&lt;br /&gt;
    private String organization;&lt;br /&gt;
    &lt;br /&gt;
    public ContactImpl(){}&lt;br /&gt;
    public ContactImpl(String newFirstName, String newLastName,&lt;br /&gt;
        String newTitle, String newOrganization){&lt;br /&gt;
            firstName = newFirstName;&lt;br /&gt;
            lastName = newLastName;&lt;br /&gt;
            title = newTitle;&lt;br /&gt;
            organization = newOrganization;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getFirstName(){ return firstName; }&lt;br /&gt;
    public String getLastName(){ return lastName; }&lt;br /&gt;
    public String getTitle(){ return title; }&lt;br /&gt;
    public String getOrganization(){ return organization; }&lt;br /&gt;
    &lt;br /&gt;
    public void setFirstName(String newFirstName){ firstName = newFirstName; }&lt;br /&gt;
    public void setLastName(String newLastName){ lastName = newLastName; }&lt;br /&gt;
    public void setTitle(String newTitle){ title = newTitle; }&lt;br /&gt;
    public void setOrganization(String newOrganization){ organization = newOrganization; }&lt;br /&gt;
    &lt;br /&gt;
    public String toString(){&lt;br /&gt;
        return firstName + SPACE + lastName;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Task implements ProjectItem{&lt;br /&gt;
    private String name;&lt;br /&gt;
    private ArrayList projectItems = new ArrayList();&lt;br /&gt;
    private Contact owner;&lt;br /&gt;
    private String details;&lt;br /&gt;
    private ProjectItem parent;&lt;br /&gt;
    private boolean primaryTask;&lt;br /&gt;
    &lt;br /&gt;
    public Task(ProjectItem newParent){&lt;br /&gt;
        this(newParent, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, null, false);&lt;br /&gt;
    }&lt;br /&gt;
    public Task(ProjectItem newParent, String newName,&lt;br /&gt;
        String newDetails, Contact newOwner, boolean newPrimaryTask){&lt;br /&gt;
            parent = newParent;&lt;br /&gt;
            name = newName;&lt;br /&gt;
            owner = newOwner;&lt;br /&gt;
            details = newDetails;&lt;br /&gt;
            primaryTask = newPrimaryTask;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public Contact getOwner(){&lt;br /&gt;
        if (owner == null){&lt;br /&gt;
            return parent.getOwner();&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
            return owner;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getDetails(){&lt;br /&gt;
        if (primaryTask){&lt;br /&gt;
            return details;&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
            return parent.getDetails() + EOL_STRING + &amp;quot;\t&amp;quot; + details;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getName(){ return name; }&lt;br /&gt;
    public ArrayList getProjectItems(){ return projectItems; }&lt;br /&gt;
    public ProjectItem getParent(){ return parent; }&lt;br /&gt;
    public boolean isPrimaryTask(){ return primaryTask; }&lt;br /&gt;
    &lt;br /&gt;
    public void setName(String newName){ name = newName; }&lt;br /&gt;
    public void setOwner(Contact newOwner){ owner = newOwner; }&lt;br /&gt;
    public void setParent(ProjectItem newParent){ parent = newParent; }&lt;br /&gt;
    public void setPrimaryTask(boolean newPrimaryTask){ primaryTask = newPrimaryTask; }&lt;br /&gt;
    public void setDetails(String newDetails){ details = newDetails; }&lt;br /&gt;
    &lt;br /&gt;
    public void addProjectItem(ProjectItem element){&lt;br /&gt;
        if (!projectItems.contains(element)){&lt;br /&gt;
            projectItems.add(element);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void removeProjectItem(ProjectItem element){&lt;br /&gt;
        projectItems.remove(element);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String toString(){&lt;br /&gt;
        return name;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class DataCreator{&lt;br /&gt;
    private static final String DEFAULT_FILE = &amp;quot;data.ser&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    public static void main(String [] args){&lt;br /&gt;
        String fileName;&lt;br /&gt;
        if (args.length == 1){&lt;br /&gt;
            fileName = args[0];&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
            fileName = DEFAULT_FILE;&lt;br /&gt;
        }&lt;br /&gt;
        serialize(fileName);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static void serialize(String fileName){&lt;br /&gt;
        try{&lt;br /&gt;
            serializeToFile(createData(), fileName);&lt;br /&gt;
        }&lt;br /&gt;
        catch (IOException exc){&lt;br /&gt;
            exc.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private static Serializable createData(){&lt;br /&gt;
        Contact contact1 = new ContactImpl(&amp;quot;Dennis&amp;quot;, &amp;quot;Moore&amp;quot;, &amp;quot;Managing Director&amp;quot;, &amp;quot;Highway Man, LTD&amp;quot;);&lt;br /&gt;
        Contact contact2 = new ContactImpl(&amp;quot;Joseph&amp;quot;, &amp;quot;Mongolfier&amp;quot;, &amp;quot;High Flyer&amp;quot;, &amp;quot;Lighter than Air Productions&amp;quot;);&lt;br /&gt;
        Contact contact3 = new ContactImpl(&amp;quot;Erik&amp;quot;, &amp;quot;Njoll&amp;quot;, &amp;quot;Nomad without Portfolio&amp;quot;, &amp;quot;Nordic Trek, Inc.&amp;quot;);&lt;br /&gt;
        Contact contact4 = new ContactImpl(&amp;quot;Lemming&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;Principal Investigator&amp;quot;, &amp;quot;BDA&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        Project project = new Project(&amp;quot;IslandParadise&amp;quot;, &amp;quot;Acquire a personal island paradise&amp;quot;, contact2);&lt;br /&gt;
        &lt;br /&gt;
        Task task1 = new Task(project, &amp;quot;Fortune&amp;quot;, &amp;quot;Acquire a small fortune&amp;quot;, contact4, true);&lt;br /&gt;
        Task task2 = new Task(project, &amp;quot;Isle&amp;quot;, &amp;quot;Locate an island for sale&amp;quot;, null, true);&lt;br /&gt;
        Task task3 = new Task(project, &amp;quot;Name&amp;quot;, &amp;quot;Decide on a name for the island&amp;quot;, contact3, false);&lt;br /&gt;
        project.addProjectItem(task1);&lt;br /&gt;
        project.addProjectItem(task2);&lt;br /&gt;
        project.addProjectItem(task3);&lt;br /&gt;
        &lt;br /&gt;
        Task task4 = new Task(task1, &amp;quot;Fortune1&amp;quot;, &amp;quot;Use psychic hotline to predict winning lottery numbers&amp;quot;, null, false);&lt;br /&gt;
        Task task5 = new Task(task1, &amp;quot;Fortune2&amp;quot;, &amp;quot;Invest winnings to ensure 50% annual interest&amp;quot;, contact1, true);&lt;br /&gt;
        Task task6 = new Task(task2, &amp;quot;Isle1&amp;quot;, &amp;quot;Research whether climate is better in the Atlantic or Pacific&amp;quot;, contact1, true);&lt;br /&gt;
        Task task7 = new Task(task2, &amp;quot;Isle2&amp;quot;, &amp;quot;Locate an island for auction on EBay&amp;quot;, null, false);&lt;br /&gt;
        Task task8 = new Task(task2, &amp;quot;Isle2a&amp;quot;, &amp;quot;Negotiate for sale of the island&amp;quot;, null, false);&lt;br /&gt;
        Task task9 = new Task(task3, &amp;quot;Name1&amp;quot;, &amp;quot;Research every possible name in the world&amp;quot;, null, true);&lt;br /&gt;
        Task task10 = new Task(task3, &amp;quot;Name2&amp;quot;, &amp;quot;Eliminate any choices that are not coffee-related&amp;quot;, contact4, false);&lt;br /&gt;
        task1.addProjectItem(task4);&lt;br /&gt;
        task1.addProjectItem(task5);&lt;br /&gt;
        task2.addProjectItem(task6);&lt;br /&gt;
        task2.addProjectItem(task7);&lt;br /&gt;
        task2.addProjectItem(task8);&lt;br /&gt;
        task3.addProjectItem(task9);&lt;br /&gt;
        task3.addProjectItem(task10);&lt;br /&gt;
        return project;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private static void serializeToFile(Serializable content, String fileName) throws IOException{&lt;br /&gt;
        ObjectOutputStream serOut = new ObjectOutputStream(new FileOutputStream(fileName));&lt;br /&gt;
        serOut.writeObject(content);&lt;br /&gt;
        serOut.close();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
interface ProjectItem extends Serializable{&lt;br /&gt;
    public static final String EOL_STRING = System.getProperty(&amp;quot;line.separator&amp;quot;);&lt;br /&gt;
    public ProjectItem getParent();&lt;br /&gt;
    public Contact getOwner();&lt;br /&gt;
    public String getDetails();&lt;br /&gt;
    public ArrayList getProjectItems();&lt;br /&gt;
}&lt;br /&gt;
class Project implements ProjectItem{&lt;br /&gt;
    private String name;&lt;br /&gt;
    private Contact owner;&lt;br /&gt;
    private String details;&lt;br /&gt;
    private ArrayList projectItems = new ArrayList();&lt;br /&gt;
    &lt;br /&gt;
    public Project(){ }&lt;br /&gt;
    public Project(String newName, String newDetails, Contact newOwner){&lt;br /&gt;
        name = newName;&lt;br /&gt;
        owner = newOwner;&lt;br /&gt;
        details = newDetails;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getName(){ return name; }&lt;br /&gt;
    public String getDetails(){ return details; }&lt;br /&gt;
    public Contact getOwner(){ return owner; }&lt;br /&gt;
    public ProjectItem getParent(){ return null; }&lt;br /&gt;
    public ArrayList getProjectItems(){ return projectItems; }&lt;br /&gt;
    &lt;br /&gt;
    public void setName(String newName){ name = newName; }&lt;br /&gt;
    public void setOwner(Contact newOwner){ owner = newOwner; }&lt;br /&gt;
    public void setDetails(String newDetails){ details = newDetails; }&lt;br /&gt;
    &lt;br /&gt;
    public void addProjectItem(ProjectItem element){&lt;br /&gt;
        if (!projectItems.contains(element)){&lt;br /&gt;
            projectItems.add(element);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void removeProjectItem(ProjectItem element){&lt;br /&gt;
        projectItems.remove(element);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String toString(){&lt;br /&gt;
        return name;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class DataRetriever{&lt;br /&gt;
    public static Object deserializeData(String fileName){&lt;br /&gt;
        Object returnValue = null;&lt;br /&gt;
        try{&lt;br /&gt;
            File inputFile = new File(fileName);&lt;br /&gt;
            if (inputFile.exists() &amp;amp;&amp;amp; inputFile.isFile()){&lt;br /&gt;
                ObjectInputStream readIn = new ObjectInputStream(new FileInputStream(fileName));&lt;br /&gt;
                returnValue = readIn.readObject();&lt;br /&gt;
                readIn.close();&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                System.err.println(&amp;quot;Unable to locate the file &amp;quot; + fileName);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        catch (ClassNotFoundException exc){&lt;br /&gt;
            exc.printStackTrace();&lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        catch (IOException exc){&lt;br /&gt;
            exc.printStackTrace();&lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        return returnValue;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>