# JBoss: Frage zur Datasource in der ...-ds.xml



## Hannes23 (25. Mai 2010)

Hallo zusammen,

in meinem JBoss-Deployverzeichnis befindet sich eine postgres-ds.xml, in der eine datasources angegeben habe - soweit funktioniert alles gut. Wie aber kann ich ein weiteres Projekt über diesen JBoss laufen lassen, das eine andere Postgres-DB benutzt? Lege ich in meiner postgres-ds.xml einfach eine weitere Datasource an oder muss ich eine neue "postgres2-ds.xml" anlegen? Und wie teile ich meinem Java-Programm eigentlich mit, welches *.xml es für die Persistence-Unit verwenden soll? Sucht es automatisch in allen *.xml im deploy-Verzeichnis nach dem Namen der angegebenen Persistence Unit?

So viele Fragen...

Viele Grüße, Hannes


----------



## fastjack (25. Mai 2010)

> Wie aber kann ich ein weiteres Projekt über diesen JBoss laufen lassen, das eine andere Postgres-DB benutzt? Lege ich in meiner postgres-ds.xml einfach eine weitere Datasource an oder muss ich eine neue "postgres2-ds.xml" anlegen?


In der Datasource-Datei definierst Du ja einen JNDI-Namen, dieser muß unterschiedlich sein. Wie Du die Datei benennst, ist fast egal, *-ds.xml sollte es aber sein.



> Und wie teile ich meinem Java-Programm eigentlich mit, welches *.xml es für die Persistence-Unit verwenden soll?


Im Programm wird die Datasource über den JNDI-Namen angesprochen, z.B. durch context.lookup("MeineDB") ...



> Sucht es automatisch in allen *.xml im deploy-Verzeichnis nach dem Namen der angegebenen Persistence Unit?


Denke ich eher nicht. Irgendwo mußt Du Deiner Persistenzschicht den JNDI-Namen unterjubeln.


----------



## Hannes23 (26. Mai 2010)

Hallo FastJack,

danke für Deine Antwort!! Ich hab es in meinem Programm so gemacht:

Bei der Definition des EntityManagers gebe ich die PersistenceUnit an (Hier: MyPersistenceUnit):


```
@PersistenceContext(unitName="MyPersistenceUnit")
public EntityManager em;
```


In der persistence.xml gebe ich dann zur MyPersistenceUnit die jeweilige jta-data-source an (hier: java:/PostgresDataSource)


```
<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/ persistence_1_0.xsd" version="1.0">

        <persistence-unit name="MyPersistenceUnit" >
                <jta-data-source>java:/PostgresDataSource</jta-data-source>
                <properties>
                        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
                        <property name="hibernate.hbm2ddl.auto" value="update"/>
                </properties>
        </persistence-unit>
</persistence>
```

...und in der postgres-ds.xml (deploy-Verzeichnis) gebe ich dann zum jndi-namen (hier: PostgresDataSource) die jeweiligen Zugangsdaten zur Datenbank an:


```
<datasources>
  <local-tx-datasource>
    <jndi-name>PostgresDS</jndi-name>
    <connection-url>jdbc:postgresql://localhost:5432/Datenbank</connection-url>
    <driver-class>org.postgresql.Driver</driver-class>
    <user-name>user</user-name>
    <password>passwort</password>
   
      <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
      <metadata>
         <type-mapping>PostgreSQL 7.2</type-mapping>
      </metadata>
  </local-tx-datasource>
```

Soweit funktioniert das wie gesagt. Wobei mich das eigentlich wundert, da ich die postgres-ds.xml und ihren Pfand nie irgendwo angegeben habe....

Um eine zweite Datenbankverbindung aufzubauen (also ein zweites Java-Programm mit Postgres-Zugriff im gleichen JBoss Deploy-Verzeichnis zu haben) muss ich dann einfach in der gleichen postgres-ds.xml den Bereich


```
<local-tx-datasource>
...
 </local-tx-datasource>
```

nochmal mit einem weiteren jndi-namen anlegen? Oder macht man dann eher ein neues xxx-ds.xml? 

Viele Grüße, Hannes


----------



## fastjack (26. Mai 2010)

> Soweit funktioniert das wie gesagt. Wobei mich das eigentlich wundert, da ich die postgres-ds.xml und ihren Pfand nie irgendwo angegeben habe....


Der jBoss lädt diese Dateien im laufenden Betrieb und stellt sie durch JNDI bereit.



> nochmal mit einem weiteren jndi-namen anlegen? Oder macht man dann eher ein neues xxx-ds.xml?


Beides sollte gehen.

Wie die Persistence-XML bei Dir mit der Datasource verbunden wird, kann ich Dir leider nicht sagen.


----------



## Hannes23 (26. Mai 2010)

Hallo FastJack,

danke für die Infos! Ich hab es jetzt auch so gemacht, dass ich zwei JNDIS in die xx-ds.xml aufgenommen habe und es klappt einwandfrei...Thema erledigt 

Vielen Dank und viele Grüße,

Hannes


----------

