Den Server via JNDI ansprechen

Dokumente für die Entwicklung von und mit JVx.

Den Server via JNDI ansprechen

Postby Development@SIB » Thu Jun 03, 2010 2:04 pm

Der Server für JVx Clients wird entweder in der aktuellen JVM instanziert oder am Applikationsserver wie z.B. Tomcat, JBoss. In der aktuellen VM genügt der Aufruf

Code: Select all
Server server = new Server();

um eine Server Instanz zu erstellen. Doch dadurch besteht die Gefahr das mehrere Server Instanzen erstellt werden (kann aber durchaus erwünscht sein). Um den Server als Singleton zu behandeln steht die Methode

Code: Select all
Server server = Server.getInstance();

zur Verfügung. Durch diese Verwendung wird zusätzlich versucht eine Server Instanz via JNDI anzusprechen.

Am Applikationsserver wird durch den ServletServer eine neue Instanz des Servers erstellt. Das wird durch den Aufruf von

Code: Select all
Server server = Server.getInstance();

erledigt. Wenn der Server nun als JNDI Resource zur Verfügung steht, übernimmt der Applikationsserver die Instanzierung des Servers. Dadurch könnte z.B eine Server Instanz für alle Applikationen eines Applikationsservers verwendet werden.


Die Konfiguration einer globalen JNDI Resource wird für den Applikationsserver Tomcat wie folgt durchgeführt:

conf/server.xml:

Code: Select all
<GlobalNamingResources>
  ...
  ...
  ...
  <Resource auth="Container"
            factory="org.apache.naming.factory.BeanFactory"
            name="globalserver"
            type="com.sibvisions.rad.server.Server"/>
   
</GlobalNamingResources>

<DefaultContext>
  <ResourceLink name="jvx/server"
                global="globalserver"
                type="com.sibvisions.rad.server.Server" />
</DefaultContext>


Der ResourceLink im DefaultContext kann auch im META-INF/context.xml der jeweiligen Web Applikation definiert werden. Das ist immer abhängig von der Konfiguration des Servers bzw. der Web Applikation. Ein mögliches Beispiel:

Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<Context>
   <ResourceLink name="jvx/server"
                 global="globalserver"
                 type="com.sibvisions.rad.server.Server" />         
</Context>


Um den Server nur für einzelne Web Applikationen via JNDI bereitzustellen ist die Konfiguration wie folgt durchzuführen:

META-INF/context.xml:

Code: Select all
<?xml version="1.0" encoding="UTF-8"?>

<Context>
  <Resource name="jvx/server" auth="Container"
            type="com.sibvisions.rad.server.Server"
            factory="org.apache.naming.factory.BeanFactory"/>
</Context>


Egal ob der Server für alle oder für einzelne Web Applikationen bereitgestellt wird. Es ist zu empfehlen den Deployment Deskriptor in allen Fällen zu konfigurieren:

Code: Select all
<web-app ...>
  ...
  ...
  ...
  <resource-ref>
   <description>Object factory for Server instances.</description>
   <res-ref-name>jvx/server</res-ref-name>
   <res-ref-type>com.sibvisions.rad.server.Server</res-ref-type>
   <res-auth>Container</res-auth>
  </resource-ref>

</web-app>

Im Falle eines globalen Servers müsste der Deployment Deskriptor nicht angepasst werden, ist jedoch zu empfehlen um die verwendeten Resourcen zu überblicken.


Hinweis

Wenn der Server global konfiguriert wird müssen auch alle Applikations-Daten wie z.B. rad Verzeichnis, .class Dateien, global zur Verfügung stehen, da nicht der Applikations ClassLoader verwendet wird!
User avatar
Development@SIB
 
Posts: 310
Joined: Mon Sep 28, 2009 1:54 pm

Return to Dokumentation