Доступные версии документации

JNDI

Для подсоединения к БД с помощью JNDI-интерфейса используются два класса:

  1. com.relx.jdbc.LinterJNDIDataSource (com.relx.jdbc.jndi.LinterDataSource для jdbc2, jdbc.LinJdbc.jndi.LinterDataSource для jdbc1) – реализация javax.sql.DataSource интерфейса, предназначенного для создания соединения с СУБД;

  2. 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) создается описание источника данных и его свойств (это выполняется, как правило, однократно при конфигурировании приложения). Затем приложение может многократно получать из контекста источник данных и создавать соединение к этому источнику данных.

Примеры

  1. Программное создание источника данных и привязка его к определенному имени в JNDI-контексте:

    import jdbc.LinJdbc.jndi.LinterDataSource; // для версии JDK < 1.2
    import com.relx.jdbc.jndi.LinterDataSource; // для версии JDK 1.2-1.3
    import com.relx.jdbc.LinterJNDIDataSource; // для версии JDK 1.4 и выше
    ...
       LinterDataSource ds = new LinterDataSource();
       ds.setUser("SYSTEM");
       ds.setPassword("MANAGER");
       ds.setServerName("localhost");
       ds.setPortNumber(1070);
       ds.setDatabaseName("DEMO");
    
       Context ctx = new InitialContext();
       ctx.bind("jdbc/DemoDB", ds);
    ...
  2. Подсоединение к БД c использованием только текстового имени источника данных, помещенного в JNDI-контекст:

      Connection getMyLinterConnection()
        throws NamingException, SQLException
      {
        Context ctx = new InitialContext();
        DataSource ds = (DataSource) ctx.lookup("jdbc/DemoDB");
        Connection conn = ds.getConnection();
        return conn;
      }
  3. Пример конфигурирования источника данных Tomcat для соединения с СУБД (jdk >=1.4):

    1. скопировать файлы linjdbc-1.x.jar в каталог $TOMCAT_HOME/common/lib;

    2. в файле $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="MANAGER"
                    url="jdbc:linter:linapid:localhost:1070:local"
                    encoding="cp866"/>
    3. если сервер JDBC запущен на UNIX-машине, установить encoding="koi8-r";

    4. добавить в 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>
    5. теперь в 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, необходимо:

  1. положить файлы linjdbc-1.x.jar в $TOMCAT_HOME/common/lib;

  2. в файле $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="MANAGER"
             url="jdbc:linter:linapid:localhost:1070:local"
             encoding="cp866"/>
  3. если linapid запущен на UNIX-машине, установить encoding="koi8-r";

  4. добавить в 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>
  5. теперь в 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>
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter