JNDI Ressourcen anlegen und benutzen

Mit dem JNDI (Java Naming and Directory Interface) können Ressourcen unter einem Namen angelegt -und abgerufen werden. Der Haupteinsatzzweck ist die Verteilung und Verwendung (meist über Remote Method Invocation) von gemeinsamen Ressourcen in einer Java Enterprise-Anwendung. Oft werden auch JDBC-Datenbanken über die JNDI referenziert.

Um diese Verwendungszwecke später besser zu verstehen, möchte ich kurz mit einem einfachen Beispiel zeigen, wie mit der JNDI eine Ressource (im Beispiel eine einfache Zeichenkette) angelegt werden kann. Der definierte String wird dann in einer JSP-Datei verwendet.

Getestet habe ich den Code auf einem Apache Tomcat 7-Application Server.

1. Ressource in ../META-INF/context.xml definieren

1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/my-webapp">
  <Environment name="myResource" 
               type="java.lang.String"
               value="Hello World, I'm a JNDI resource! :-)">
  </Environment>
</Context>

2. Ressource in JSP-Datei verwenden:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="javax.naming.Context" %>
<%@page import="javax.naming.InitialContext" %>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Java Naming and Directory Interface Test</title>
  </head>
  <body>
    <h1>Lookup Test</h1>
    <%
      try {
        Context context = new InitialContext();
        String myResource = (String) context.lookup("java:/comp/env/myResource");
        out.println(myResource);
      } catch (Exception ex) {
        out.println("<h2>Exception:</h2>" + ex);
      }
    %>
  </body>
</html>

Hinweis:
Bezieht man die Ressource nicht aus der context.xml Datei der eigenen Web-Applikation (sondern z.B. aus den GlobalNamingResources aus der server.xml von Tomcat), so muss man die Ressource im Standard Deployment Descriptor (../WEB-INF/web.xml) des eigenen Projektes referenzieren. Andernfalls kommt es zur Fehlermeldung: [Resource] is not bound in this Context.

Beispiel: Ressource referenzieren

<pre lang="xml" line="1">
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <resource-env-ref>
    <resource-env-ref-name>myResource</resource-env-ref-name>
    <resource-env-ref-type>java.lang.String</resource-env-ref-type>
  </resource-env-ref>
</web-app>

Mehr dazu in diesem Video (Configuring JNDI entry in Tomcat 6):

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.