JBoss AS7 lokales und globales JNDI

Wenn man ein Set von Web-Applikationen hat (Bestands-Code), die über die selbe Datenbank-Zugriffs-Klasse ihren Zugriffe kapseln, dann ist das schon mal nicht schlecht.

Wenn dann aber in dieser Klasse der JNDI-Name fest kodiert ist und man aber dummerweise die Datasources JNDI-zentral definiert hat (um sie zentral zu warten), ist das nicht gut. Da natürlich alles Web-Applikationen eigene Datenbanken besitzen sollen.

Eine gute Referenz und Übersicht über die JNDI-Regeln ist hier zu finden.

Also ist die Aufgabe, die globalen JNDI-Namen auf den einen lokalen JNDI-Namen jeweils zu mappen. Wenn man es erst einmal gefunden hat, ist dies trivial. Der Eintrag in der WEB-INF/jboss-web.xml hierzu lautet:


<resource-ref>
<res-ref-name>comp:jdbc/Datasource</res-ref-name>
<jndi-name>java:jboss/datasources/MyDataSource</jndi-name>
</resource-ref>

Der analoge Eintrag in der web.xml hierzu ist:


<resource-ref>
<description>java:postgreSQL Datasource</description>
<res-ref-name>jdbc/DataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>