JNDI
Для подсоединения к БД с помощью JNDI-интерфейса используются два класса:
-
com.relx.jdbc.LinterJNDIDataSource (com.relx.jdbc.jndi.LinterDataSource для jdbc2, jdbc.LinJdbc.jndi.LinterDataSource для jdbc1) – реализация javax.sql.DataSource интерфейса, предназначенного для создания соединения с СУБД;
-
com.relx.jdbc.LinterJNDIDataSourceFactory (com.relx.jdbc.jndi.LinterDataSourceFactory для jdbc2, jdbc.LinJdbc.jndi.LinterDataSourceFactory для jdbc1) – реализация интерфейса javax.naming.spi.ObjectFactory, предназначенного для создания DataSource объекта по его ранее сохраненным в контекст свойствам.
Класс LinterDataSource устанавливает следующие свойства:
-
url – строка для соединения с СУБД;
-
username – имя пользователя;
-
password – пароль пользователя;
-
description – вспомогательное текстовое описание источника данных;
-
serverName – сетевое имя сервера;
-
databaseName – имя БД на сервере;
-
portNumber – номер порта сервера;
-
encoding – кодировка соединения с сервером.
Каждое из свойств имеет соответствующий get/set метод, названый с учетом соглашений, принятых при написании JavaBeans.
Для соединения с СУБД с помощью JNDI-интерфейса сначала в некотором контексте (в терминах JNDI) создается описание источника данных и его свойств (это выполняется, как правило, однократно при конфигурировании приложения). Затем приложение может многократно получать из контекста источник данных и создавать соединение к этому источнику данных.
Примеры
-
Программное создание источника данных и привязка его к определенному имени в JNDI-контексте:
import com.relx.jdbc.LinterJNDIDataSource; // для версии JDK 1.4 и выше ... LinterDataSource ds = new LinterDataSource(); ds.setUser("SYSTEM"); ds.setPassword("MANAGER8"); ds.setServerName("localhost"); ds.setPortNumber(1070); ds.setDatabaseName("DEMO"); Context ctx = new InitialContext(); ctx.bind("jdbc/DemoDB", ds); ...
-
Подсоединение к БД c использованием только текстового имени источника данных, помещенного в JNDI-контекст:
Connection getMyLinterConnection() throws NamingException, SQLException { Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("jdbc/DemoDB"); Connection conn = ds.getConnection(); return conn; }
-
Пример конфигурирования источника данных Tomcat для соединения с СУБД:
-
скопировать файлы
linjdbc-1.x.jar
в каталог$TOMCAT_HOME/common/lib
; -
в файле
$TOMCAT_HOME/conf/server.xml
или в файле приложенияMETA-INF/context.xml
в теге < Context > прописать источник данных:< Resource name="jdbc/DB" auth="Container" type="com.relx.jdbc.LinterJNDIDataSource" factory="com.relx.jdbc.jndi.LinterDataSourceFactory" user="SYSTEM" password="MANAGER8" url="jdbc:linter:linapid:localhost:1070:local" encoding="cp866"/ >
-
если сервер JDBC запущен на UNIX-машине, установить encoding="koi8-r";
-
добавить в
WEB-INF/web.xml
ссылку на ресурс:< resource-ref > < res-ref-name >jdbc/DB< /res-ref-name > < res-type >com.relx.jdbc.LinterJNDIDataSource< /res-type > < res-auth >Container< /res-auth > < /resource-ref >
-
теперь в jsp или сервлетах можно использовать источник данных "jdbc/DB":
в сервлете:
ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/DB"); Connection conn = ds.getConnection( ); Statement stmt = conn.createStatement(); ...
в jsp:
< %@ page contentType="text/html;charset=UTF-8" language="java" % > < %@ taglib prefix="c" uri="http://java.sun.com/jstl/core" % > < %@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" % > < sql:query var="autoList" dataSource="jdbc/DB" > SELECT * FROM AUTO < /sql:query >
-
Примечание
Для использования JNDI-интерфейса со старыми JDK, не имеющими встроенной поддержки DataSource интерфейса, необходимо вручную установить соответствующие пакеты.
Для указания кодировки символов, использующейся на сервере, в JNDI-интерфейс добавлено свойство encoding.
Для использования нового свойства, например, совместно с tomcat, необходимо:
-
положить файлы
linjdbc-1.x.jar
в$TOMCAT_HOME/common/lib
; -
в файле
$TOMCAT_HOME/conf/server.xml
или в файле приложенияMETA-INF/context.xml
в теге < Context > прописать источник данных:< Resource name="jdbc/DB" auth="Container" type="com.relx.jdbc.LinterJNDIDataSource" factory="com.relx.jdbc.LinterJNDIDataSourceFactory" user="SYSTEM" password="MANAGER8" url="jdbc:linter:linapid:localhost:1070:local" encoding="cp866"/ >
-
если linapid запущен на UNIX-машине, установить encoding="koi8-r";
-
добавить в
WEB-INF/web.xml
ссылку на ресурс:< resource-ref > < res-ref-name >jdbc/DB< /res-ref-name > < res-type >com.relx.jdbc.LinterJNDIDataSource< /res-type > < res-auth >Container< /res-auth > < /resource-ref >
-
теперь в jsp или сервлетах можно использовать источник данных "jdbc/DB":
в сервлете:
Context ctx = new InitialContext( ); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/DB"); Connection conn = ds.getConnection( ); ..
в jsp:
< %@ page contentType="text/html;charset=UTF-8" language="java" % > < %@ taglib prefix="c" uri="http://java.sun.com/jstl/core" % > < %@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" % > < sql:query var="autoList" dataSource="jdbc/DB" >SELECT * FROM AUTO< /sql:query >