(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Технология сервлетов СУБД для доступа к данным БД

Люди часто совершают старые ошибки, но при этом ссылаются на новые обстоятельства.
А. Эйнштейн.

 Аннотация

Установленная в БД XML DB позволяет средствами СУБД, без привлечений внешнего контейнера сервлетов, организовать сервлетный доступ к данным в базе. Фактически это означает возможность организовать для доступа к данным сервер web «внутри СУБД». В статье показано на примерах, как это можно сделать. 

Введение

Эта статья является продолжением ранее опубликованных статей «XML DB - новое измерение в организации данных в Oracle», «Что дает репозитарий XML DB и как с ним работать» и «Как зарегистрировать схему XML в XML DB и как этим воспользоваться».

Репозитарий XML DB обеспечивает возможность доступа к данным БД на основе технологии сервлетов HTTP/HTTPS. Конфигурацию сервлетов можно наблюдать и устанавливать в ресурсе-файле /xdbconfig.xml.

Создавать сервлеты «внутри БД» можно на C и на Java, однако для первого случая фирма дает в распоряжение пользователям только готовый для употребления сервлет, а во втором - правила самостоятельного построения.

Если говорить о реализации на Java, то это часть возможностей по организации работы СУБД с разнохарактерными программными элементами на Java, имевшихся в Oracle в версиях с 8.1 по 9.0, но выполненных на иной технологической основе.

Встроенный сервлет DBURIServlet

Сервлет DBURIServlet написан на C и готов для употребления при установленном репозитарии по адресу / oradb /схема_БД/имя_таблицы[ ... ]. Тем не менее он параметризован, и поэтому представляет интерес для конечных потребителей БД.

Пример обращения:

 

 

 

 

 

 

 

 

 

 

Правила формирования адреса соответствуют правилам типа DBURITYPE.

Упражнение. Проверить работу сервлета DBURIServlet на следующих обращениях:

http://localhost:8080/oradb/SCOTT/DEPT/ROW[DEPTNO='30']

http://localhost:8080/oradb/SCOTT/DEPT/ROW[DEPTNO='30']/DNAME/text()

http://localhost:8080/oradb/SCOTT/EMPXML_SCHEMA_VIEW/ROW/employee[@empno='7499']

Сервлет DBURIServlet имеет параметры:

rowsettag - для смены имени корневого элемента, например: http://localhost:8080/oradb/SCOTT/DEPT?rowsettag=Departments

contenttype - для указания типа MIME, например: http://localhost:8080/oradb/SCOTT/DEPT?contenttype=text/plain

transform - для преобразования текста XML средствами XSLT.

Зарегистрируем в качестве ресурса /public/dept.xsl следующий текст:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

>

<xsl:output method="html" />

<xsl:template match="ROW">

  <tr>

  <td><xsl:value-of select="DEPTNO"/></td>

  <td><xsl:value-of select="DNAME"/></td>

  <td><xsl:value-of select="LOC"/></td>

  </tr>

</xsl:template>

<xsl:template match="DEPT">

<html><head></head><body><title>Departments</title>

<table class=borderall bordercolor="green">

  <xsl:apply-templates select="ROW"/>

</table>

</body></html>

</xsl:template>

</xsl:stylesheet>

Теперь обращение к XML DB по адресу:

http://localhost:8080/oradb/SCOTT/DEPT?transform=/public/dept.xsl&contenttype=text/html

даст следующий результат:

 

 

 

 

 

 

Текст с определением преобразования XSLT можно разместить и в таблице БД, обратившись за ним опять-таки через DBURITYPE примерно так:

transform=/oradb/SCOTT/XSLTDEFS/ROW[TAB='DEPT']/DEFINITION/text()

Упражнение. Создать таблицу XSLTDEFS с определением преобразования XSLT для таблицы DEPT (столбец TAB для имени таблицы и столбец DEFINITION для текста преобразования) и указать сервлету взять данные преобразования оттуда, а не из ресурса XML DB. Указание: поле DEFINITION определить типом VARCHAR2.

Прочие свойства сервлета приведены в документации по XML DB.

Создание сервлета на Java

Oracle XML DB поддерживает Java Servlet API версии 2.2 с некоторыми ограничениями, и с возможностью дополнительно установить сервлет поддержки JSP.

Подготовим текст сервлета в файле XMLDBServlet.java:

import java.io.PrintWriter;

import java.io.IOException;

import javax.servlet.GenericServlet;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.ServletException;

public class XMLDBServlet extends GenericServlet {

  public void service (

              ServletRequest  request

            , ServletResponse response

  )

  throws ServletException, IOException {

    String s = request.getParameter ( "rex" );

    response.setContentType ( "text/xml" );

    PrintWriter out = response.getWriter ( );

    out.println ( "<?xml version=\"1.0\"?>" );

    out.println ( "<html><head>" );

    out.println ( "<title>My XMLDBServlet servlet demo</title>" );

    out.println ( "</head><body>" );

    out.println ( "<h2>Ave, " + s + " !</h2>" );

    out.println ( "</body></html>" );

    out.close ( );

  }

}

Пример ради общности рассматривает употребление суперкласса GenericServlet, а не HttpServlet.

Загрузим сервлет в БД одним из возможных способов:

>loadjava -grant public -u scott/tiger -r XMLDBServlet.java

Проверкой легко убедиться, что СУБД не только загрузит исходный текст, но и получит из него класс.

Чтобы сервлет мог вызываться извне, сведения о нем требуется занести в ресурс-файл /xdbconfig.xml в репозитарии XML DB. Это файл с «объектно-реляционным» хранением, и подправить его можно либо через WebDAV (системами, обеспечивающими такую правку), либо обычными функциями UPDATEXML и прочими. (Именно этот файл не допускает удаления из репозитария, поэтому выгрузить его, подправить и загрузить заново невозможно).

Однако при желании, для удобства правки файла /xdbconfig.xml можно использовать специально созданые для этого подпрограммы пакета DBMS_XDB. Выполним в SQL*Plus от имени пользователя XDB:

DECLARE

xval XMLTYPE;

xnode1 XMLTYPE := XMLTYPE (

'

<servlet xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd">

  <servlet-name>XMLDBServletPrimer</servlet-name>

  <servlet-language>Java</servlet-language>

  <display-name>Oracle XML DB Servlet Primer</display-name>

  <servlet-class>XMLDBServlet</servlet-class>

  <servlet-schema>SCOTT</servlet-schema>

</servlet>

');

xnode2 XMLTYPE := XMLTYPE (

'

<servlet-mapping xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd">

  <servlet-pattern>/xdbserv</servlet-pattern>

  <servlet-name>XMLDBServletPrimer</servlet-name>

</servlet-mapping>

');

BEGIN

SELECT DBMS_XDB.CFG_GET ( ) INTO xval FROM dual;

SELECT

 INSERTCHILDXML (

   xval, '/xdbconfig//servlet-list', 'servlet', xnode1

 )

INTO xval FROM dual

;

SELECT

 INSERTCHILDXML (

   xval, '/xdbconfig//servlet-mappings', 'servlet-mapping', xnode2

 )

INTO xval FROM dual

;

DBMS_XDB.CFG_UPDATE ( xval );

COMMIT;

END;

/

Теперь обращение по адресу:

http://localhost:8080/xdbserv?rex=Caesor

даст результат:

 

 

 

 

 

 

 

 

Выдача данных в формате HTML и обращение к БД делается как обычно.

Например, для перехода к HTML в данном случае даже необязательно пользоваться классом HttpServlet. Достаточно в описании сервлета заменить text/xml на text/html и изъять строку out.println ( "<?xml version=\"1.0\"?>" );.  Перетранслировав сервлет, получим по тому же адресу:

 

 

 

 

 

 

 

 

Ссылки по теме


 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Oracle »
Написать редактору 
 Рекомендовать » Дата публикации: 28.12.2006 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Oracle Database Personal Edition Named User Plus License
Oracle Database Standard Edition 2 Named User Plus License
Oracle Database Personal Edition Named User Plus Software Update License & Support
Oracle Database Standard Edition 2 Processor License
CorelDRAW Home & Student Suite 2018 ESD. Электронный ключ.
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Новые материалы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Сайт инструмент (1)
Я бывший программист пользовался 1 сайтом проверенным он мне действительно помог я блогодоря...
 
Где взять лицензионный ключ для AllFusion Process Modeler (BPwin) 7? (5)
Выручайте!!! где найти ключ, ужасно срочно нужна программа. заранее спасибо!
 
работа на дому! (5)
Доброго времени суток дорогие друзья. Многоуровневый маркетинг окончательно признан...
 
Регистрация на Oracle.com (4)
Сразу прошу прощения за тупой вопрос, но вчера зарегался на oracle.com (чтоб 9i слить себе...
 
Ищу кодера (2)
Добрый день! Ищу кодера который сможет сделать копии сайтов. Сколько будет стоить скопировать...
 
 
 



    
rambler's top100 Rambler's Top100