# [osgi] Services implementieren



## DEvent (6. Mai 2010)

Hallo,
ich beschäftige mich gerade mit OSGi Services und frage mich wie man sie am implementiert. Ich verstehe, dass im Bundle-Lebenszyklus ein Services aktiviert und registriert werden kann. 

Aber soweit ich das sehe, kann man für jeden Service nur ein Objekt erstellen und registrieren. Somit muss das Objekt Thread-sicher sein, damit es von mehreren Clients konsumiert werden kann. Wo aber bringt man die Konfiguration für den Service unter?

Als Beispiel, ich habe einen Services, der Daten aus einer Datenbank ausliest und es den Clients zur Verfügung stellt. Nun muss aber der Service wissen, welche Datenbank es benutzen soll. Wenn nun Client A auf die Datenbank a stellt, und dann später Client B auf die Datenbank b stellt, kann ja alles kollidieren. Das Interface darf dann gar nicht so sein:

```
public interface Service {

  void setDatabase(Database database);

  Data getData();

}
```
Sondern muss alles in einer Methode erledigen:

```
public interface Service {

  Data getData(Database database);

}
```

Gibt es Richtlinien im Web für die Erstellung von Services? Wo bringt man die Konfiguration eines Service unter?

Gibt es ein Unterforum für OSGi spezifische Fragen?


----------



## Wildcard (6. Mai 2010)

Mach doch stattdessen eine Methode:

```
public DatabaseClient getDatabaseClient(Database)
```



> Gibt es ein Unterforum für OSGi spezifische Fragen?


Gibt es, und genau dorthin verschiebe ich den Beitrag jetzt auch.


----------



## maki (6. Mai 2010)

> Aber soweit ich das sehe, kann man für jeden Service nur ein Objekt erstellen und registrieren. Somit muss das Objekt Thread-sicher sein, damit es von mehreren Clients konsumiert werden kann. Wo aber bringt man die Konfiguration für den Service unter?
> 
> Als Beispiel, ich habe einen Services, der Daten aus einer Datenbank ausliest und es den Clients zur Verfügung stellt. Nun muss aber der Service wissen, welche Datenbank es benutzen soll. Wenn nun Client A auf die Datenbank a stellt, und dann später Client B auf die Datenbank b stellt, kann ja alles kollidieren. Das Interface darf dann gar nicht so sein:


OSGi Services sind Singletons (aber nicht die "schlechte" Art ), mir ist nicht klar warum die Clients entscheiden können welche DB neutzt wird, u.U. wäre es sauberer für jede DB eigene Services zu nutzen.


----------

