# Enterprise Bean mit dynamischer Datenbankauswahl?



## Ulrich Fuchs (12. Sep 2005)

Hallo zusammen,

gibt es im J2EE-Konzept irgendeine Chance, dass ich einer Enterprise Bean beim Aufruf mitgebe, aus welcher JDBC-Datenbank sie sich bedienen soll, ohne dass ich das Mapping vom in der ejb-jar.xml festgelegten Namen auf einen dem Applikationserver bekannten Namen bspw. in einer jboss.xml festgelegt habe? Mit anderen Worten, kann meine Applikation ein 


```
private void openDatabase (String db) {
	DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/" + db);
}
```

machen, und das Mapping (bspw. java:comp/env/jdbc/db1 -> java:/jdbc/database1) passiert nicht im serverspezifschen deployment descriptor jeder Bean, sondern irgendwo zentral für alle Beans?

Das Problem ist, dass ich unter Umständen sehr viele Datenbanken von einer ganzen Reihe von Enterprise Beans aus ansprechen muss. Ich möchte vermeiden, bei einer neu hinzugekommenen Datenbank all diese Beans jedesmal erst neu "aufmachen", dann in jeder die serverspezifische .xml-Datei ändern, und dann jede Bean wieder deployen zu müssen.

Uli
Wikiweise - Wissen ist Wissen[/code]


----------



## Guest (12. Sep 2005)

Dir ist hoffentlich klar, dass alle Entities zuerst freigegeben und sämtliche, laufende 
Transaktionen beendet werden müssten?
Du würdest auch ein ziemliches Durcheinander mit ConnectionFactories etc. geben.
Das gilt übrigens auch, wenn Du einfach nur das Datasource neu "deployen" möchtest.
Man könnte es vielleicht über JMX lösen, es ist aber A... voll Arbeit.

Einfacher wäre alles neu zu deployen (mit ANT + XDoclet), wenn sich die Datenbank
ändert. Kostet nur paar Minuten, je nach Projektgröße.


----------



## Guest (12. Sep 2005)

:autsch: Du würdest auch ein ziemliches Durcheinander mit ConnectionFactories etc. haben.


----------



## Bleiglanz (13. Sep 2005)

ausser durch ein Redeploy kannst du IMHO die einer EntityBean zugeordnete DataSource nicht ändern


----------

