# RMI - ServerFactory und ein paar Fragen



## eooc (14. Apr 2005)

Tag zusammen ..

Aus dem Buch: Distributed Programming with Java von Qusay H. Mahmoud habe ich folgendes Beispiel getestet und dazu eine bestimmte Frage:


kleine Übersicht (gekürzt da nicht zwingend notwenidig zur Frage)

CityFactory: interface - Methoden: public City2Impl getCityServer(String name)
City2: interface - Mehoden: getPopulation() || getTemperature()



```
import ...
public class City2Impl extends UnicastRemoteObject implements City2{
... ausformulierung der Methoden ....
}
```


```
import ...

public class CityFactoryImpl extends UnicastRemosteObject implements CityFactory{
... ausformulierung der Methoden ....

public staic void main(String argv[]) {    
System.setSecuritymanager ....
try
{
CityFactoryImpl obj = new CityFactoryImpl();
Naming.rebind("//hostname/CityFactory",obj);
}catch (....
}
}
```


```
import java.rmi.*;

public class City2App.java {
public stativ void main(String args[]) {
Remote obj = null;
CityFactoryImpl cityfactory;
City2 ottawa = null;
City2 toronto = null;
int ottawaPopulation = 0;
int torontoPopulation = 0;

try {
obj = Naming.lookup("//hostname/CityFactory");
} catch (Exception e){
e.printStackTrace();
}

if(obj instanceof CityFactoryImpl) {
cityFactory = (CityFactoryImpl) obj;
}

//create a server for each city.
try{
ottawa = new CityFactoryImpl().getCityServer("Ottawa");
toronto = new CityFactoryImpl().getCityServer("Toronto");
}catch (Exception e)
{e.printStackTrace();}
}

// Invoke methods on those servers
.... 
}
```

Mal abgesehen davon, das man das ganze mit java 1.5 nun anders macht frage ich mich aber dennoch:

Wieso wird in der City2App das "obj" Object erzeugt und späer nicht genutzt um die Server zu erzeugen ? 
Macht das überhaupt so Sinn RMI in der Art zu nutzen ? Wenn ja .. welchen nutzen hat das ganze ?

Was meint ihr dazu ? Ich steh da gerade etwas auf dem Schlauch ...

Schönen Gruß
EooC


----------



## Bleiglanz (15. Apr 2005)

ist nur ein pattern, "service locator"

-> die factory soll es dem client nur einfacher machen, seine "Dinger" zu finden, er braucht z.B. nicht wissen, unter welchem Namen die Städte (City2) gebunden sind

Die einzige Abhängigkeit ist der lookup-Name der Factory, das macht den Code etwas robuster (man kann am Server mehr "ändern" ohne den Client anzufassen ...)


----------



## eooc (15. Apr 2005)

Mmhmm ok ..

Ich frage mich dann allerdings ob es nicht doch sinnvoller wäre die Server für die einzelnen Objekte über eine "zentrale" CityFactory zu erzeugen, wenn man beabsichtigt von mehreren Clients auf die CityFactory zuzugreifen.

Z.B. soll einer der Clients permant die Temperaturen aller Städte der CityFactory anzeigen und auch dann sich selbständig aktualisieren wenn eine der Städte eine Änderung der Temperatur aufweist. Realisieren würde ich das über CallBack Methoden.

Also meine Idee für den Server geht dahin, dass zu jeder City ein eigener CityServer existiert. (was ja bereits gegeben ist wenn ich das richtig verstehe). Dazu soll aber die CityFactory auch eine "Übersicht" über alle bestehenden CityServer haben. Die Übersicht über alle CityServer soll dazu dienen die CityFactory im Umfang zu überwachen und ggf. das erzeugen neuer CityServer zu verhindern wenn ein bestimmter Wert erreicht worden ist.

Soweit noch nachvollziehbar und logisch oder verrenne ich mich da gerade ?
Hat jemand evtl. eine andere Idee oder Anregungen dazu ?

Schönen Gruß
EooC


----------

